Infra/Performance

Artillery (부하테스트 툴)

baek-dev 2025. 3. 26. 18:46

Artillery란?

 

Artillery는 웹 애플리케이션이나 API의 성능을 측정하고, 부하 테스트(Load Test)를 수행하는 오픈소스 성능 테스트 도구임.

 

주로 웹 서비스의 부하 상황을 가정하여 동시에 많은 사용자가 접근했을 때 서비스가 얼마나 빠르고 안정적으로 작동하는지 측정하기 위해 사용됨.

공식 홈페이지: https://www.artillery.io/

GitHub 레포지토리: https://github.com/artilleryio/artillery

 


Artillery의 주요 기능과 장점

 

Artillery의 주요 특징 및 장점은 다음과 같음.

간단한 설정: YAML 파일로 시나리오를 설정하고 간편하게 테스트 가능함.

성능 측정 및 모니터링: 응답시간(Response time), 초당 요청 수(RPS), 에러율(Error rate) 등을 쉽게 측정 가능함.

HTTP, WebSocket 등 다양한 프로토콜 지원: REST API, GraphQL, 웹소켓(WebSocket) 등 다양한 프로토콜에 대한 부하 테스트 가능함.

확장성과 클라우드 연동성: AWS Lambda, ECS, Kubernetes 등 클라우드 서비스와 쉽게 통합하여 대규모 부하 테스트 가능함.

실시간 성능 지표를 쉽게 확인할 수 있도록 보고서(Report)를 생성해 줌.

 


Artillery 설치 방법

 

Artillery는 Node.js 기반의 CLI(Command Line Interface) 도구이므로, 먼저 Node.js가 설치되어 있어야 함.

 

🔹 설치 명령어

npm install -g artillery

설치 확인 명령어:

artillery --version

 

 


Artillery로 부하 테스트 시나리오 작성 방법

 

Artillery 테스트는 YAML 파일 형태로 시나리오를 정의하여 진행함.

 

🔹 간단한 YAML 시나리오 예시

 

파일명: load-test.yml

config:
  target: "https://example.com"
  phases:
    - duration: 60
      arrivalRate: 10  # 초당 10명의 사용자가 60초 동안 요청함

scenarios:
  - flow:
      - get:
          url: "/api/users"

이 YAML 파일을 기반으로 부하 테스트를 실행하면,

매 초당 10개의 HTTP 요청을 60초 동안 총 600번 전송하여 서비스의 성능을 측정함.

 

주요 YAML 설정 옵션 정리

옵션명 설명
target 부하 테스트를 수행할 대상 서버 URL
phases 부하 테스트의 기간(duration)과 초당 요청 수(arrivalRate)를 설정
scenarios 실제 테스트할 요청들을 정의함
flow 요청의 흐름을 정의, GET, POST 등 HTTP 요청을 설정함

 

 


Artillery 부하 테스트 실행 방법

 

작성한 YAML 파일을 가지고 실제 부하 테스트를 수행하는 명령어는 다음과 같음.

artillery run load-test.yml

 

결과를 JSON 형식의 보고서로 저장하고 싶다면 아래처럼 실행 가능:

artillery run --output report.json load-test.yml

 

테스트 결과 보고서를 HTML 형태로 보기 좋게 출력하려면 아래 명령을 사용함:

artillery report --output report.html report.json

 

이 HTML 보고서는 웹 브라우저로 열어서 직관적으로 확인할 수 있음.

 


부하 테스트 결과 보고서에서 확인할 수 있는 지표들

 

Artillery 보고서에서는 아래와 같은 핵심적인 성능 지표를 확인할 수 있음.

Scenarios launched: 테스트 동안 실행된 총 시나리오 수

Requests completed: 완료된 HTTP 요청 수

Response time: 평균 응답시간(ms), 최소/최대 응답시간 등

Latency Distribution: 지연시간 분포도 (50%, 95%, 99% 등 퍼센타일 기반)

RPS (Requests Per Second): 초당 처리 요청 수

Status Codes: HTTP 상태코드별 응답 수(200, 404, 500 등)

Errors: 에러 발생 건수 및 유형

 


Artillery를 사용할 때 유의사항 및 팁

항상 실제 운영 환경과 유사한 조건으로 부하 테스트 환경을 설정하는 것이 중요함.

부하 테스트를 수행하기 전에 관련자들과 충분히 협의하여 서비스에 영향을 최소화해야 함.

초당 요청 수(arrivalRate)를 단계적으로 높이면서 서비스의 한계를 측정하는 방식이 좋음.

성능 테스트 이후 개선한 내용이 실제 성능에 어떤 영향을 주는지 꾸준히 비교 분석하는 것이 중요함.

 


Artillery의 대표적인 사용 사례

 

다음은 Artillery가 주로 사용되는 대표적인 사례임.

신규 서비스 오픈 전에 부하 테스트 및 성능 검증

이벤트(특가 판매, 티켓 오픈 등) 이전에 시스템 안정성 확인

성능 개선 작업 후 실제 개선 여부 확인

지속적인 성능 모니터링 및 서비스 수준 관리(SLA 확인)

 


정리하면:

Artillery는 웹 애플리케이션/API의 성능 측정과 부하 테스트를 쉽게 해주는 오픈소스 도구임.

YAML 파일로 간편하게 테스트 시나리오를 정의하고, 명령어 하나로 성능 테스트를 실행함.

HTTP, WebSocket 등 다양한 프로토콜을 지원하며, 성능 지표를 쉽게 분석할 수 있는 보고서를 제공함.

특히 클라우드 기반으로 대규모 부하 테스트를 손쉽게 수행할 수 있어 최근 많은 프로젝트에서 사용됨.

 

 

 

 

출처 : ChatGPT