[Test] Python 서버 부하테스트 (feat.locust)

jongmin-oh·2023년 7월 14일
0

서비스 출시하기

목록 보기
1/6

배경

서비스 출시가 점점 다가오면서 챗봇에 대한 기능은 거의 다 구현했지만,
이 기능을 과연 서버가 버텨줄까 하는 의구심이 들었고,
출시 경험이 있는 대표님께서도 부하테스트의 중요성을 강조하셔서 부하테스트를 하기로했다.

Locust

부하 테스트는 결국 API 요청을 많이 보내는 것이고,
그 요청을 얼마나 버텨내는가에 대한 테스트다.

원래 파이썬 requsets 와 Thread를 통해 부하테스트를 하고자했지만,
검색해본 결과 Locust를 많이 쓴다는 말에 Locust를 사용해보았다.

What is Locust?

Locust는 파이썬으로 작성된 오픈소스 부하 테스트 도구입니다. Locust를 사용하면 분산 시스템에서 웹 애플리케이션의 부하를 시뮬레이션할 수 있습니다. Locust는 설치가 쉽고, 사용하기 쉽고, 확장성이 뛰어나며, 코드 기반으로 테스트 시나리오를 작성할 수 있습니다.

  • HTTP 요청을 처리하고, 응답 코드 및 시간을 측정합니다.
  • 사용자 시나리오를 정의하고, 이를 이용하여 부하를 생성합니다.
  • 테스트 결과를 그래프 및 테이블로 표시합니다.
  • 테스트 실행 중에 부하를 동적으로 조정할 수 있습니다.
  • 다양한 프로토콜을 지원합니다.

Locust를 사용하면 웹 애플리케이션의 성능을 측정하고, 병목 현상을 파악하여 이를 해결할 수 있습니다.

Code Sample

from locust import HttpUser, task, between

class MyUser(HttpUser):
    wait_time = between(1, 2)
    
    @task
    def post_request(self):
        headers = {'Content-Type': 'application/json'}
        payload = {'key1': 'value1', 'key2': 'value2'}
        self.client.post('/api/my_endpoint', headers=headers, json=payload)

여기서 요청보낼 URL은 따로 적지 않는데 이유는 웹에서 테스트를 진행하기 때문이다.

위 코드를 locust_test.py 에 작성했다고 가정하고

locust -f locust_test.py

터미널에서 위 locust 명령어를 실행하면

http://localhost:8089/ 에 웹서버가 생성되고,

위 창이 나타난다,

Number of users : 동시접속 유저 수

Spawn rate : 동시접속 유저 수의 시작점(점차 증가)

Host : 테스트할 서버 URL

Spawn rate 는 처음에 잘 이해하지 못했는데,
만약 number of user 가 "20" 이고 Spawn rate 가 "2" 이면
유저 수를 초당 "2"씩 증가시켜서 "20"가지 늘리겠다는 것이다,

추가로 20/20 으로 설정하면 처음부터 유저 20명으로 테스트한다.


위 파라미터를 입력하고 Start를 하면
부하테스트가 시작되고 Locust는 여러가지 대쉬보드를 제공한다.

Statistics

Charts


결론:

아직 많이 써보지 못해 Locust가 어렵게 느껴지지만, 익숙해지면 좋은 결과 지표를 뽑을 수 있고,
계속 테스트하면서 병목지점을 찾아 속도를 개선할 수 있을 것 같다.

느낀점:

대표님께서 챗봇 인퍼런스 속도에 중요성에 대해서 강조했었지만 당시엔 이해하지 못했다,
왜냐하면 Latency 가 0.1초 였기 때문이다, 그래서 난 속도를 늘리더라도 정확도를 개선해야한다고 계속 주장했지만, 대표님은 항상 속도가 우선이라고 하셨다,

오늘 테스트를 잠깐이나마 진행했을때, 대표님의 깊은 뜻을 이해할 수 있었다,
동시 유저가 50명만 돼도 0.1초였던 Latency는 1.8초로 늘어나기 때문이다.

속도를 먼저 개선하고 속도의 증가를 최소화로 하는 정확도 개선방법을 위해 계속해서 연구해야겠다.

profile
Technical Problem Solver (기술로 문제를 해결하는 사람)

1개의 댓글

comment-user-thumbnail
2024년 2월 16일

감사합니다 잘 쓸게요

답글 달기