Application Server를 개발하고 운영배포를 앞두고 있는 상황에서 해당 Application이 어느 정도의 트랙픽을 감당할 수 있는지 측정이 필요하다.
이러한 지표를 확인하기 위해서 성능테스트를 이용할 수 있다.
성능 테스트 (Performance Test)
- 목적: 시스템의 응답 시간, 처리 속도, 리소스 사용량(CPU, 메모리, 네트워크 등)을 측정하여 성능을 평가하는 테스트
성능 테스트에는 다양한 종류가 존재한다.
부하 테스트, 스트레스 테스트, 스파이크 테스트..
각각의 종류는 뒤에서 차근차근 알아가 보자.
많은 개발자들이 목표하는 Application은 "많은 사람이 사용해도 API 응답이 빠르고 안정적"인 것이다.
하지만, 이러한 목표는 정략적으로 측정되지 않는 모호한 기준이다.
이러한 기준을 명확하게 할 수 있는 개념을 알아보자.
처리량 (Throughput)
시스템이 일정 시간 동안 처리할 수 있는 작업(트랜잭션 또는 요청)의 개수를 의미
단위: TPS (Transactions Per Second), RPS (Requests Per Second) 등으로 표현
예를 들어, "초당 1,000개의 요청을 처리할 수 있다"는 것은 처리량이 1,000 RPS라는 의미
높을수록 좋은 지표이며, 시스템의 동시 처리 능력을 평가하는 데 사용된다.
지연시간 (Latency)
클라이언트가 요청을 보내고 응답을 받을 때까지 걸리는 시간
단위: 밀리초(ms) 또는 초(s)
네트워크 지연, 서버의 처리 속도, 데이터베이스 응답 속도 등이 영향을 미칩니다.
낮을수록 좋은 지표이며, 사용자 경험(UX)에 큰 영향을 미칩니다.
성능테스트를 진행하며 user수가 늘어나면 처리량이 늘어나게 되고
어느 시점이 되면 user수가 늘어나더라도 처리량이 늘지 않고 유지되거나 떨어지는 경우가 발생한다.
이러한 시점이 어딘지 찾는 것이 성능테스트이다.
출처:https://ch4njun.tistory.com/266
이제 성능테스트를 하는 이유와 측정기준을 알았으니, 성능테스트의 종류를 알아보도록 하자.
부하 테스트(Load Test)
- 목적: 예상되는 정상적인 부하(트래픽, 요청 수)에서 시스템이 안정적으로 동작하는지 확인
- 특징
- 시스템이 정상적으로 감당할 수 있는 최대 부하를 테스트
- 일반적인 동시 접속자 수, 요청 처리량(Throughput) 등을 기준으로 평가
- 예) 하루 평균 10만 명이 접속하는 웹사이트에서 동시 1000명 접속 시 정상 동작하는지 확인
스트레스 테스트 (Stress Test)
- 목적: 시스템이 한계를 초과하는 부하에서 어떻게 동작하는지 확인하고, 장애 발생 시 복구 능력(Recovery)을 평가
- 특징
- 시스템이 감당할 수 있는 부하보다 더 높은 부하를 주어 언제, 어떻게 장애가 발생하는지 확인 장애 발생 후 시스템이 자동으로 복구되는지(회복력, Resilience) 평가
- 예) 1000명이 정상적으로 접속할 수 있는 서비스에 5000명이 몰릴 경우 서버가 어떻게 반응하는지 확인
차이점 정리
구분 |
부하 테스트 (Load Test) |
스트레스 테스트 (Stress Test) |
목적 |
예상 부하에서 정상 동작 확인 |
최대 부하를 초과할 때 시스템의 한계 확인 |
테스트 강도 |
정상적인 범위 내 부하 |
비정상적인 초과 부하 |
목표 |
성능 저하 없이 일정한 처리 가능 여부 |
장애 발생 여부 및 복구 능력 확인 |
결과 |
시스템이 감당할 수 있는 최대 트래픽 파악 |
장애 발생 시 시스템 반응과 복구 과정 분석 |
예시 |
하루 10만 명 방문하는 웹사이트에서 동시 1000명 접속 테스트 |
동시 5000명 접속 시 서버가 다운되는지 확인 |
보통은 위의 두 테스트를 많이 진행하고 추가적으로는 아래의 테스트들도 존재한다.
- 스파이크 테스트(Spike Test)
- 짧은 시간 동안 갑자기 많은 트래픽이 몰릴 때 시스템이 어떻게 반응하는지 테스트 (예: 이벤트 페이지 오픈 시 트래픽 폭증)
- 지속 부하 테스트(Soak Test)
- 장시간 높은 부하를 유지할 때 시스템의 안정성을 테스트 (예: 24시간 동안 높은 트래픽 유지)
출처:https://youtu.be/3cTn53dtzJI?si=pCxUYYufq7jEtoBb