APM을 사용하는 이유
APM(Application Performance Monitoring)이란?
간단하게 말해서 내 애플리케이션의 성능을 추적하기 위해 모니터링할 수 있도록 해주는 도구를 말한다.
APM을 쓰면 프론트엔드나 백엔드나 인프라(ex. 데이터베이스)의 성능을 계속 추적하면서 확인할 수 있다. 트랜젝션이 갑자기 느려지거나 실패했을 때, APM을 사용하고 있었다면, 아주 빠르게 데이터를 보면서 어디서 문제가 왜 발생했는지 알 수 있게 도와준다.
정확한 정의가 헷갈려서 찾아보니 '성능'과 관련된 기능을 갖추면 APM 툴이라고 그냥 부르는 것 같다.
네트워크 성능을 분석해주는 APM도 있고 Code 수준에서 분석해주는 APM(ex. New Relic)도 있다. 나는 이번에 코드 수준까지 Deep하게 Tracking하면서 알려주는 New Relic을 사용해보려고 한다.
New Relic 사용 예시
분산된 Log를 Tracing해주는 기능이 정말 편하다.
다음과 같이 애플리케이션에서 난 에러를 표시해준다.
타고 들어가면 에러가 정확하게 코드 어디에서 났고 각각의 함수가 몇 초가 걸렸는지도 알려준다.
장애가 발생했을 때의 병목 지점을 찾기도 쉽다.
APM을 사용하는 이유
APM을 쓰는 이유는 어떤 문제가 발생했을 때 아주 빠르게 왜 발생했는지 알 수 있기 때문이다.
APM을 쓰면 문제가 생겼을 때 Log가 남는다. 프론트엔드나 백엔드나 인프라(ex. 데이터베이스)의 성능을 계속 추적하면서 로그를 모니터링 할 수 있다. 만약 갑자기 느려지는 현상이 나타나면 APM로 왜 문제가 발생했는지 쉽게(실제로 쉽진 않겠지만 그만큼 많이 도와준다는 뜻) 알 수 있다.
Code 수준으로 분석해주는 툴을 쓰면 어떤 SQL query가 느린지 어떤 메소드가 느린지 실제 어떤 함수가 문제를 일으키는지 조차도 알 수 있다. 실제 코드 레벨로 문제를 분석해주는게 정말 편해보인다.
그 외로도 기능이 되게 많다.
- CPU, Memory 사용량은 물론이고 GC도 분석해준다.
- 문제가 발생했을 때 그 유저가 누구이고 어떤 의존성(SQL, HTTP Method, ...)을 호출했는지도 알려준다.
- 그리고 실제 유저가 페이지를 렌더링하는데 걸린 시간도 보여준다.
회사에서도 무조건 쓴다고 한다.
비싸지 않을까? 소규모 프로젝트에도 필요할까?
학생이 할 만한 작은 프로젝트는 거의 무료이다.
New Relic 가격 표를 가져왔다.
연동하는 것도 쉽고 어차피 무료면 안 쓸 이유가 없다고 한다.
다양한 APM이 있는데 어떤 것이 좋을까?
Code level로 분석해주는 APM으로는 대표적으로 3종류의 APM이 있다.
- New Relic
- Dynatrace
- DataDog
- Sentry
대부분 제공해주는 기능이 비슷하다고 한다. (나도 안 써봐서 모른닷)
가격별로 제공해주는 기능들을 보며 팀에 맞는 APM을 선택해서 사용하면 될 것이다.
Jennifer나 Scouter와 같은 국산 툴도 몇개 있다.
Jennifer와 같은 경우 Java 어플리케이션을 모니터링하는데 주로 쓰며 SI 업계에서 많이 쓴다고 한다.
Scouter는 LG CNS에서 공개한 오픈소스(https://github.com/scouter-project/scouter)인데 Jennifer와 비슷하다고 한다. 오픈소스기 때문에 내부적으로 깔아서 무료로 쓸 수 있다.