NestJS 성능과 확장

성능 지표를 원인으로 좁히는 프로파일링 루프

프로파일링은 느린 느낌을 숫자로 바꾸는 과정입니다. endpoint, event loop, DB, 외부 호출 중 어느 시간이 늘었는지 분리해 봅니다.

p95 상승은 endpoint, span, 병목 레인, flamegraph, 배포 비교로 좁힌다

평균 응답 시간 대신 어느 경계에서 시간이 새는지 같은 trace ID로 본다.

endpoint p95, p99, error rate가 오른 요청을 같은 입력 조건으로 고정한다.
span controller, provider, DB, external API 시간을 trace ID로 나눈다.
profile flamegraph, heap snapshot, event loop lag로 병목 원인을 좁힌다.
compare baseline과 배포 후 지표를 비교해 개선 근거를 남긴다.
01

성능 병목을 나누는 기준

p95 latency, heap, event loop delay, CPU profile, dependency timing을 관측 지표, 병목 위치, 수정 범위로 나눠 검증합니다.

병목 위치
02

Interceptor, APM, profiler의 책임 위치

성능 분석에서는 APM span, profiler snapshot, endpoint별 metrics, 알림 기준값를 실제 책임 위치에 연결합니다.

관측 지표
03

성능 모니터링과 프로파일링의 실패 조건

평균 응답은 괜찮지만 특정 endpoint나 외부 의존성에서 tail latency가 계속 늘어나면 실패 신호입니다. 병목 위치, 예외 로그, 재시도 가능 여부를 함께 남깁니다.

확장 정책
04

p95와 trace로 남기는 개선 근거

마지막에는 profiling snapshot, trace waterfall, p95/p99 그래프, 개선 전후 비교 같은 증거를 남겨 trace ID, flamegraph, 개선 전후 지표가 같은 병목을 가리키는지 다시 확인합니다.

회귀 추적
책임
응답 시간, event loop delay, heap 사용량의 기준값을 먼저 정한다 성능 모니터링은 느린 endpoint를 감으로 찾지 않도록 latency, CPU, 메모리, 외부 의존성 시간을 같은 요청 ID로 묶어 비교합니다.
baseline
경계
NestJS interceptor와 metrics endpoint가 같은 요청을 가리키는지 확인 Interceptor span, provider 실행 시간, DB query duration, 응답 코드를 한 trace 안에 남겨 병목 위치가 로그에서 분리되게 합니다.
trace span
Metrics 보호
메트릭 노출 누락과 profiler 오버헤드를 따로 검증 /metrics가 보호되지 않거나 profiler가 운영 CPU를 잠식하는 상황을 부하 테스트와 알림 임계값으로 분리합니다.
알림 규칙

성능 모니터링과 프로파일링 검증 지점

정상 부하 기준 대표 endpoint의 p95, DB query 시간, 외부 API latency가 목표값 안에 있고 trace가 한 요청 ID로 이어지는지 확인합니다.
병목 재현 조건 동시 요청 증가, 느린 DB 응답, event loop blocking을 따로 만들어 어떤 지표가 먼저 흔들리는지 비교합니다.
알림과 회귀 지표 p95/p99 상승, heap 증가, error rate 변화, 배포 전후 trace waterfall을 함께 남겨 성능 회귀를 추적합니다.

성능 확장 점검

질문: p95 상승이 controller, provider, DB, 외부 API 중 어디에서 시작되는가
순서: 성능 지표와 병목 위치 정의 -> NestJS 요청 파이프라인에 메트릭 삽입 -> 메트릭 노출과 알림 임계값 검증
위험: 평균 응답 시간만 보면 tail latency, event loop blocking, profiler 오버헤드가 배포 뒤에야 드러납니다.