반응형
SMALL
🏃♂️ Locust란?
Locust는 Python 기반의 오픈소스 부하 테스트(Load Testing) 프레임워크입니다.
쉽고 가볍지만 강력하며, 수천~수만 개의 동시 요청을 시뮬레이션할 수 있어요!
"부하 테스트"란? 🤔
실제처럼 많은 사용자가 몰려왔을 때, 서버가 잘 버티는지 테스트하는 것!
다른 부하 테스트 도구도 있지만, Locust는 다음과 같은 강력한 장점이 있어요.
🏆 왜 Locust인가? (장점!)
- Python 코드로 사용자 시뮬레이션 가능 (스크립트 기반이라 유연함)
- 웹 UI 제공 → 실시간 테스트 진행 상황 확인 가능
- 분산 실행 지원 → 여러 대의 머신에서 동시에 테스트 가능
- 초당 수천 개 이상의 요청을 쉽게 처리 가능
🔥 Locust 기본 예제 코드
아래는 Locust를 활용해 간단한 부하 테스트를 실행하는 코드 예제입니다.
from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(1, 5) # 각 요청 사이의 대기 시간 (1~5초 랜덤)
@task
def test_index(self):
self.client.get("/") # 루트 경로 호출
@task
def test_api(self):
self.client.get("/api/data") # 특정 API 엔드포인트 호출
📌 설명
- HttpUser → Locust에서 HTTP 요청을 보내는 가상의 사용자
- task 데코레이터 → Locust가 실행할 작업을 정의
- client.get(url) → 해당 URL에 GET 요청 전송
- wait_time = between(1, 5) → 요청 간격을 1~5초 랜덤으로 설정
⚡ Locust 실행 방법
1. Locust 설치
pip install locust
2. 테스트 실행 (단일 머신)
locust -f my_locust_test.py
실행하면 웹 UI(http://localhost:8089)에서 부하 테스트를 실행할 수 있습니다.
3. CLI 모드 실행 (웹 UI 없이)
locust -f my_locust_test.py --headless -u 100 -r 10 --run-time 1m
- u 100 → 100명의 가상 사용자
- r 10 → 초당 10명씩 추가
- -run-time 1m → 1분 동안 실행
이제 Locust를 활용해서 서버 성능을 분석하고, 어떻게 데이터를 보는지 실제 예시로 진행할 차례입니다!🚀🔥
요청 통계 (Request Statistics)
Requests: 총 요청 수 → 8474
Fails: 1 (RemoteDisconnected('Remote end closed connection without response')
Avaerage(ms): 평균 응답시간 → 34169ms(34초)
Min(ms): 최소 응답시간 → 61ms
Max(ms): 최대 응답시간 → 46883(46초)
Average size(bytes): 평균 응답 크기 → 11928
RPS: 요청 속도: 35
응답 시간 통계(Response Time Statistics)
중위 응답시간 50%lie → 전체 요청의 50%가 39000(39초) 소요
- 전체 요청의 50%가 39초 이내에 처리, 즉, 50%는 39초보다 빠르게 처리함
- 나머지 50%는 39초보다 더 긴 시간을 대기
중위 응답시간 90%lie → 전체 요청의 50%가 44000(44초) 소요
- 전체 요청의 90%가 44초 이내에 처리, 즉, 90%는 44초보다 빠르게 처리함
- 반면, 나머지 10%는 44초 이상 대기
중위 응답시간 100%lie → 전체 요청의 50%가 47000(47초) 소요
- 전체 요청중 가장 느린 요청 1건이 47초에 완료
- 최악의 상황에 대한 지표 → 모든 사용자가 47초 이상 걸리지 않음
- 즉, 가장 오랜 시간 기다린 한명의 사용자도 47초를 넘어서 기다리지 않았음
실패 통계 (Failures Statistics)
- RemoteDisconnected는 서버측에서 연결을 닫았거나 트래픽 처리불가하여, 응답을 못했음
- 리소스 부족, 연결 제한, 네트워크 이슈
반응형
LIST
'프로그래밍 > Django' 카테고리의 다른 글
🚀 Django REST Framework (DRF) - Serializer가 Response를 만들기까지 Serializer Core에 대하여 (1) | 2025.02.27 |
---|---|
ElastiCache(Redis) Redis Insight EC2를 활용하여 접근하기 (0) | 2025.02.26 |
하나? 여러 개? 대량? 😵 DRF Serializer 활용법 총정리! (0) | 2025.02.24 |
Django ORM 최적화: GenericForeignKey를 활용한 데이터 모델링 (0) | 2025.02.19 |
View가 깔끔해지는 Django 필터링 전략! get_queryset() vs filter_queryset() (0) | 2025.02.18 |