서버 성능 테스트란?
해당 포스팅은 성능 테스트가 무엇이고 왜 필요한지에 관한 이야기를 다룹니다.
성능 테스트 툴에 대한 소개나 사용법을 다루지는 않습니다.
서버 성능 테스트란?
성능 테스트란, API 요청이 많은 상황에서 서버가 어떻게 동작하는지 확인하기 위해 수행하는 테스트이다.
서버 성능 테스트, 보통 언제 할까?
- 트래픽 인입이 많은 것으로 예상되는 새로운 서비스를 오픈하는 경우
- 평소보다 트래픽을 훨씬 많이 받아야 하는 경우
성능 이해하기
1초 동안 5명의 요청을 처리할 수 있는 두 서버가 있다고 가정하자.
🤔 과연 두 서버 중 어떤 서버가 '성능이 좋은 서버'라고 할 수 있을까?
➡️ 답은 '알 수 없다'이다. 서버 성능을 나타내는 지표는 다양하며, 정답은 없기 때문이다.
Latency vs Throughput
Latency(지연시간)
사용자의 입장에서 완료까지 얼마나 걸리는가
(클라이언트가 요청을 보낸 후 응답을 받기까지 걸린 시간, 주로 ms 단위)
Throughput(처리량)
작업자의 입장에서 시간당 얼마나 처리하는가
(단위 시간 동안 몇 건의 요청을 처리할 수 있는가, 주로 tps 단위)
이 둘은 고속도로에 비유할 수 있다.
latency가 낮다는 것은, 제한 속도가 높아서 차들이 빠르게 지나갈 수 있는 것이고,
throughput이 높다는 것은, 도로가 넓어서 한 번에 통과할 수 있는 차량의 수가 많다는 것이다.
🤷♀️ 그렇다면 고속도로에 많은 차량이 지나가게 하고 싶다면 제한 속도를 높일 것인가? 도로를 넓힐 것인가?
목표 설정
보통 서버 성능 테스트를 할 때에는 latency와 throughput을 결합하여 목표를 세운다.
예상되는 사용자가 몇 명이고 이 사용자들이 초당 발생시키는 요청이 몇 건일 때,
사용자가 불편함을 느끼지 않도록 처리하려면 어느 정도의 지연 시간 미만으로 처리되어야 할 지를 정하는 식이다.
이 때, 사용자가 수용할 수 있는 지연 시간은 서비스나 기능에 따라 다를 수 있다.
예를들어, 쇼핑몰 사이트에서 상품 목록을 불러오는 경우에 1000ms가 넘는 지연 시간이 걸린다면, 사용자는 서비스를 이탈할 것이다.
반면, 항공권 비교 검색 사이트에서 최저가 항공권을 검색하는 경우네는 수초에서 수십초가 걸려도 사용자는 수용할 수 있다.
따라서, 우리가 목표로 해야하는 지연 시간은 사용자가 기대하는 지연 시간에 맞춰져야 한다.
성능을 개선하기 위해서는?
성능 테스트 후에 성능을 개선하기 위해서는 어떻게 해야 할까?
1. 서버 대수를 늘린다.
2. 코드를 효율화한다.
1. 서버 대수를 늘린다.
가장 쉬운 방법으로, 서버 대수를 늘리는 방법이 있다.
이 방법은, 사용자가 많아졌을 때 이 사용자들이 발생시키는 트래픽을 감당하기 위해서 얼마나 많은 서버가 있어야 할 지에 대한 고민이 필요하다. 무턱대고 서버를 필요 이상으로 많이 투입하는건 불필요하게 비용을 증가시키는 일이니 서버를 무한히 증설할 수는 없다.
개발자는 성능 테스트를 반복하면서 예상되는 사용자의 숫자와 그에 따른 요청 수를 계산해서 얼마나 많은 수의 서버가 필요한지 테스트 해 볼 수 있다.
2. 코드를 효율화한다.
서버 대수를 늘리는건 당연히 좋지만, 실질적으로 운영하다보면 비용과 연관되는 부분이다.
서버의 성능을 개선할 수 있는 다른 방법이 '코드를 효울화하는 것'이다.
비효율적으로 동작하는 애플리케이션 로직 개선 -> 알고리즘 개선, GC 등
데이터베이스 같은 저장소에 대한 성능 개선 -> 인덱스, 데드락 등
시스템 설계 개선 -> 캐싱, 비동기적인 구조, Circuit Breaker 등
Take-Home Message
1. 서버 성능 테스트를 통해 API 요청이 많은 상황에서 서버가 어떻게 동작하는지 확인할 수 있다.
2. 성능 측정 시 "몇 명의 사용자가 어느 정도의 밀도로 API 요청할 때 서버의 응답 속도 분포는 ~ "의 형태가 현실적이다.
3. 서버의 성능은 상황에 따라 scale-out 하거나 코드를 효율화하는 방법 등이 있다.
🔗 참고
[풀버전] 박정국 CTO가 알려주는 '서버 성능 측정 방법'
서버 성능테스트, 클릭 한 번으로 끝내볼 수 있을까? #우아콘2021