유틸리티

정밀 시간 측정과 급여 시스템 성능 최적화

급여 시스템에서 월말 급여 계산 배치가 느리다는 불만이 있었다. 어디서 시간이 오래 걸리는지 분석하기 위해 성능 측정을 했다. 스톱워치처럼 단순 측정이 아니라 코드 레벨의 정밀 측정이 필요했다.

Performance API

브라우저에서는 Performance API로 정밀 측정한다. Date.now()보다 정확하다.

const start = performance.now(); // 작업 수행 const end = performance.now(); console.log(end - start + "ms");

korealg.kr/stopwatch에서 밀리초 단위 측정을 해볼 수 있다.

병목 구간 찾기

급여 계산 배치를 단계별로 측정했다. DB 조회, 4대보험 계산, 소득세 계산, 명세서 생성 등 각 단계의 소요 시간을 기록했다.

{ "dbQuery": 3200, "insuranceCalc": 800, "taxCalc": 1500, "pdfGeneration": 8500 }

PDF 생성이 병목이었다.

최적화 전략

병목을 해결하기 위한 전략들이다.

  • DB 쿼리 최적화: 인덱스 추가, N+1 문제 해결
  • 병렬 처리: 직원별 계산을 병렬로 실행
  • 캐싱: 공통 데이터(요율 등) 캐싱
  • 비동기 처리: PDF 생성을 별도 큐로 분리

로드 테스트

1000명, 5000명, 10000명 직원으로 로드 테스트를 한다. 직원 수 증가에 따른 처리 시간 증가가 선형인지 기하급수적인지 확인한다. 스톱워치로 전체 시간을 측정하면서 로그로 상세 분석한다.

프로파일러 활용

Node.js에서는 clinic.js, 브라우저에서는 DevTools Performance 탭을 활용한다. 함수별 CPU 사용량, 메모리 할당을 시각화해서 병목을 찾는다.

모니터링

프로덕션에서는 APM(Application Performance Monitoring) 도구를 사용한다. DataDog, New Relic 등으로 실시간 성능을 모니터링하고 알림을 받는다.

마치며

성능 최적화는 측정부터 시작한다. 기본적인 시간 측정은 온라인 스톱워치로 해볼 수 있다.