[PROJECT] 부하테스트 도구 선택
부하 테스트
부하 테스트는 시스템이나 애플리케이션의 성능을 측정하고 한계를 파악하는 데 필수적이다. 영화 예매 시스템과 같은 경우에는 다음과 같은 지점에서 부하 테스트가 필요하다:
테스트 필요 지점:
- 사용자 인증:
- 사용자 로그인 요청의 동시 처리 능력을 확인하기 위해.
- 영화 검색 및 목록 조회:
- 대량의 읽기 요청에 대한 데이터베이스 응답 시간과 캐시 성능을 측정하기 위해.
- 좌석 선택 및 예매:
- 트랜잭션 처리 능력과 동시성 관리를 검증하기 위해.
- 결제 시스템 통합:
- 결제 서비스와의 통합이 병목 현상을 일으키지 않도록 하기 위해.
jmeter
아파치에서 제공하는 어플리케이션으로, java로 이루어진 오픈소스의 성능테스트 도구
다른 테스트 도구들 보다 좀 더 웹서버 성능테스트에 특화 되어져 있다.
테스트케이스를 스크립트화하는 기능이 따로 있진 않지만, 레코딩 기능을 지원해주고, ui기능을 통해 다양한 부하테스트를 시도하는 것이 가능하다.
복잡하고 디테일한 부하테스트가 가능하고, 다양한 프로토콜을 혼용해서 사용이 가능하다
기능적으로 스크립트 레코딩(script recording)이 가능하다
램프업 패턴(초기 서비스의 사용율이 비주기적으로 등락하는 현상)에 대한 시뮬레이션이 가능하다
UI를 통한 테스트 프로그램의 작성이 가능하기 때문에, 언어의 요구사항이 낮다(하지만 사용성은 다양한 기능을 제공해 주는 만큼 더 어렵다)
Gatling
Gatling은 비동기 처리를 지원하여, FastAPI의 비동기 및 높은 처리량 특성과 잘 매치됨.
Gatling은 Scala를 사용하여 복잡한 사용자 시나리오를 정밀하게 모델링할 수 있음, 다양한 비즈니스 로직을 효과적으로 테스트할 수 있게 해준디.
Gatling은 실시간으로 테스트 결과를 모니터링할 수 있어, 시스템의 성능을 즉시 평가하고 최적화할 수 있다.
RESTful API를 테스트하기에 적합하며, API 요청 및 응답의 성능을 정확하게 측정할 수 있다.
Locust
Locust는 Python 기반의 오픈 소스 부하 테스트 도구다.
- Locust는 Python으로 시나리오를 작성한다. Python에 익숙하다면, Locust를 쉽게 배우고 사용할 수 있다.
- Locust는 사용자 행동을 모델링하여 복잡한 사용자 시나리오를 구현할 수 있다.
- 분산 테스트를 지원하여, 대규모 트래픽과 다양한 사용자 행동을 시뮬레이션할 수 있다.
- 웹 기반 인터페이스를 통해 테스트 중인 부하와 시스템의 응답을 실시간으로 모니터링할 수 있다.
- 부수적인 GUI환경이 없어도 되기에, 테스트하기에 최소한의 리소스가 소요된다
- 로컬환경에서 천 명 상당의 유저의 테스트를 외적인 자원의 필요없이 가능하다
선택 - Locust
FastAPI를 사용하는 경우 기술 스택을 통일할 수 있다는 점에서 Python 기반의 부하 테스트 도구인 Locust가 적절하다고 판단된다.