NestJS ch9-4 / profiling tools

프로파일링 도구는 병목의 종류에 따라 골라야 합니다

느린 요청을 무작정 기록하면 노이즈가 많습니다. CPU, 이벤트 루프, 메모리, 분산 호출 중 무엇을 좁힐지 먼저 정합니다.

CPU

계산이 바쁜가?

  • Chrome DevTools Performance로 call stack을 봅니다.
  • clinic flame으로 CPU를 많이 쓰는 함수를 찾습니다.
  • 동기 루프, 직렬화, 암호화 비용을 의심합니다.
Loop

이벤트 루프가 막히는가?

  • clinic doctor로 event loop delay를 봅니다.
  • 동기 파일 I/O와 큰 JSON 처리 구간을 확인합니다.
  • 부하 테스트 시간대와 함께 캡처합니다.
Memory

메모리가 계속 늘어나는가?

  • heap snapshot을 시간차로 비교합니다.
  • 요청 종료 후 남는 객체와 무한 캐시를 찾습니다.
  • GC 빈도와 pause time을 지표와 맞춥니다.
Trace

외부 호출이 느린가?

  • APM trace로 route, DB, 외부 API 시간을 나눕니다.
  • timeout과 retry가 응답 시간을 늘리는지 봅니다.
  • 분산 시스템은 span 단위로 병목을 분리합니다.
실전 순서모니터링에서 시간대와 route를 고른 뒤, 같은 조건의 부하를 재현하고 필요한 프로파일만 짧게 캡처합니다.