Node Artillery 스트레스 테스트 하기

CloudJun·2023년 4월 6일
0

개요

라이브 전, 기능이 모두 정상적으로 돌아간다고 하더라도 실제 유저가 없다면 얼마나 서버가 버틸 수 있는지 또는 병목 현상이 어디서 발생하는지 확인하기란 매우 어렵다. 이러한 미지속 어둠같은 상황에서 그 문제를 깨닫는 상황이라면 제대로된 대응을 하기도 어렵게된다.

이러한 상황을 최대한 방지하고자 스트레스 테스트를 진행하고 서버와 내가 짠 코드가 어디까지 버틸 수 있는지 먼저 알고 있어야한다.

방법

스트레스 테스트를 진행할때는 Jmetar , nGrinder 등 여러 테스트 툴이 있는데, 내가 사용한 툴은 Node 기반의 툴로 스크립트를 이용한 시나리오 테스트를 진행 할 수 있는 artillery를 선택했다.

Artillery.io | Load & Smoke Testing

네이밍을 참 잘 지었는데 Artillery의 의미인 포병이라는 말 그대로 폭격처럼 트래픽을 유발시긴다

설치

node가 설치된 상태에서 전역으로 artillery를 설치해주면 된다.

npm install -g artillery

실행

  1. 간단 테스트
artillery quick --duration 60 --rate 10 -n 20 http://127.0.0.1:3000

duration 60 : 60초 동안 테스트를 한다 rate : 초당 10개의 요청을 보낸다 n : 동시 접속은 20으로 한다.

자세한 옵션 확인하려면 -h를 사용하여 조회 할 수 있다.

  1. 스크립트 테스트

target.json 같은 파일을 하나 만들어준다

{
  "config": {
    "target": "http://localhost:3000", // 서버 주소 지정
    "phases": [
      {"duration": 10, "arrivalRate": 500} // 60초 동안 매초 500번 요청 전송
    ],
    "defaults": {
      "headers": {
        "User-Agent": "Artillery" // 해더 정보
      }
    }
  },
  "scenarios": [
    {
      "name": "customMap", // 테스트명
      "flow": [ // 진행 플로우 , 순차적으로 진행된다
        {"get":
          {
            "url": "/around/v1/list/37.48/126.93", // GET
            "headers": {
              "Authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZHgiOjI0NzQsImlkIjoiYW5vbnltb3VzIiwibHYiOjAsInN0YXR1cyI6MiwiaWF0IjoxNjQ4MTk0MjczLCJleHAiOjE2NDgxOTUxNzMsImp0aSI6IjI0NzR0MTY0ODE5NDI3MzYxNCJ9.XjeYaTTAFBB6y1V-o6jsslGHEE31RBIfCAldi7XQLms"
            } // 해더 추가
          }
        }
      ]
    }
  ]
}

이후 동일 폴더에서 다음 명령어 실행

artillery run -o 결과파일.json target.json

target에 설정한대로 테스트가 진행된다.

이후 html 템플릿이 적용된 화면은 아래 명령어로 리포트로 받아 볼 수 있다

artillery report 결과파일.json

추가

리눅스는 기본 파일 확장이 1024로 설정되어 있어서 수정을 해줘야 성능을 그만큼 사용 할 수 있으니 리미트 제한이 있는지 확인해야한다.

https://cmelcmel.tistory.com/46

profile
짧고 굵게 살아가는 백엔드 개발자

0개의 댓글