- 부하테스트
- 부하 테스트란?
- 시스템이 어느정도의 부하를 버틸 수 있는지 테스트하는 것을 의미함.
- 여기서 시스템이란 전체 인프라를 의미함.
- 부하테스트를 하는 이유
- 서비스를 배포하기 전에, 백엔드 서버가 어느정도 요청을 견딜 수 있는지 부하 테스트를 진행.
- 어느 정도의 트래픽을 감당할 수 있는지 미리 파악함으로써, 부하 상황을 예상하고 대처할 수 있음.
- 즉, 대규모 트래픽 처리를 위한 필수 작업
- 처리량과 시간 지연
- 처리량 (Throughput)
- 서비스가 1초에 처리할 수 있는 트래픽 양
- 단위는 TPS를 사용하며, 1초에 최대 100개의 API를 처리할 수 있따면, 100TPS.
- RPS 라고도 한다.(Request per second)
- 지연 시간
- 부하테스트에서 Latency 는 요청에 대한 응답시간을 의미한다.
- 서비스에 부하 테스트를 했을 때, 평균 응답시간이 2.5초인 경우, Latency 가 2.5 초
- Throughput 과 Latency

- Traffic : 고속도로의 자동차
- network : 고속도로
- Throughput : 단위 시간당 목적지에 도착하는 자동차의 대수 (A → C)
- 만약, A 부터 C 까지 1초에 10대의 자동차가 도착한다면 10tps (rps) 라고도 볼 수 있음.
- Latency : 출발지부터 도착지까지 걸리는 시간
- 만약 1개의 자동차가 A부터 C까지 0.5초가 걸린다면 0.5초가 Latency 라고 볼 수 있음.
- 병목 지점
- 병목 지점
- 전체 시스템에서 특정 서버 자원이 한계에 도달해, 전체 성능이 저하되는 구간.
- 시스템 성능 향상을 위해서는 병목 지점을 개선해야 함.
- 병목 지점의 Throughput 이 곧, 전체의 Troughtput 이다.
- 위 사진에서 A-B 가 1초에 100개의 요청 처리가 가능해도, B-C 가 1초에 50개의 요청을 처리할 수 있다면 1초에 50개가 Throughput 이다.
- 특정 지점의 병목현상을 해결하면 다른 곳에서 새 병목지점이 생긴다.
- A-B-C 에서 B-C 의 Throughput을 200/sec 로 개선했을 때, A-B 가 새로운 병목지점으로 결정된다.
- 부하 테스트의 전체 흐름
- 부하 테스트의 필요성을 인식
- 부하 테스트 목표 설정은 주로 Throughput 과 Latency 를 활용한다.
- 현재 시스템이 어느정도 트래픽까지 버틸 수 있는지 부하 테스트를 진행.
- 부하 테스트 툴을 활용해 부하의 정도를 올리면서 최대 Throughput 을 측정
- 병목지점을 파악하여 성능을 개선
- 병목지점의 Throughput이 곧, 전체 Throughput 이며, 목표 설정 Throughput, Latency 를 달성하기 위해 병목 지점을 개선한다.
- 다시 부하 테스트를 진행하여 목표달성여부를 체크
- 달성을 못한 경우, 다시 병목지점을 파악하여 성능개선을 반복한다.
- 부하 테스트의 주의점
- 적절한 부하 테스트 시간
- 1분 간격으로 기록되는 모니터링 도구를 기반으로 정확한 성능 측정을 위해서는 최소 5분 이상 진행해야 일관된 결과값을 얻을 수 있음.
- 프러덕션 환경과 비슷한 Data 세팅
- DB 는 Data 저장량과 어떻게 저장되어있는지에 따라 성능 차이가 많이 발생.
- 즉, 실제 프러적션 환경과 비슷한 환경 세팅 후에 부하 테스트를 진행해야 정확함.
- 프러덕션 환경과 분리된 환경에서 테스트 진행
- 부하 테스트에 의해 실 서비스에 악영향을 미칠 수 있음.