성능 테스트란
- 서버(API)의 성능을 측정하는 것
- 예) 앱에 점진적인 부하를 가하면서 더 이상 처리량이 증가하지 않을 때, 그 수치를 측정하고 해석
성능 테스트는 하는 이유
- 어플리케이션이 최대 몇 명의 유저까지 수용할 수 있는지 측정하기 위해 -> 최초 목표 성능에 부합하는지 파악 가능
- 어플리케이션의 병목 발생 지점 파악하기 위해 -> 서비스 중단되는 가능성을 줄임
- 두 설계 방식 중 어떤 쪽이 더 나은지 비교하기 위해
측정 기준
Throughput(공간)
- 시간 당 처리량
- 세부 항목으로
TPS(Transaction Per Second)
,RPS(Request Per Second)
등이 있음. - 예) 1초 당 처리 단위작업 수 또는 HTTP 요청 수
Latency(시간)
- 클라이언트가 Request 후 Response를 받을 때까지 걸리는 시간 소요량
위의 서비스의 경우, 전체 구간의 TPS와 Latency는 아래와 같다.
- TPS : 200
- Latency : 350
병목 현상
전체 서비스의 Throughput은 200TPS다. Web server에서 500TPS를 처리해도 WAS에서 200TPS로 정체되기 때문. 이런 상황을 'WAS에서 병목 현상이 발생했다'라고 한다. 따라서 Throughput은 서비스의 하위 시스템들 중 가장 낮은 처리량을 가르킨다고 보면 된다.
Critical Path
병목 현상으로 인해 전체 시스템에 가장 악영향을 미치는 구간을 말한다. 시스템 전체 Throughput 향상을 위한 실마리가 되는 부분이다.
사례
사례 1. 개선 전
| - | Web Server | Web Application Server | DB |
| ---------- | ---------- | ---------------------- | ------- |
| Throughput | 500TPS | 3000TPS | 2000TPS |
| Latency | 20ms | 30ms | 50ms |
- Throughput : 500 TPS..
- Latency : 100ms + 대기시간
사례 1. 개선 후
| - | Web Server | Web Application Server | DB |
| ---------- | ---------- | ---------------------- | ------- |
| Throughput | 2000TPS | 3000TPS | 1000TPS |
| Latency | 50ms | 30ms | 50ms |
- Throughput : 1000TPS로 사례 1 대비 서비스 성능이 2배 이상 빨라졌다.
- -> 기존 Webserver에서 DB로 Critical Path가 옮겨졌다
- Latency : 130ms + 대기시간
TPS에 대해
![[Pasted image 20230220142109.png]]
이미지 출처 : https://www.whatap.io/ko/blog/14/
TPS는 Transaction per second의 약자로 초당 처리 가능한 Transaction 수를 의미한다. 서비스에 사용자가 지속적으로 증가하면 TPS가 더 이상 증가하지 않는데, 이 지점을 포화 지점(Saturation Point)라 한다. SP에 가까워질 수록 서비스 정체 시간(Latency)은 당연히 증가한다.
SP를 발견하면 우리는 '이 지점에서 초당 Transaction의 수가 한계에 도달하구나. 그래서 이 지점부터 사용자가 증가할 떄마다 Latency 시간이 증가하구나'라는 것을 알 수 있게 된다. 따라서 포화 지점은 서버의 감당 부하 한계를 정의할 수 있는 중요한 포인트다.
서비스의 튜닝이 잘 안되면 SP를 지나서 TPS가 오히려 떨어진다고 한다.
성능 개선을 위해 고민해볼 것
테스트 환경 구축
- 네트워크 환경 : 테스트할 서버와 같은 네트워크 환경에 존재하는 것이 좋음
- 테스트 데이터 : 실제 서비스 환경의 데이터 양을 비슷하게 맞춰준다
- 다양한 요청 데이터 : 같은 파라미터만 요청하는 대신 실제 유저들이 다양한 파라미터로 요청하는 것을 고려한다
- 구간 모니터링 방안 : 구간별로 성능 데이터를 수집한다.
Latency 요인
- 기본적인 하드웨어 처리 성능
- 어플리케이션 로직
- 쿼리 인덱스
- Throughput 한계점 도달로 인한 Latency 증가 영향
- 기타
성능 측정 툴
- Artillery
- NGrinder
- AB
- JMeter
- Locust
레퍼런스
'Research > Testing' 카테고리의 다른 글
test_nGrinder의 지표를 성능 테스트 지표로 사용해도 될 것인가에 대한 고민 (0) | 2023.02.28 |
---|---|
부하테스트 단계와 발생 문제 유형 (1) | 2023.02.24 |
Test_AB(Apache Benchmark)로 간단히 테스트하기 (0) | 2023.02.23 |
Artillery로 성능 측정하기 (0) | 2023.02.22 |
DB 성능 측정 실험에 대한 논의 (0) | 2023.02.15 |
댓글