본문 바로가기

카테고리 없음

애플리케이션 성능 테스트하기

성능 테스트는 애플리케이션의 안정성과 성능을 보장하기 위해 필수적인 과정입니다. 이 글에서는 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 요청을 보냅니다.

스크립트 동작 요약

  1. 목표 설정: http://34.64.220.222를 대상으로 성능 테스트를 수행합니다.
  2. 단계 설정:
    • "Warm up" 단계에서 60초 동안 매 초마다 1명의 가상 사용자를 생성합니다.
  3. 시나리오 설정:
    • "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) 내에 요청이 처리되지 않는 경우, 다음과 같은 최적화 방법을 고려할 수 있습니다.

  1. 더 좋은 CPU로 스케일 업 (Scale Up):
    • 서버의 CPU 성능을 향상시켜 더 많은 요청을 처리할 수 있도록 합니다.
  2. 로드 밸런싱을 통한 스케일 아웃 (Scale Out):
    • Nginx 등의 로드 밸런서를 사용하여 여러 서버에 트래픽을 분산시킵니다.

 

 

 

이 글은 https://class101.net/ko/products/5fc4a3b4fc231b000d85661b 강의를 정리한 내용입니다.