본문 바로가기

프로그래밍/node.js

node inspector - 노드를 디버깅하자. Let's debug node

Node.js는 이미 매우 강력한 서버로 인정받았고 널리 쓰이는 서버중 하나가 되었습니다. 그에 따라 Node가 하나의 플랫폼이 되가고 있고, NPM을 통해 수많은 node modules가 나오면서 생태계가 형성되고 있습니다. 그 많은 modules중에는 디버깅 툴이 없을리가 없겠죠. 하지만 디버깅 툴을 만든다는 것이 그렇게 쉬운 일만은 아니죠. 많은 node 디버깅 툴이 나오긴 했지만, 사용이 불편해서 많이 쓰이지 않고 node 자체가 자바스크립트를 쓰기 때문에 딱히 디버깅 툴을 쓰지 않아도 디버깅을 하는데는 크게 어려움이 없어서 디버깅 툴이 크게 주목받지 못했습니다. 

그러다가 굉장히 강력한 node 디버깅 툴이 나왔죠. 그게 바로 node inspector라는 툴입니다. 

node inspector: https://github.com/dannycoates/node-inspector

node inspector는 내부적으로 자체 node 서버를 돌리고 Webkit의 web inspector를 이용하여(크롬에서 F12 누르거나 오른쪽 버튼을 누르고 요소검사를 나오면 나오는 그 창 있죠? 그걸 말하는 겁니다.) node 서버를 디버깅하게 됩니다. web inpector에서 제공하는 기능들 중 서버쪽에서 사용할 만한 기능들을 대부분 지원하고 있습니다. 스크립트를 확인하여 break point를 걸어서 변수들을 확인할 수 있고, 특정 지점에서 break 되었을 때, console를 이용하여 즉흥적으로 스크립트를 작성하여 테스트해볼 수 도 있습니다. 그리고 아직 테스트중에 있는 기능은 v8-profiler를 이용하여 서버의 성능을 테스트 해 볼 수도 있습니다.

node inspector를 설치하기 위해서는 다른 node module과 마찬가지로 npm으로 설치해 줍니다.

$ npm install -g node-inspector

여기서 설치를 할때 -g 를 이용하여 글로벌로 설치를 해 줍시다. node inspector는 특정 서버 앱에 의존적이지 않으니까요.

그리고 node inspector를 사용하기 위해서는 node 서버를 실행을 할때 debug 모드로 실행을 해 주어야 합니다. debug모드로 실행을 하면 node 서버가 debug서버를 따로 돌리게 되는데, node inspector는 이를 캐치하여 web inspector에서 디버깅을 할 수 있습니다. 

$ node --debug your/node/program.js

디버깅 모드를 시작할때 한가지 옵션이 있는데, 노드를 시작하자 마자 브레이크를 걸 수 있습니다. 다음 명령어를 이용해서 말이죠.

$ node --debug-brk your/short/node/script.js

이렇게 디버깅모드에서 실행을 했으면 node inspector를 실행해 줍니다.

$ node-inspector &

뒤에 &는 백그라운드에서 실행하고 싶을때 붙이는 기호입니다. 터미널 환경에서 원래 쓰이는 기호입니다. 아무래도 node inspector는 한번 실행해 놓고 계속 디버깅을 해나가는 것이 편하기 때문에 백그라운드에서 실행하는 것을 추천합니다.

Webkit 기반의 웹 브라우저에서(크롬이 가장 안정적입니다.) 다음 URL로 접속해 줍니다.

http://127.0.0.1:8080/debug?port=5858 

여기서 8080은 node inspector가 실행되는 포트이고, 5858은 node의 debug 서버가 실행되는 포트입니다. 이렇게 실행을 하시면 크롬에서 많이 보시면 Webkit Inspector 화면을 보실 수 있습니다. 

여기서 부터는 브레이크 포인트를 걸고 콘솔창에서 스크립트를 쓰면서 놀면 되는 거죠. 자세한 사용법은 아래 동영상을 보시면 참고가 될 듯 합니다.

node inspector 사용 동영상: http://www.youtube.com/view_play_list?p=A5216AC29A41EFA8

v8-profiler같은 경우는 아직 완벽하지 않는 기능입니다. 기본적으로 node inspector에서 나타나지도 않습니다. 이는 따로 v8-profiler를 설치하여 사용하셔야 합니다. 한번 설치하여 써볼려고 시도는 해 보았는데, 잘 되지는 않더라고요. 아직 이슈가 많은 기능입니다.