Node.js 애플리케이션이 이유 없이 느려지거나, 메모리 점유율이 비정상적으로 높아질 때 여러분은 어떻게 대응하시나요? 단순히 코드를 훑어보는 것보다 시각적인 데이터로 병목 지점을 찾아내는 것이 훨씬 효율적입니다.
Node.js 성능 분석 툴의 끝판왕, Clinic.js 사용법을 정리해 보겠습니다.
1. Clinic.js란?
NearForm에서 제작한 오픈소스 도구로, Node.js 프로세스를 모니터링하여 성능 저하의 원인을 진단하고 시각화된 리포트를 제공합니다.
2. 설치 방법
전역(Global)으로 설치하여 어디서든 명령어로 실행할 수 있게 합니다.
npm install -g clinic
3. 핵심 도구 3가지 (적재적소에 사용하기)
| 도구명 | 용도 | 언제 사용하나? |
| Doctor | 종합 건강 진단 | 어디가 문제인지 감이 안 올 때 (첫 진단) |
| Flame | CPU 점유율 분석 | 특정 함수가 CPU를 과하게 사용할 때 |
| Bubbleprof | 비동기 흐름 분석 | DB 쿼리, 네트워크 통신 등 I/O 대기가 길 때 |
4. 실전 사용 프로세스 (중요!)
Clinic.js는 단순히 서버를 켜두는 것만으로는 의미가 없습니다. **실제 트래픽이 들어오는 상황(부하)**을 만들어야 정확한 진단이 가능합니다.
단계 1: Clinic.js와 함께 서버 실행
가장 먼저 Doctor를 사용해 전체적인 상태를 봅니다.
clinic doctor -- node index.js
단계 2: 서버에 부하 주기 (Autocannon 권장)
서버가 실행 중인 상태에서 새 터미널을 열고 부하 테스트 도구인 autocannon으로 요청을 보냅니다.
# 10초 동안 100개의 연결로 부하 생성
npx autocannon http://localhost:3000
단계 3: 리포트 생성 및 분석
부하 테스트가 끝나면 서버 터미널에서 Ctrl + C를 눌러 서버를 종료합니다. 그러면 자동으로 브라우저에 HTML 리포트가 나타납니다.
5. 리포트 해석 팁
🔍 Clinic Doctor
- Event Loop: 그래프가 위로 튀면 동기적 코드가 루프를 막고 있다는 뜻입니다.
- Memory: 계단식으로 계속 상승한다면 **메모리 누수(Memory Leak)**를 의심해야 합니다.
🔥 Clinic Flame
- 뜨거운(노란/하얀) 영역: 실행 시간이 긴 함수입니다. 이 부분을 최적화 1순위로 잡으세요.
- 넓은 너비: 해당 함수가 전체 실행 시간에서 차지하는 비중이 큼을 의미합니다.
🫧 Clinic Bubbleprof
- 비동기 작업의 지연 시간을 '버블' 크기로 보여줍니다. 버블이 크고 연결선이 길수록 해당 구간에서 병목이 발생하고 있다는 증거입니다.
6. 요약 및 결론
- 먼저 Doctor로 어디가 아픈지 확인한다.
- CPU 문제라면 Flame, 비동기 대기 문제라면 Bubbleprof로 파고든다.
- 반드시 autocannon 같은 도구로 실제 부하를 준 상태에서 측정한다.
반응형
'IT관련 > Nodejs' 카테고리의 다른 글
| Clinic.js doctor 명령어로 HTML 리포트가 안 만들어질 때 해결 방법 (0) | 2026.03.20 |
|---|---|
| Nodejs에서 sql += "" 방식과 배열(push & join) 방식을 V8 엔진의 메모리 할당 및 GC 관점에서 비교 (0) | 2026.03.20 |
| 🛑 Node.js에서 sql += "" 방식이 GC에 치명적인 이유 (0) | 2026.03.20 |
| nodejs에서 mysql 연결시 timezone 셋팅. (0) | 2025.07.07 |