로커스트(Locust)란?
로커스트(Locust)는 웹 애플리케이션, API, 웹소켓 등의 부하 테스트(Load Testing) 및 성능 테스트(Performance Testing)를 위해 많이 사용되는 오픈소스 툴이다. Python으로 작성되어 있으며, 테스트 시나리오도 Python 코드로 작성할 수 있어서 유연성과 확장성이 뛰어나다. 오픈소스이기 때문에 깃허브에서 코드를 확인할 수 있다.
GitHub - locustio/locust: Write scalable load tests in plain Python 🚗💨
Write scalable load tests in plain Python 🚗💨. Contribute to locustio/locust development by creating an account on GitHub.
github.com
📌 Locust의 주요 특징
- Python 기반 : 테스트 시나리오를 Python 코드로 작성. 테스트 작성이 매우 직관적임
- 웹 기반 UI : 테스트 실행 및 모니터링을 위한 웹 UI를 제공. 실시간으로 결과 모니터링 가능
- 분산 로드 생성 가능 : 여러 머신에 로더(Worker)를 설치해서 대규모 분산 테스트 가능
- 비동기 처리 : 많은 요청을 동시에 처리할 수 있어 고성능 테스트 가능
- 확장성과 유연성 : HTTP 외에도 WebSocket, gRPC, GraphQL 등 다양한 프로토콜에 맞게 커스터마이징 가능
Locust 설치 방법
파이썬 실행환경에서 아래의 커맨드를 작성
pip3 install locust
설치 이후에 설치 및 버전 확인
locust -V
Locust 기본 구조
Locust는 사용자 시뮬레이션을 위해 User 클래스를 상속받은 클래스를 정의하고, 그 안에 테스트할 task(업무 시나리오)들을 정의한다.
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 3) # 요청 사이의 대기시간 (1~3초)
@task
def load_main_page(self):
self.client.get("/") # 루트 페이지 호출
@task(3)
def load_profile(self):
self.client.get("/profile") # /profile 호출 (가중치 3배)
test.py 파일을 생성해서 위에 코드를 작성했다.
locust -f test.py
그리고 해당 코드로 locust를 실행하자.
이제 브라우저에서 http://localhost:8089 접속
다음 정보를 입력하고 테스트 시작:
- Number of users to simulate (사용자의 수)
- Spawn rate (초당 몇 명씩 투입할지)
- Host (테스트 대상이 되는 서버 주소)
간단하게 작성하고 테스트 시작해서 웹UI에서 바로 그래프까지 확인이 가능하다. 😎
Locust를 사용하는 이유
- Python 코드 기반으로 유연하게 테스트 작성 가능
- 실제 사용자처럼 행동하도록 시뮬레이션 가능
- 웹 UI로 실시간 모니터링 가능
- 분산 테스트를 통한 고부하 시뮬레이션 가능
Locust의 아쉬운 점
- Python을 모른다면 생기는 초기 진입장벽
- 웹 UI의 부족한 기능
다른 성능 툴들과 비교
- 개발자 친화적인 코드 기반 테스트 원한다면 → Locust, k6
- GUI와 다양한 프로토콜 지원이 중요하다면 → JMeter
- 고성능 트래픽 테스트가 필요하다면 → wrk
- 간단한 테스트를 빠르게 하려면 → Siege, Artillery
관련 사이트
Locust.io
An open source load testing tool. Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
locust.io
'프로그래밍' 카테고리의 다른 글
일단 호출하고 보자! 덕 타이핑(Duck Typing)이란? (0) | 2025.04.04 |
---|---|
NginX와 SSL 인증서로 보안 연결 설정하기 (0) | 2025.03.30 |
JsonUtility 유니티에서 가볍고 빠르게 JSON 직렬화 하기 (0) | 2025.03.24 |
JSON-RPC란 무엇인가? (0) | 2025.03.19 |
표현식(Expression)과 구문(Statement)을 비교해보자 (0) | 2025.03.18 |
댓글