본문 바로가기
Research/Testing

성능 테스트란 무엇일까

by RIEM 2023. 2. 23.

성능 테스트란

  • 서버(API)의 성능을 측정하는 것
  • 예) 앱에 점진적인 부하를 가하면서 더 이상 처리량이 증가하지 않을 때, 그 수치를 측정하고 해석

성능 테스트는 하는 이유

  • 어플리케이션이 최대 몇 명의 유저까지 수용할 수 있는지 측정하기 위해 -> 최초 목표 성능에 부합하는지 파악 가능
  • 어플리케이션의 병목 발생 지점 파악하기 위해 -> 서비스 중단되는 가능성을 줄임
  • 두 설계 방식 중 어떤 쪽이 더 나은지 비교하기 위해

측정 기준

Throughput(공간)

  • 시간 당 처리량
  • 세부 항목으로 TPS(Transaction Per Second), RPS(Request Per Second) 등이 있음.
  • 예) 1초 당 처리 단위작업 수 또는 HTTP 요청 수

Latency(시간)

  • 클라이언트가 Request 후 Response를 받을 때까지 걸리는 시간 소요량

Screen Shot 2023-02-17 at 5 56 32 PM

위의 서비스의 경우, 전체 구간의 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가 오히려 떨어진다고 한다.

성능 개선을 위해 고민해볼 것

테스트 환경 구축

  1. 네트워크 환경 : 테스트할 서버와 같은 네트워크 환경에 존재하는 것이 좋음
  2. 테스트 데이터 : 실제 서비스 환경의 데이터 양을 비슷하게 맞춰준다
  3. 다양한 요청 데이터 : 같은 파라미터만 요청하는 대신 실제 유저들이 다양한 파라미터로 요청하는 것을 고려한다
  4. 구간 모니터링 방안 : 구간별로 성능 데이터를 수집한다.

Latency 요인

  • 기본적인 하드웨어 처리 성능
  • 어플리케이션 로직
  • 쿼리 인덱스
  • Throughput 한계점 도달로 인한 Latency 증가 영향
  • 기타

성능 측정 툴

  • Artillery
  • NGrinder
  • AB
  • JMeter
  • Locust

레퍼런스

댓글