성능 테스트란?

  • 성능 테스트(Performance Testing)는 애플리케이션이 특정 조건에서 얼마나 잘 작동하는지를 평가하기 위한 테스트 방식입니다. 이는 주로 애플리케이션의 속도, 안정성, 확장성, 그리고 자원을 얼마나 효율적으로 사용하는지에 초점을 맞춥니다. 성능 테스트는 다양한 형태로 나뉩니다
  1. 부하 테스트(Load Testing): 시스템이 예상되는 최대 사용자 수에서 어떻게 작동하는지 확인합니다.
  2. 스트레스 테스트(Stress Testing): 시스템이 용량 한계를 초과할 때 어떻게 작동하는지 확인합니다.
  3. 스파이크 테스트(Spike Testing): 갑작스러운 트래픽 급증에 시스템이 어떻게 반응하는지 평가합니다.
  4. 내구성 테스트(Soak Testing): 장시간 동안 일정 부하를 주고 안정성을 점검합니다.

Artillery란?

Artillery는 성능 테스트와 부하 테스트를 수행하기 위한 강력하고 사용하기 쉬운 오픈 소스 툴입니다. Node.js 기반으로 만들어졌으며, 다음과 같은 특징이 있습니다

  • JSON/YAML 파일로 간단하게 시나리오 정의 가능
  • HTTP, WebSocket, Socket.io 등 다양한 프로토콜 지원
  • 클라우드 환경 및 CI/CD 파이프라인에 쉽게 통합 가능

Artillery 설치

Artillery를 사용하려면 Node.js가 설치되어 있어야 합니다.

npm install -g artillery

설치 후, 다음 명령어로 설치가 완료되었는지 확인하세요

artillery --version

 


Artillery 기본 사용법

Artillery는 설정 파일을 기반으로 시나리오를 정의합니다. 기본 설정 파일은 다음과 같은 구조를 가집니다:

config:
  target: "<http://your-api-endpoint.com>"
  phases:
    - duration: 60   # 테스트 실행 시간(초)
      arrivalRate: 10 # 초당 사용자 수
scenarios:
  - flow:
      - get:
          url: "/api/resource"

주요 요소 설명

  1. config: 테스트 환경 설정
    • target: 테스트 대상 URL
    • phases: 테스트 단계 설정 (시간, 사용자 수 등)
  2. scenarios: 사용자가 수행할 시나리오 정의
    • flow: 사용자가 따를 작업의 순서

간단한 HTTP 테스트 시나리오

설정 파일 생성

test.yml 파일을 생성합니다:

config:
  target: "<https://jsonplaceholder.typicode.com>"
  phases:
    - duration: 10
      arrivalRate: 5
scenarios:
  - flow:
      - get:
          url: "/posts"

테스트 실행

다음 명령어로 테스트를 실행합니다:

artillery run test.yml

결과 확인

결과는 실행 후 콘솔에 출력됩니다. 결과 요약에는 다음과 같은 정보가 포함됩니다:

  • 요청 성공/실패 수
  • 응답 시간 통계 (평균, 95th 퍼센타일 등)
  • 초당 처리량(*RPS)

 

용어 정리

RPS (Requests Per Second)

  • 초당 서버로 보내지는 요청(Request)의 수를 의미합니다.
  • HTTP 요청 단위로 측정되며, GET, POST, PUT 등 모든 요청이 포함됩니다.
  • Artillery는 HTTP 요청 단위를 기준으로 결과를 계산하므로, 결과로 나온 초당 처리량은 RPS입니다.

TPS (Transactions Per Second)

  • 초당 처리되는 트랜잭션(Transaction)의 수를 의미합니다.
  • 트랜잭션은 하나의 사용자 작업 단위로, 여러 요청(Request)을 포함할 수 있습니다.
  • 예를 들어, "사용자가 로그인하고 데이터를 조회하는 과정"을 하나의 트랜잭션으로 본다면, 이는 여러 RPS로 구성될 수 있습니다.

 

Artillery 공식 문서: https://www.artillery.io/docs/

+ Recent posts