본문 바로가기
프로그래밍/Django

🐜 Locust: 부하 테스트의 끝판왕!

by 우주를놀라게하자 2025. 2. 27.
반응형
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