Node.js 애플리케이션 모니터링의 의미
정말 많은 모듈과 기능들이 존재하는 NPM, 상당히 높은 IO 성능과 , 빠른 시간에 서비스를 구현할 수 있는 Node.js의 광풍은 정말 빠르게 도입되고 있고, 많은 모바일 게임회사와 스타트업들에게서 사용됩니다.
Node.js를 기반으로 한 백엔드 시스템에 대한 이야기는 매거진 내에서 참조해주시고, 이번 글에서는 Node.js의 장점인 비동기 방식으로 인한, 애플리케이션 트랜잭션의 흐름을 순서대로 모니터링하기 어렵다는 커다란 장벽이 존재합니다.
그래서, Node.js를 간단하고 단순하게 사용하는 것이 최선이다라는 이야기가 있습니다. 실제, 그렇게 사용하는 곳들이 많으시고요. 그렇다면, Node.js는 좀 더 복잡한 애플리케이션에는 어울리지 않는 것일까요?
아닙니다.
Node.js용 성능 모니터링을 제공하는 도구를 사용하신다면, 이 난관을 극복할 수 있습니다. 해외의 N사와 A사가 지원하고 있고, 국내에서는 와탭에서 제공됩니다. ( N사는 New Relic, A사는 AppDynamics입니다. )
그렇다면, 각 사의 제품들을 살짝 비교해볼까요?
먼저, 성능 데이터 수집!
성능 데이터의 기본 지표로는 URL, 횟수, 응답 시간, 에러 등의 정보를 기반으로 트랜잭션 프로파일링을 수행합니다. 사용자가 요청한 URL을 기반으로 성능 데이터를 분석할 때에 그 '수집 시기'는 매우 중요한 기준입니다.
- NewRelic : 2분
- AppDynamics : 5분
- WhaTap : 5초
기본적으로 해외 제품들은 사후 분석을 중심으로 구현되어 있고, 사용자들이 '충실하게 서비스를 설계 구현'한다는 전제조건하에, 웹 트랜잭션과 서버 리소스 간의 상호관계를 분석하는 것에 집중되어 있습니다. 하지만, 국내의 상황이나 실제 Node.js의 개발의 특징이 빠르게 개발되고 있기 때문에 이 데이터 주기는 가능한 짧은 것이 좋다는 생각하에, 와탭은 5초로 실시간 수집을 하며, 사후 분석을 위한 큐브 데이터는 5분 단위로 통계정보를 제공합니다.
다만, AppDynamics는 일부 트랜잭션 정보만 수집하고 있다는 것이 좀 약한 상황입니다.
데이터 베이스 프로파일 분석
당연, Node.js 개발 시에도 대부분의 병목이나 성능 이슈는 DB에서 발생됩니다. 거의 대부분의 문제는 이 DB 문제만 잡으셔도 됩니다. 다만, Node.js는 DB도 잘 어울리지만, MongoDB도 많이 사용하고 있기 때문에 이 두 가지 모두를 효과적으로 지원해야 합니다. ( 특히, Mode.js는 MEAN스택으로 자주 사용되기 때문에 MongoDB의 수집은 이제 사실상 필수입니다. )
- NewRelic : MySQL (O), MongoDB(-) MongoDB의 경우 수집하고 있지 않음.
- AppDynamics : MySQL (.), MongoDB(.) 둘 다 수집은 하지만, 어떤 트랜잭션에서 수행 중인 쿼리인지는 구분하지 못하는 경우가 많음.
- WhaTAP : MySQL(O), MongoDB(O) - 두 DB 모두 프로파일링 정보를 제대로 수집함.
트랜잭션 자원 사용량
웹 트랜잭션에서 가동 중인 CPU와 메모리 사용량에 대해서 정밀한 분석은 현재 3개사 모두에서 자료 수집이 가능함.
그 이외에도 GC Count나 Time수집 등의 처리를 좀 더 지원하는 것이 와탭의 Node.js지원입니다. 다만, Topology지원이 안 되는 것이 현재 와탭의 유일한 약점이죠. ( 사실, 토폴로지 형태가 얼마나 효과적인지는... )