API 성능 테스트와 부하 테스트 (locust 활용)
Django DRF로 개발한 API가 실제 서비스 환경에서 얼마나 많은 사용자를 감당할 수 있는지 확인하고, 성능 병목 지점을 파악하는 테스트 방법
성능 테스트의 필요성
응답 시간 지연: 사용자가 몰리면 서버 응답 속도 급격히 저하
서버 다운: 감당 가능한 트래픽 초과 시 서비스 전체 중단
비용 증가: 비효율적인 코드로 인한 서버 리소스 과다 사용
Locust 선택 이유
Python으로 테스트 코드 작성 가능
개발자 친화적인 코드 기반 시나리오 관리
낮은 진입 장벽과 간단한 설치
분산 모드 지원으로 대규모 가상 사용자 생성
실시간 웹 UI 모니터링
Locust 기본 설정
설치
pip install locust기본 테스트 스크립트
from locust import HttpUser, task, between
class ApiUser(HttpUser):
wait_time = between(1, 3)
@task
def get_posts(self):
self.client.get("/api/v1/posts/")
def on_start(self):
print("Starting test...")실행
locust -f locustfile.py --host=http://127.0.0.1:8000실무 시나리오 구현
인증 처리
def on_start(self):
creds = random.choice(TEST_USERS)
res = self.client.post("/api/v1/users/login/", json=creds)
if res.status_code == 200:
self.access_token = res.json().get("access")
self.client.headers["Authorization"] = f"Bearer {self.access_token}"다중 작업과 가중치
@task(8) # 읽기 작업 8:2 비율
def get_posts_and_comments(self):
res = self.client.get("/api/v1/posts/")
# 추가 로직
@task(2) # 쓰기 작업
def create_post(self):
self.client.post("/api/v1/posts/", json={...})결과 분석 지표
실패율 (Failures): 0%가 아니면 서버 부하 초과 상태
응답 시간 (90%ile): 90% 사용자가 경험하는 응답 시간
RPS (Requests Per Second): 초당 처리 가능한 요청 수
주요 주의사항
운영 환경에서 절대 부하 테스트 금지
스테이징 환경에서만 테스트 수행
점진적 부하 증가로 한계점 파악
API Throttling 설정 확인
서버 모니터링 도구와 함께 사용
Last updated
