먹수의 개발일지

[Locust] Django와 Locust로 API 부하 테스트 본문

back-end/Django

[Locust] Django와 Locust로 API 부하 테스트

icandle 2024. 11. 19. 22:07

Intro

서비스를 운영할 때 부하테스트를 통해 성능 이슈를 대비하는 것이 중요하다. 간단한 부하테스트 예제를 살펴보자! 

 

Locust란?

Locust는 Python 기반의 부하 테스트 도구로, 여러 사용자의 API 요청을 시뮬레이션해 서버의 성능을 측정할 수 있다. 특히 Locust는 코드로 테스트 시나리오를 작성할 수 있어 재사용성이 높고 유연한 구성이 가능하다.

 

Locust 설치

먼저 Locust를 설치한다. 

pip install locust

 

locust.py 파일을 작성한다. 

  • HttpUser: Locust에서 사용자 행동을 정의하는 기본 클래스로, HttpUser 클래스를 상속받아 Django API 서버에 HTTP 요청을 보낼 수 있다.
  • wait_time: 각 사용자의 요청 간격을 설정하는 속성이다. 여기서는 between(1, 3)으로 설정해, 각 요청 사이의 대기 시간을 1초에서 3초 사이로 랜덤하게 정했다.
  • api_endpoints: 테스트할 엔드포인트들의 목록을 배열 형태로 정의했다.
  • @task 데코레이터: Locust에서 개별 작업(테스트 시나리오)을 정의할 때 사용한다. get_endpoint 메서드는 정의된 엔드포인트들 중 하나를 랜덤하게 선택해 요청을 보낸다.
  •  request_timeout : 현재 코드에서는 사용하지 않았지만, wait_time과 같이 API 요청 후 응답 최대 대기 시간을 옵션으로 지정할 수 있다. 지정하지 않을 경우 default는 60초다.
from locust import HttpUser, task, between
import random 

class DjangoApiUser(HttpUser):
    wait_time = between(1, 3)  # 사용자 간 요청 시간 간격 설정 
    
    # 테스트할 API 엔드포인트 목록
    api_endpoints = [
        "/api/example1", 
        "/api/example2",  
        "/api/example3",
    ] 
        
    @task
    def get_endpoint(self):
        # 엔드포인트 목록에서 하나를 랜덤으로 선택하여 요청 전송
        endpoint = random.choice(self.api_endpoints)
        self.client.get(endpoint)

 

Locust 테스트 실행

작성한 코드를 이용해 Locust를 실행한다. 

locust -f <파일이름>.py

 

브라우저에서 http://localhost:8089로 접속하면 Locust 웹 인터페이스가 열린다. 이 인터페이스를 통해 동시 사용자 수와 테스트 속도를 조절하면서 부하 테스트를 수행할 수 있다.

 

'back-end > Django' 카테고리의 다른 글

[Django] Redis 캐싱으로 성능 최적화  (0) 2024.11.20
Django Signals  (0) 2024.11.10
[DRF] Responsed Unauthorized 401 in AllowAny permission  (1) 2023.02.21
Comments