Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

기업용 Node.js 플랫폼 N|Solid 사용해보기

Node.js로 서비스를 운영하다 보면 예상치 못한 문제가 생겨서 디버깅을 해야 할 때가 있다. 단순한 버그로 동작이 이상하게 되거나 예외가 발생한다면 로그를 찍어보거나 개발자 도구로 디버깅을 해보면서 수정해 보면 되지만 성능 문제나 메모리 누수, CPU 사용률의 증가 등의 이슈가 발생한다면 좀 더 세밀하게 애플리케이션을 살펴보아야 한다. 이런 경우는 코드를 보는 것만으로는 해결이 되지 않으므로 CPU나 메모리의 사용빈도도 확인해 봐야 하고 때로는 Heap dump로 생성해서 봐야 하는데 막상 운영에서 이런 내용을 보기가 쉽지 않다는 걸 깨달았다. 물론 Heap dump는 생성해도 이걸 어떻게 분석하냐는 문제가 있긴 하지만 그전에 살펴볼 수 있는 Heap dump 등은 만들어야 한다. 사용할 수 있는 도구로는 New Relic이나 PM2에 연결해서 사용할 수 있는 Keymetrics가 있지만, New Relic은 모니터링으로는 괜찮았지만, 막상 디버깅하기에는 정보가 부족하지 않았고 Keymetrics는 Heap dump도 지원하는 등 좀 더 괜찮았지만, UI가 좀 맘에 들지 않았다.

원래는 NodeSource에서 만든 N|Solid에 관심이 많았는데 운영서버에 설치해서 사용하려면 설치가 꽤 복잡해서 이미 구축해놓은 인프라에서 N|Solid 기반으로 바꾸는 것은 꽤 큰 작업이었다. 어쨌든 그래서 N|Solid를 제대로 써보지는 못했지만, 관심을 계속 가지고 있었고 다음에 Node.js로 서비스를 운영한다면 N|Solid를 기반으로 구축하는 것도 괜찮다는 생각을 하고 있었다.(당연하지만 NodeSource와 나는 아무런 관련이 없다.)

N|Solid

N|Solid는 기업용 Node.js 플랫폼인데 간단히 말하면 Node.js 런타임을 패키징해서 모니터링, 성능 분석 등을 지원할 수 있게 만든 프로젝트이다. Node.js에서 유명한 사람들이 많이 포함되어 있고 현재 Node.js 프로젝트를 이끄는 Rod Vagg이 NodeSource의 CNO(chief node officer)로 있어서 기술적으로 신뢰할 만하다.

내 취향으로는 이런 도구를 서비스의 기반으로 깔고 가는 것을 좋아하는 편은 아니지만 다양한 운영상의 이슈를 처리하려면 (N|Solid가 신뢰할 만 하다는 전제하에) 이런 플랫폼을 기반으로 가는 것도 나쁘지 않다는 생각이 들게 되었다. 이미 인프라를 구축해 놓은 상황에서 New Relic과 Keymetrics 등의 도구로 서비스를 감시하는 것은 약간 한계가 있었기에 아예 괜찮은 올인원 플랫폼을 기반으로 가져가는 것도 낫겠다는 생각이다.

그동안 N|Solid가 프로덕션용으로만 나와서 설치하려면 여러 가지 작업을 해야 했기에 제대로 테스트를 못 해보고 있었는데 최근에 개발에서도 N|Solid를 사용할 수 있도록 인스톨러가 나와서 로컬에서도 쉽게 사용해 볼 수 있게 바뀌었다.

N|Solid 설치

다운로드 페이지에서 OS X, Linux용 패키지를 제공하고 있으므로 간단하게 설치할 수 있다.

N|Solid OS X 인스톨러

OS X의 경우 일반적인 애플리케이션처럼 "다음"만 누르면 바로 설치할 수 있다. 현재 N|Solid 버전은 1.4인데 1.x는 Node.js v4.x Argon LTS를 사용하고 있다.

설치가 완료되면 터미널에서 nsolid-console 명령어를 사용할 수 있다. nsolid-console로 콘솔을 실행한 뒤 웹 브라우저에서 http://localhost:3000으로 접근하면 다음과 같은 라이센스키 입력 화면을 볼 수 있다.

N|Solid 라이센스 키 등록 페이지

라이센스 키는 등록페이지에 간단한 정보를 입력하면 이메일로 라이센스키가 발급된다. 발급받은 키를 위 화면에 입력하면 N|Solid를 로컬에서 사용할 준비가 완료된다.

N|Solid 실행

N|Solid로 Node.js 애플리케이션을 감시하려면 애플리케이션을 N|Solid 런타임으로 실행해야 한다. N|Solid 런타임을 사용하려면 터미널에서 N|Solid 런타임을 활성화해야 하는데 다음과 같이 source /usr/local/nsolid/nsolid-env 명령어로 활성화한다.

$ source /usr/local/nsolid/nsolid-env
Configuring shell for N|Solid

N|Solid v1.4.0 (node v4.4.7, npm 2.15.8)

