전체 글

개발에 관련된 학습 내용들을 기록하는 공간입니다.
DevOps/Monitoring

Prometheus & Grafana 모니터링 시스템 구축하기

개요 서비스를 운영할 때는 애플리케이션의 CPU, 메모리, 커넥션 사용, 고객 요청수 같은 수 많은 지표들을 확인하는 것이 필요하다. 그래야 어디에 어떤 문제가 발생했는지 사전에 대응도 할 수 있고, 실제 문제가 발생해도 원인을 빠르게 파악해서 대처할 수 있다. 지난 포스팅에서 APM 도구인 Scouter를 설치하고 프로젝트에 적용해보는 방법에 대해 다뤘었다. 이후 운영환경에 적용하여 잘 사용하고 있지만 Connection/Thread Pool 등 애플리케이션에 대한 보다 세부적인 지표를 모니터링 할 수 있으면 좋겠다는 생각이 들었다. Prometheus는 2012년 출시된 오픈소스 모니터링 플랫폼이다. 기존 모니터링 플랫폼과는 다르게 Pull 방식을 사용하여, 각 모니터링 대상의 Exporter 또는 ..

DevOps/Monitoring

APM(scouter)을 통해 WAS 모니터링하기

개요 지난 9월 서비스 출시이후 사용자들의 데이터를 수집하고 애플리케이션의 가용성을 측정하는 방법에 대한 관심이 커졌다. 특히 로그 모니터링에 대한 관심이 커졌는데, 관련 내용을 찾아보는 과정에서 APM 이라는 키워드를 알게 되었다. APM 은 Application Performance Management의 약자로, 애플리케이션 및 코드의 성능 문제를 신속하게 식별하고 해결하기 위한 프로세스이다. 대표적인 APM 으로는 Dynatrace, New relic, AppDynamics, WhaTap 오픈소스로는, Naver의 Pinpoint, LG CNS의 Scouter 가 있다. 우리는 비용과 관리, 운영 측면에서 최소한의 리소스로 사용할 수 있는 도구를 원했기때문에 Scouter를 선택하게되었다. GitH..

Test

@SpringBootTest 에서 테스트 격리하기

개요 E2I팀은 RestAssured 프레임워크를 사용하여 인수 테스트를 작성하고 있다. Member 테이블과 관련된 테스트 작성 도중 개별적으로 수행했을 땐 성공하던 테스트가 여러 테스트를 함께 돌렸을 때 깨지는 현상을 발견하였다. 보통 이런 경우는 테스트간 환경 분리가 제대로 되지 않아서 발생할 확률이 크다. 이전 테스트에서 수행했던 내역이 남아, 다른 테스트에 영향을 끼치는 것이다. 원인 분석 바로 원인을 분석하기 위해 에러 메시지를 확인해본결과, 쿼리를 실행할 때 문제가 발생한다는 것을 알 수 있었고 디버깅해본 결과, Member Entity를 저장하는 로직에서 UndeclaredThrowableException이 발생하는 것을 확인할 수 있었다. UndeclaredThrowableExceptio..

AWS

[AWS] Bastion Host를 통해 내부서버에 접속하는 방법

[AWS] Bastion Host 이해 및 구축 Bastion Host 란? Bastion이라는 단어의 뜻은 중세시대에 성 외각을 보호하기 위해 돌출된 부분을 의미합니다. Bastion Host도 이와 같습니다. 사용자에게 제공되는 컴퓨팅 리소스를 보호하기위한 Host로, rachel0115.tistory.com 앞선 포스팅에서 Bastion Host를 구축해보았습니다. 해당 포스팅에서는 Bastion Host를 통해서 사설 IP 대역에 ping을 날리는 것으로 연결을 확인하였는데요. 이번에는 Bastion host를 통해 사설 IP 대역에 있는 내부 서버에 접속하는 방법에 대해 알아보겠습니다. 먼저, 내부 서버가 ssh 22번 포트에 대해 모든 VPC IP 혹은 Public Subnet IP 대상으로 ..

AWS

[AWS] Bastion Host 이해 및 구축

Bastion Host 란? Bastion이라는 단어의 뜻은 중세시대에 성 외각을 보호하기 위해 돌출된 부분을 의미합니다. Bastion Host도 이와 같습니다. 사용자에게 제공되는 컴퓨팅 리소스를 보호하기위한 Host로, 방화벽 역할을 하게됩니다. 특히, 사설 IP 대역에 위치한 리소스를 외부에서 접속하고자 할 경우, Bastion Host를 경유하여 리소스에 접근하도록 설계되곤 합니다. 설명을 돕기위해 다음의 AWS 인프라를 가진 서비스가 있다고 가정해보겠습니다. 위 구성에 대한 간단한 설명은 다음과 같습니다. 2개의 AZ를 사용하고 있고 ALB 를 통해 클라이언트의 요청이 EC2에 띄워진 각 서버에 라우팅 됩니다. 각 서버는 Public Subnet (공인 IP) 대역에 위치합니다. DB는 RDS..

Test

RestAssured로 REST API 테스트하기

🔹 개요 E2I 백엔드 팀은 MVC의 각 계층별로 다음과 같이 테스트를 작성하고 있었다. - Controller: 단위 테스트 (Mocking) - Service: 단위, 통합 테스트 (Mocking, SpringBootTest) - Repository: 단위, 통합 테스트 (DataJpaTest, SpringBootTest) Controller 계층의 테스트를 단위 테스트로 작성한 이유는 Service 계층에서 이미 통합 테스트를 작성하고 있었기 때문에, Controller Layer에서는 들어오는 값에 대한 Validator만 제대로 동작하면 실제 API가 동작하는데에도 문제가 없을 것이라 생각했기 때문이다. 하지만, 프론트와 API를 연동하는 과정에서 개발 당시에 생각하지 못했던 다양한 문제가 발생..

KAispread
기억의 정류장