컨테이너에 Node.js를 구동 중 일 때 Debug 방법

작성자 김효상 수정일 2022-12-27 16:07

#TwinReader, #node.js

아티클 관련 제품: TwinReader

들어가며

  • TwinReader의 MGR POD는 node.js를 통해 back-end가 구성되어 있습니다.
  • 예기치 않은 예외 상황이 발생하여 무한 루프와 같은 현상이 발생한다면 CPU를 100% 가까이 혹은 이상 점유하며 node.js 서버가 정상적인 작동을 하지 않을 수 있습니다.
  • 이와 같은 CPU를 계속 점유하며 무한 루프 현상이 발생할 때 Debug 할 수 있는 방법을 알아보도록 하겠습니다.


Node debug 참고 사이트:

https://nodejs.org/en/docs/guides/debugging-getting-started/

https://nodejs.org/api/debugger.html#debugger



Debug을 위한 무한 루프 코드 작성 및 코드 실행

테스트를 위해 아래와 같이 단순한 무한 루프 코드를 $HOME 폴더 밑에 nodetest 폴더를 생성 후 main.js를 만들어 작성합니다.


mkdir ~/nodetest 
cd nodetest
vi main.js


main.js 코드

let i=0;

for(;;) {
  i++;
}


Node 도커 컨테이너를 실행합니다.

docker run -itd --name nodetest -w /src -v ${HOME}/nodetest:/src node:14.17.3

docker exec 명령어를 이용하여 무한 루프 코드를 실행합니다.

docker exec -it nodetest node main.js


Node.js의 inspect 명령어를 이용하여 Debug

무한 루프 코드를 통해 debug 할 수 있는 환경을 만들었으며 node inspect를 통해 간단하게 debug 방법을 확인해 보겠습니다.


새로운 터미널을 오픈하여 docker exec 명령어를 통해 컨테이너에 접속합니다.

docker exec -it nodetest bash


ps -ef 명령어를 통해 node 프로세스의 ID를 확인합니다.

ps -ef | grep main.js


확인한 PID를 이용하여 Node.js debug 모드를 활성화 합니다.

kill -s SIGUSR1 [PID]


node inspect 명령어를 통해 debug 모드로 진입합니다.

node inspect -p [PID]


Debug 모드에서 pause 명령어를 입력합니다.

debug> pause


pause 명령어를 입력 할 경우 breakpoint 가 생성 되며 현재 무한 루프가 발생한 부분을 확인 할 수 있습니다.

break in main.js:3
  1 let i=0;
  2
> 3 for(;;) {
  4   i++;
  5 }

 


다음 스텝으로 이동해야 할 경우 n 혹은 next를 입력합니다.
pause 상태에서 계속 실행을 해야할 경우 c 혹은 cont를 입력합니다.

cont, c: Continue execution
next, n: Step next


변수 값을 확인하고 싶을 경우 exec('변수명') 혹은 repl를 이용하여 변수 값을 확인할 수 있습니다.


exec 명령어를  이용하여 i의 변수 값 확인

debug> exec('i')


repl 명령어를 이용하여 i 변수 값 확인

debug> repl
Press Ctrl + C to leave debug repl
> i


마무리

  • Node.js 컨테이너의 debug 방법을 알아 보았습니다.
  • 특정 위치의 정보를 확인해야할 경우 setBreakpoint() 함수를 이용하여 확인도 가능합니다.
  • 필요할 경우 사이트를 참고해 보세요 https://nodejs.org/api/debugger.html#breakpoints

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300