개요
신규 API 개발 또는 로직 변경 시 서비스의 안정성과 성능을 사전에 검증하기 위한 표준 테스트 프로세스 정의 목적 코드 수준의 비효율 제거와 인프라 병목 식별을 분리해 진행하며, 동일 스택으로 로컬과 서버 환경을 일관되게 관찰하는 것을 권장
테스트 전략 개요
성능 테스트는 환경과 목적에 따라 두 단계로 구분
- Phase 1 Local
- 목표 코드 레벨 최적화와 비효율 제거
- 관점 CPU 스파이크, 메모리 누수, 이벤트 루프 지연, 불필요한 I O 대기
- 도구 k6 로컬, Clinic.js
- Phase 2 Dev 서버
- 목표 시스템 레벨 검증과 병목 지점 확인
- 관점 DB Redis MQ 한계, 연결 풀 고갈, 큐 적체, 에러율
- 도구 k6 원격, Prometheus Grafana
도구 구성
- 부하 생성 k6
- JS 기반 스크립팅으로 학습 비용 낮음
- CI CD 파이프라인 연동 용이
- 로컬과 서버 환경 모두에서 실행 가능
- 모니터링 Grafana Prometheus
- 인프라 통합 관제에 적합 Redis DB MQ WAS 지표를 일관된 대시보드로 관찰
- 테스트 중 실시간 병목 구간 가시화
- 프로파일링 Clinic.js
- Node.js 내부 지표 심층 분석에 특화
- CPU 스파이크, 메모리 누수, 이벤트 루프 지연 원인 파악에 유용
- 로컬 디버깅 우선 권장
단계별 진행
Step 1 로컬 프로파일링 Local Profiling
질문 내 코드에 논리적 비효율이 없는가 배포 전 로컬에서 가벼운 부하를 주고 코드 결함을 조기에 식별
1 준비 로컬에서 서버 실행 준비 2 실행 Clinic.js로 서버를 감싸고 트래픽 주입
clinic doctor --on-port 'k6 run scripts/test-local.js' -- node dist/main.js3 분석 생성된 HTML 리포트 확인
- Event Loop Delay 경고 구간 존재 여부, 비동기 처리 정체 지점 확인
- Memory 힙 메모리 미해제 패턴과 상승 추세 확인, 누수 의심 시 재현 절차 고정
- I O 불필요한 대기와 동기 호출 여부 확인
Step 2 서버 부하 테스트 Server Load Test
질문 실제 인프라가 목표 트래픽을 견디는가 Redis DB 등 포함 개발 Dev 환경 배포 후 인프라 상호작용을 검증 대규모 부하는 로컬 대신 별도 인스턴스에서 k6 실행 권장
1 시나리오 작성 k6 스크립트
- Smoke Test VU 1 10 수준으로 기능 정상 동작 확인
- Load Test 목표 트래픽 예 1000 RPS 까지 점진 증가
- Stress Test 한계점 도달까지 부하 증가, 브레이킹 포인트 파악
2 모니터링 Grafana 대시보드 테스트 중 다음 지표를 한 화면에서 동시 관찰
- WAS 예 NestJS CPU 사용률, 메모리 사용량
- Redis 초당 명령 수 Ops sec, CPU 사용률
- DB RDBMS 활성 커넥션, 슬로우 쿼리
- Job Queue 대기열 적체 여부 Waiting Count
테스트 체크리스트
배포 전 아래 항목 자가 점검 권장
- 코드 품질 Local
- Clinic.js 리포트에 이벤트 루프 지연 Red Zone 없음
- 불필요한 동기 연산 제거
- 반복문 내부 DB Redis 호출로 N 1 패턴 발생하지 않음
- 시스템 안정성 Server
- 목표 RPS에서 CPU 메모리 임계 내 안정 유지
- Redis DB 커넥션 풀 고갈 없음
- 비동기 처리의 경우 큐 적재 속도보다 처리 속도 우위
- 에러율 Error Rate 1 퍼센트 미만
부하 테스트 시 주의사항
1 로컬 PC 한계
- 수천 RPS 이상은 로컬 네트워크와 장비 성능으로 정확도 저하 가능
- 별도 서버 인스턴스 예 클라우드에서 k6 실행 권장
2 네트워크 비용
- 클라우드에서 외부로 대량 트래픽 송출 시 아웃바운드 비용 발생 가능
- 동일 VPC 내부 또는 사설 IP를 활용해 비용과 지연 최소화 권장
마무리
로컬 프로파일링으로 코드 비효율을 먼저 제거하고 서버 부하 테스트로 인프라 한계를 명확히 측정하는 이중 단계 접근을 기본으로 삼을 것 k6와 Prometheus Grafana, Clinic.js 조합으로 재현과 관측 가능성을 높이고, 체크리스트 기반으로 배포 리스크를 정량화하는 흐름 유지