성능 테스트는 애플리케이션의 안정성과 성능을 보장하기 위해 필수적인 과정입니다. 이 글에서는 Artillery를 사용하여 성능 테스트를 수행하고, 결과를 분석하는 방법을 설명합니다.
Artillery란?
Artillery는 HTTP, WebSocket 및 Socket.io 기반 애플리케이션을 테스트하기 위한 모던한 성능 테스트 도구입니다. 사용하기 쉽고, 강력한 기능을 제공하여 애플리케이션의 성능을 빠르게 테스트할 수 있습니다.
Artillery 설치
먼저, Artillery를 설치합니다.
npm install -g artillery@latest
테스트 스크립트 작성
Artillery는 YAML 파일 형식으로 테스트 스크립트를 작성합니다. 아래는 예시 스크립트입니다:
config:
target: http://34.64.220.222
phases:
- duration: 60
arrivalRate: 1
- name: Warm up
scenarios:
- name: "just get hash"
flow:
- get:
url: "/hash/123"
config 섹션
- target: 성능 테스트를 수행할 대상 URL을 지정합니다. 이 경우, http://34.64.220.222가 대상 서버의 주소입니다.
- phases: 테스트의 다양한 단계들을 정의합니다. 각 단계는 특정 기간 동안 특정 속도로 트래픽을 발생시킵니다.
- duration: 이 단계의 지속 시간(초)입니다. 여기서는 60초 동안 테스트를 수행합니다.
- arrivalRate: 이 단계에서 매 초마다 생성할 가상 사용자의 수를 정의합니다. 여기서는 매 초 1명의 가상 사용자를 생성합니다.
- name: 단계의 이름을 지정합니다. 여기서는 "Warm up" 단계입니다.
scenarios 섹션
- name: 시나리오의 이름입니다. 여기서는 "just get hash"라고 명명되었습니다.
- flow: 시나리오의 흐름을 정의합니다. 사용자가 수행할 일련의 요청들을 나열합니다.
- get: HTTP GET 요청을 정의합니다.
- url: GET 요청을 보낼 URL 경로입니다. 여기서는 /hash/123 경로에 GET 요청을 보냅니다.
- get: HTTP GET 요청을 정의합니다.
스크립트 동작 요약
- 목표 설정: http://34.64.220.222를 대상으로 성능 테스트를 수행합니다.
- 단계 설정:
- "Warm up" 단계에서 60초 동안 매 초마다 1명의 가상 사용자를 생성합니다.
- 시나리오 설정:
- "just get hash" 시나리오에서는 가상 사용자가 /hash/123 경로에 GET 요청을 보냅니다.
이 스크립트는 단순하게 60초 동안 매 초 1명의 가상 사용자가 /hash/123에 GET 요청을 보내는 성능 테스트를 설정합니다. 이를 통해 서버의 응답 시간을 측정하고, 성능을 평가할 수 있습니다.
테스트 실행
작성한 스크립트를 실행하여 테스트를 수행합니다.
artillery.cmd run --output report.json .\cpu-test.yaml
테스트가 완료되면 report.json 파일이 생성됩니다. 이 파일에는 테스트 결과가 포함됩니다.
보고서 생성
생성된 JSON 파일을 HTML 파일로 변환하여 결과를 시각적으로 확인할 수 있습니다.
artillery.cmd report .\report.json
이 명령을 실행하면 report.html 파일이 생성됩니다.
성능 분석 및 최적화
테스트 결과를 분석하여 목표로 하는 지연시간(latency) 내에 요청이 처리되지 않는 경우, 다음과 같은 최적화 방법을 고려할 수 있습니다.
- 더 좋은 CPU로 스케일 업 (Scale Up):
- 서버의 CPU 성능을 향상시켜 더 많은 요청을 처리할 수 있도록 합니다.
- 로드 밸런싱을 통한 스케일 아웃 (Scale Out):
- Nginx 등의 로드 밸런서를 사용하여 여러 서버에 트래픽을 분산시킵니다.
이 글은 https://class101.net/ko/products/5fc4a3b4fc231b000d85661b 강의를 정리한 내용입니다.