실제 사용자가 대용량으로 접속했을 때, 서버가 잘 버티는지 테스트하기 위해
현재 내 프로젝트는 EC2 micro 서버에서 작동 중이기에 테스트 하기에 적합하지 않고 로컬에서만 실험해 보려한다.
- 수천 명의 사용자가 동시에 요청을 보낼때
- 서버의 응답속도, 실패율, 에러발생 여부, 병목 지점을 추측할 수 있다.
장고에 적용시키기
pip install locust
# locustfile.py
from locust import HttpUser, between, task
class UserBehavior(HttpUser):
host = "http://127.0.0.1:8000"
wait_time = between(1, 3) # 요청 간 간격 (초)
def on_start(self):
response = self.client.post(
"/api/user/login/",
json={"email": "test@example.com", "password": "!!test1234"},
)
data = response.json()
self.access_token = data.get("access_token")
self.headers = {"Authorization": f"Bearer {self.access_token}"}
@task
def get_profile(self):
self.client.get("/api/user/profile/", headers=self.headers)
@task
def update_profile(self):
self.client.patch(
"/api/user/profile/",
headers=self.headers,
json={"nickname": "updated_nick"},
)
@task
def logout(self):
self.client.post("/api/user/logout/", headers=self.headers)
locust -f locustfile.py
유형 | 설명 | 예시 |
---|---|---|
트래픽이 몰리는 대표 API | 사용자 요청이 집중되는 핵심 기능 | 로그인, 메인 페이지, 피드 조회 등 |
자원 소모가 큰 API | 처리 시간/메모리/CPU 부하가 큰 작업 | AI 응답 생성, 파일 업로드/변환 등 |
DB에 쓰기 많은 API | 동시에 많은 사용자가 데이터를 생성/수정 | 댓글 작성, 게시글 등록 등 |
외부 연동이 포함된 API | 외부 API 호출로 지연이나 실패 가능 | 결제, AI API 호출, 이메일 전송 등 |
비동기 처리 확인용 API | 비동기 작업 완료 시간이나 큐 처리 확인 | Celery 작업, AI 응답 대기 등 |
항목 | Django 테스트 코드 (TestCase ) | Locust 테스트 |
---|---|---|
목적 | 기능 정확성 테스트 (유닛/통합) | 성능, 부하 테스트 |
언제 실행? | CI/CD, PR 머지 시 자동 실행 | 서버 성능 검증 시 수동/자동 실행 |
중점 | 기능이 정상적으로 동작하는가? | 얼마나 많은 요청을 견디는가? |
요청 수 | 적음 (1~수십 건) | 많음 (수백~수천 건 이상) |
실패 시 의미 | 코드 로직 오류 | 시스템 병목, 성능 한계 노출 |
도구/프레임워크 | unittest , pytest , APIClient | locust , gevent |