서비스 출시가 점점 다가오면서 챗봇에 대한 기능은 거의 다 구현했지만,
이 기능을 과연 서버가 버텨줄까 하는 의구심이 들었고,
출시 경험이 있는 대표님께서도 부하테스트의 중요성을 강조하셔서 부하테스트를 하기로했다.
부하 테스트는 결국 API 요청을 많이 보내는 것이고,
그 요청을 얼마나 버텨내는가에 대한 테스트다.
원래 파이썬 requsets 와 Thread를 통해 부하테스트를 하고자했지만,
검색해본 결과 Locust를 많이 쓴다는 말에 Locust를 사용해보았다.
Locust는 파이썬으로 작성된 오픈소스 부하 테스트 도구입니다. Locust를 사용하면 분산 시스템에서 웹 애플리케이션의 부하를 시뮬레이션할 수 있습니다. Locust는 설치가 쉽고, 사용하기 쉽고, 확장성이 뛰어나며, 코드 기반으로 테스트 시나리오를 작성할 수 있습니다.
Locust를 사용하면 웹 애플리케이션의 성능을 측정하고, 병목 현상을 파악하여 이를 해결할 수 있습니다.
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/ 에 웹서버가 생성되고,
위 창이 나타난다,
Spawn rate 는 처음에 잘 이해하지 못했는데,
만약 number of user 가 "20" 이고 Spawn rate 가 "2" 이면
유저 수를 초당 "2"씩 증가시켜서 "20"가지 늘리겠다는 것이다,
추가로 20/20 으로 설정하면 처음부터 유저 20명으로 테스트한다.
위 파라미터를 입력하고 Start를 하면
부하테스트가 시작되고 Locust는 여러가지 대쉬보드를 제공한다.
아직 많이 써보지 못해 Locust가 어렵게 느껴지지만, 익숙해지면 좋은 결과 지표를 뽑을 수 있고,
계속 테스트하면서 병목지점을 찾아 속도를 개선할 수 있을 것 같다.
대표님께서 챗봇 인퍼런스 속도에 중요성에 대해서 강조했었지만 당시엔 이해하지 못했다,
왜냐하면 Latency 가 0.1초 였기 때문이다, 그래서 난 속도를 늘리더라도 정확도를 개선해야한다고 계속 주장했지만, 대표님은 항상 속도가 우선이라고 하셨다,
오늘 테스트를 잠깐이나마 진행했을때, 대표님의 깊은 뜻을 이해할 수 있었다,
동시 유저가 50명만 돼도 0.1초였던 Latency는 1.8초로 늘어나기 때문이다.
속도를 먼저 개선하고 속도의 증가를 최소화로 하는 정확도 개선방법을 위해 계속해서 연구해야겠다.
감사합니다 잘 쓸게요