You are now configured to use nsolid at:
    /usr/local/nsolid/bin/nsolid
    /usr/local/nsolid/bin/npm

Type restore to exit and restore your previous state

(nsolid) $ 

N|Solid 런타임을 실행하면 터미널 앞에 (nsolid)라고 표시가 되고 빠져나가려면 restore를 입력하면 된다.

테스트를 위해 간단한 slack-invite-automation를 실행해 보자. N|Solid 런타임내에서 평소처럼 Node.js 애플리케이션을 실행하면 되는데 NSOLID_APPNAME 환경변수로 애플리케이션 이름을 지정할 수 있다.

$ NSOLID_APPNAME=slack-invite-automation node bin/www

위 애플리케이션은 8000포트로 열리므로 http://localhost:8000으로 접속하면 애플리케이션을 볼 수 있다.

$ nsolid-console
Launching nsolid-console

You will probably want to run the following command in a new Terminal window
to use the N|Solid shell.

    source /usr/local/nsolid/nsolid-env

Server running on http://0.0.0.0:3000

이제 터미널 창을 하나 더 열어서 nsolid-console을 실행하고 웹 브라우저에서 http://localhost:3000에 접속하면 N|Solid 콘솔을 볼 수 있다.

N|Solid 콘솔

N|Solid 콘솔

N|Solid 런타임과 콘솔이 실시간으로 통신하므로 위에서 띄운 애플리케이션이 나타난 것을 볼 수 있다.

N|Solid의 애플리케이션 모니터링 화면

클릭해서 들어가면 CPU/메모리 사용률에 따라 애플리케이션 노드가 표시되는 것을 볼 수 있다. 로컬에서 1대만 실행했으므로 왼쪽 아래에 1개의 노드만 실행되어 있다.

N|Solid의 Threshold 설정화면

오른쪽 위의 "Threshold Settings"를 눌러서 들어가서 활성화하면 CPU나 Heap 메모리에 따라 경고를 받을 지점을 설정할 수 있고 지정한 Threshold에 이르렀을 때 CPU 프로파일링이나 Heap dump를 자동으로 수행하도록 설정할 수도 있다.

N|Solid에서 애플리케이션 모니터링에 Threshold가 표시된 화면

지정한 Threshold는 보기 쉽게 표시가 된다.

N|Solid의 취약점 보고서

우측에 빨간색으로 vulnerabilities라고 나온 부분을 누르면 사용하는 패키지 등에서 발견된 보안 취약점을 알려준다. 이는 Node Security 프로젝트에서 잘 관리되고 있지만, 모니터링에서 바로 볼 수 있다는 점은 편리해 보인다.

애플리케이션 노드의 상세 모니터링

원하는 노드를 클릭하면 CPU, Memory 등의 정보를 실시간으로 모니터링해 볼 수 있다.

애플리케이션의 Heap 스냅샷

하단의 New Snapshot을 누르면 바로 Heap의 Snapshot을 볼 수 있어서 어떤 부분에서 메모리를 많이 사용하고 있고 누수가 발생하는지를 확인해 볼 수 있다. 물론 Heap 스냅샷에서 누수를 찾는 것도 보통 일은 아니지만 바로 확인해 볼 수 있다는 부분은 중요하다.

CPU 프로파일 설정

New Profile을 누르면 프로파일링을 조건을 볼 수 있다. 프로파일링 결과로 Sunburst, Flamegraph, Treemap를 선택할 수 있는데 어차피 프로파일링 하고 나면 바꿔가면서 볼 수 있다.

CPU 프로파일 Flamegraph

Node.js 프로파일링 발표 등을 보면 흔하게 보는 Framegraph로 CPU를 많이 사용하는 부분을 확인해 볼 수 있다.



쓰다 보니 N|Solid 콘솔의 기능 설명이 위주가 되어버렸는데 더 자세한 기능을 N|Solid 사이트에서 확인해 볼 수 있다.

처음 N|Solid가 등장했을 때 기업용 Node.js 플랫폼이라는 말이 약간은 모호하게 들려서 망설였지만, 서비스에서 모니터링은 항상 중요하고 또 메모리 누수나 성능 저하의 문제가 발생하면 확인하기가 상당히 어려우므로 구축할 때부터 이런 플랫폼을 기반으로 운영하는 것도 나쁘지 않다고 생각한다. 이제 막 로컬에서 사용할 수 있게 되어서 좀 더 테스트해봐야 하지만 테스트해 본 인상은 아주 좋다. 그리고 대시보드가 너무 예뻐서 더욱 맘에 든다. 대시보드 화면만 보고 있어도 기분이 좋을 것 같은....

참고로 N|Solid는 개발용으로는 무료이고 프로덕션에서는 과금이 되는 것 같지만 공개된 가격 정책은 아직 나오지 않았다. 개발하면서 테스트해보고 NodeSource측에 연락을 해보아야 정확한 가격대를 알 수 있겠지만 이런 도구가 대부분 그렇듯이 아주 싸지는 않을 것이다.

2016/07/31 22:11 2016/07/31 22:11