[Node] Artillery 부하테스트

김시원·2023년 5월 11일
0

Node

목록 보기
3/5
post-thumbnail

📌 부하테스트란?

임계치의 한계에 도달할 때까지 부하를 꾸준히 증가시키며 진행하는 테스트. 즉, 서버가 얼마만큼의 요청을 견딜 수 있는지 테스트하는 것이다.

  • 내 코드가 실제로 배포되었을 때, 어떤 문법적, 논리적 문제가 있을지는 유닛 테스트와 통합 테스트를 통해 어느 정도 확인할 수 있지만, 내 서버가 몇 명의 동시 접속자나 일일 사용자를 수용할 수 있는지 예측하는 것은 매우 어렵다.
  • 코드에 문법적, 논리적 문제가 없더라도 서버의 하드웨어 제약으로 인해 서비스가 중단될 수 있다.
  • 대표적인 것이 OOM(out of memory) 문제인데, 이는 서버가 접속자들의 정보 저장을 위해 각 사용자마다 일정한 메모리를 할당할 때, 메모리의 양이 계속 증가하다가 결국 서버의 메모리 용량을 넘어서게 되면 발생하는 문제이다.
  • 이런 것들을 부하 테스트를 통해 어느 정도 예측할 수 있다.

📌 Artillery 부하테스트 사용법

1. 모듈 다운로드

  1. npm i -D artillery


artillery dino command 귀엽다.

2. quick으로 부하 테스트 하기

1) npx artillery quick --count 100 -n 50 http://localhost:3000

  • options
    1. --count: 가상의 사용자 수
    2. -n: 요청 횟수
    3. --rate: 초당 요청
  • 해당 command는 100명의 가상 사용자가 50번의 요청을 각각 보내는 것으로, 총 5000번의 요청이 서버로 전달된다.
자료: https://inpa.tistory.com/entry/JEST-%F0%9F%93%9A-%EB%B6%80%ED%95%98-%ED%85%8C%EC%8A%A4%ED%8A%B8-Stress-Test

주의!!!
실제 실제 DB가 연결되있는 서비스에 부하 테스트를 하는 경우 실제 서비스가 중단될 수도 있고, AWS나 GCP의 종량제 요금을 선택하면 요금이 많이 청구될 수 있다.
따라서, staging 서버, 즉 테스트용으로 실제 서버와 같은 사양의 서버를 사용하는 것이 좋다. (실제 DB가 아닌, 테스트 DB를 사용한다)

3. 시나리오 작성으로 부하 테스트 하기

부하테스트를 할 때 우리가 원하는 API에 대해서, 혹은 실제 사용자의 행동을 모방하는 시나리오를 작성하여 부하 테스트를 할 수 있다.

  • json이나 yml 확장자 파일로 만들 수 있다.
{
  config:
    target: http://localhost:3000
    tls:
    rejectUnauthorized: false
    phases:
      - duration: 10
        arrivalRate: 100
  scenarios:
    - name: "전체 worldcup 조회"
      flow:
        - get:
            url: "/api/worldcup"
}
  • config
    - target: 테스트할 서버의 url 주소
    - phases: duration - 테스트 요청 시간, arrivalRate: 비율 => 10초동안 매초 100번의 요청을 보냄 => 총 1000번의 요청
  • scenarios
    - name: 시나리오 이름
    - flow: 시나리오에서 진행하는 테스트 동작을 순서대로 적는다
    • GET, POST, UPDATE, PATCH, DELETE 요청을 보낼 수 있다

4. 부하 테스트 결과 저장하기

1) json 파일에 우리의 테스트 결과를 저장한다.
npx artillery run 부하테스트결과.json

2) html 파일로 테스트 결과를 시각화할 수 있다.
npx artillery run -o [리포트이름] 부하테스트결과.json

0개의 댓글