본문 바로가기
MSA

아틸러리를 활용한 스트레스 테스트

by notcherry 2024. 2. 28.

 

msa 프로젝트를 하며 배웠던 개념인데 복습을 하고자 아틸러리 공식 문서에서 제공해주는 예제를 참고해 다시 정리해보도록 하겠다.

따라서 재밌는 시도 한 번 해보시길~

(내 컴퓨터 내에서 일어나는 요청에 대한 테스트이므로 완벽히 신뢰할 수 있는 결과를 얻을 수는 없다. 이것을 감안하고 진행해야 한다 ㅜ.)

 

아틸러리를 사용하는 이유??

논리적 문제가 없는데 하드웨어 제약으로 서비스가 중단된다면 좀 당황스러울 것 같다. 서버마다 cpu가 다르기 때문에 수용할 수 있는 인원의 수에 차이가 발생할 수 있고 미리 스트레스 테스트를 해서 예측할 수 있는 툴이 아틸러리이다. 이렇게 미리 부하 테스트를 하면 서버가 얼마큼의 트래픽을 수용할 수 있는지, 더 수용하려면 어떻게 로드밸런싱을 하면 좋을 지, 사양을 업그레이드할지 혹은 코드를 더 효율적으로 개선할 지 등 고민해볼 수 있다. 

 

일반적으로는 요청과 응답의 과정에서 데이터 베이스에 접근할 때 가장 많은 시간이 소요된다. 보통 여러개의 서버에 하나의 데이터 베이스를 사용하는데 이런 경우에는 데이터에 대한 접근 자체를 줄이는 것이 좋을 것 같다고 생각한다. 

 

 

 

 

환경설정 및 세팅

 

먼저 노드 js 환경이 필요하다. 노드는 아틸러리의 해석기라고 생각하면 됨! (반드시 관리자 모드로 열 것!)

그리고 아틸러리 공식 도큐먼트에 들어가 아틸러리 세팅을 위한 설치 구문을 복붙해온다.

Get Artillery – Artillery Docs

 

Welcome – Artillery Docs

Learn how to get up and running with Artillery with reference docs, guides, tutorials and other resources

www.artillery.io

 

아틸러리 설치

 

이제 확장자가 yaml으로 끝나는 파일을 설정해 아틸러리에서 제공하는 예제를 복붙해준다. 예제는 get started -> learn core concpets에 있다. 예제를 가져왔지만 나는 작성해둔 백엔드 코드로 타겟과 url을 수정하여 진행했다!

 

얌 파일은 띄어쓰기 주의

 

위의 코드를 설명하자면 아래와 같다.

더보기

phases: 테스트 강도 설정

duration: 요청시간(초)

arrivalRate: 동시 접속자 수

name: 단계에 붙일 이름(필수는 아님)

senarios: 시나리오 설정

flow: 순차적으로 요청 넣을 것들

get: get 요청을 넣겠다 !

url: 서버 주소를 제외한 상세 url

따라서 우리가 만든 설정은 60초라는 요청시간동안 매초 1명씩 총60회(60*1)의 요청이 들어갈 것이고, 다음 단계에서는 300초간 10명씩 총 3000회(300*10)의 요청이 들어가는 설정이다! 실제 서비스에서는 적은 양에 속하는 요청이다.

 

 

실행

 

더보기

artillery run --output report.json cpu-test.yaml
//cpu-test.yaml 자리에 설정한 파일 이름을 넣어주시면 됩니다.

위의 명령어를 실행하면 내가 설정한 시나리오에 맞춰 부하테스트가 실행되고 report.json이라는 파일을 만들어준다.

실행할 때마다 report.json이라는 같은 이름으로 덮어쓰기가 되므로 내가 보존해둬야 하는 파일이라면 따로 꼭 저장해둘 것

 

 

실행결과

 

결과를 보면 http.request_rate가 10/sec 이므로 요청 처리가 0.01초가 걸렸으며 http.request가 3060이므로 총 3060번 들어간 것을 확인할 수 있다. (시나리오의 설정에 맞는 요청 수가 들어간 것을 확인)

http.response가 3069으로 유실된 요청 수도 없다.

 

여기서 아래에 median, p95, p99 값이 중요한데 medain과 p95,99의 차이가 작을수록 성능이 좋다는 뜻이다.

median은 응답 중간값을 뜻하고 p95는 100명 중 95번째 요청이 처리 받은 속도이다. 따라서 수치의 차이가 작을수록 대부분의 요청이 비슷한 속도로 처리되었다는 의미이므로 차이가 작을수록 좋은 것!

 

더보기

artillery.cmd report .\report.json

위의 명령어는 리포트를 생성해주는 명령어이다. 

 

 

리포트 해석하는 방법

  • http.codes.200: 상태 코드가 200(OK)인 HTTP 응답 수
  • http.request_rate: 초당 HTTP 요청 수
  • http.requests: 총 HTTP 요청 수
  • http.response_time: 최소, 최대, 중앙값95번째 백분위수 및 99번째 백분위수 응답 시간을 포함한 HTTP 요청의 응답 시간에 대한 통계
  • http.responses: 수신된 총 HTTP 응답 수
  • vusers.completed: 테스트를 완료한 총 가상 사용자 수
  • vusers.created: 테스트 중에 생성된 총 가상 사용자 수
  • vusers.created_by_name: test.yaml 파일에 정의된 각 시나리오에 대해 생성된 가상 사용자 수
  • vusers.failed: 테스트 중 실패한 총 가상 사용자 수
  • vusers.session_length: 최소, 최대, 중앙값, 95번째 백분위수 및 99번째 백분위수 세션 길이를 포함하여 가상 사용자의 세션 길이에 대한 통계

 

 

 

다음에는 웹 그래프로 테스트 결과를 살펴보도록 하겠다!

'MSA' 카테고리의 다른 글

아틸러리 그래프 부연설명  (0) 2024.03.01
동시성 처리의 중요성과 방법  (1) 2024.01.26
CQRS 패턴 적용기 - 배민 우아콘 정리  (1) 2023.12.09
MSA로 전향한 11번가의 사례  (1) 2023.12.06