성능 지표 - f-lab-edu/at_ticket GitHub Wiki

성능 지표

성능 테스트란, 서비스의 성능적인 부분을 측정해, 점진적인 부하를 가하는 과정 속에서 더 이상 처리량이 증가하지 않을 때, 그 수치를 해석하는 것을 의미합니다.

성능 테스트의 목적은 테스트의 과정 속에서 그 결과가 목표한 성능에 부합하는 지를 알아내고, 부합하지 않는다면 어떻게 개선할 것인지 분석하여 개선하여 최종적으로 서비스가 중단되지 않도록 가용성을 높히는 것입니다.

그렇다면 성능 테스트시에 무얼 보고 성능을 가늠 할 수 있을까요?
주요 성능 지표인 Throughput(처리량)Latency(지연시간)에 대해 알아보겠습니다.

Throughput과 Latency이란


Throughput시간당 처리량을 의미합니다. TPS(Transaction per seconds), RPS(Request per seconds)와 같은 세부항목이 있습니다.
1초당 어느 정도의 작업을 처리할 수 있는지를 나타내기 때문에 높은 수치 일 수록 성능이 좋다는 의미입니다.

Latency지연시간을 의미하고, 시스템이 클라이언트로부터 Request를 받아서 Response를 보내주기 까지 걸리는 시간을 의미합니다.
작업을 얼마나 빠르게 처리할 수 있는지를 나타내는 지표기이기 때문에, 낮은 수치 일 수록 성능이 좋다라고 말할 수 있습니다.

Throughput과 Latency 계산하기


보통 웹 서비스는 단일 시스템이 아닌 여러 시스템으로 구성되어 있습니다.
예를 들어 Web 서버 - WAS - DB로 구성되어 있는 시스템이 있다고 가정해보겠습니다.

img
▲ [그림] 웹 서비스 그림

서비스의 구간별 Throughput과 Latency가 다음과 같다고 할 때, 총 서비스의 Throughput과 Latency는 얼마일까요?
Throughput은 500TPS, Latency는 350ms입니다.

Latency는 Request를 받아서 Response를 보내주기 까지 걸리는 시간임으로 모든 구간에서 걸리는 시간을 더해주어야 하고,
Throughput가장 낮은 구간이 전체 시스템의 Throughput이 됩니다.

넓은 도로가 있어도 도로가 좁아지는 구간에서는 차가 막히는 것과 동일한 이유입니다. 이러한 좁은 구간을 병목구간이라고 합니다.

img
▲ [그림] WAS 개선

WAS의 성능을 올려서 WAS의 Throughput과 Latency가 개선되었습니다.
Latency는 330ms로 개선 된데 반해 Throughput은 여전히 500TPS 입니다. 이러한 병목현상이 발생해 전체 시스템에 영향을 미치는 구간을 Critical Path라고 합니다.

img
▲ [그림] Web 서버 개선

Web 서버를 개선 하면, Critical Path구간은 DB로 옮겨 갈 것입니다.
이와 같이 기존 구간의 성능 개선을 하게되면 Critical Path는 이동하게됨으로, Critical Path를 지속적으로 해결하면서, 전체 서비스의 성능을 향상시켜줄 필요가 있습니다.

시스템 전체의 Throughput를 개선하기 위해서는 Critical Path구간을 개선해야 합니다. Latency 의 경우 병목구간과 상관없이 하위 시스템의 Latency 개선이 전부 영향을 주었음을 알 수 있습니다.

TPS(Transaction Per Second)


TPS는 Transaction Per Second의 약자로 초당 트랜잭션의 개수를 의미합니다. img ▲ [그림] TPS 그래프
서비스를 이용하는 사용자가 늘어나면 TPS는 지속적으로 늘어나게 됩니다. 하지만 어느 순간부터 TPS가 증하기 않는 상황이 발생되기 시작함니다. 이렇게 더 이상 증가하지 않는 지점을 Saturation Point (포화지점)라고 합니다.
위 그림은 이상적인 케이스로 제대로 튜닝되지 않은 서비스는 Saturation Point를 지나면 오히려 TPS가 떨어지기도 합니다.

Saturation Point는 초당 처리할 수있는 트랜잭션이 한계에 도달했다는 의미임으로, Saturation Point을 넘어가면 초당 처리할 수 있는 TPS는 더 이상 올라가지 못하고 서비스의 정체시간은 증가하기 시작할 것입니다.
Saturation Point는 서버가 감당할 수 있는 부하의 한계를 정의할 수 있는 지표라고 할 수 있겠습니다.

참고


https://hyuntaeknote.tistory.com/10
https://ch4njun.tistory.com/266
https://www.whatap.io/ko/blog/14/