[TIL] 부하 테스트

최하온·2024년 3월 22일
0

TIL

목록 보기
52/71
post-thumbnail


출처

API가 얼마나 많은 사용자를 받을 수 있을까?

아래 두 가지 지표로 평가를 함.

Latency: 요청자의 입장에서 완료까지 얼마나 걸리는가

  • 하나의 데이터 패킷이 한 지점(출처 등) 에서 다른 지점(도착 등) 으로 전송되어 소요되는 시간
  • 만약 도로에 차를 많이 지나갈 수 있게 할려면 제한속도를 높일 것인가?(=Latency를 줄이는 것)

Throughput: 작업자의 입장에서 시간 당 얼마나 처리하는가

  • 도로의 폭을 넓힐 것인가?(= Throughput을 높이는 것)

Network Bandwitdh(대역폭)`: 네트워크에서 특정 시간 내에 전송 될 수 있는 데이터의 최대 용량

  • Throughput은 네트워크에서 초당 실제로 처리되는 패킷의 양을 나타내는 실용적인 지표
    • 반면 Bandwidth은 네트워크에서 잠재적으로 동시에 전송될 수 있는 데이터의 최대치

스트레스 테스트

  • 과부하 상태에서 어떻게 동작하는지 확인하고 개선하는 것이 목적

부하 테스트

  • 병목 현상을 확인하고 목표치까지 개선하는 것이 목적

부하 테스트 방법

사용툴: Artillery

# 설치
npm install artillery
./node_modules/.bin/artillery
./node_modules/.bin/artillery dino
# -c : 10명이 -n 20번 씩 => 200번
./node_modules/.bin/artillery quick http://localhost:3000/team/players -c 10 -n 20

그 외 옵션

  • -c, --count=<value>
    • 이 옵션은 생성할 가상 사용자(Virtual Users, VUs)의 수를 지정
    • 가상 사용자는 동시에 시스템에 부하를 생성하는 클라이언트나 사용자를 모방
    • 예를 들어, c 10은 동시에 10개의 가상 사용자를 생성하라는 의미
  • -k, --insecure
    • 이 옵션은 TLS/SSL 연결에 대한 검증을 비활성화하고, 자체 서명된 인증서나 유효하지 않은 인증서를 사용하는 서버와의 연결을 허용한다는 의미
    • 보안이 중요하지 않은 테스트 환경에서 유용
  • -n, --num=<value>
    • 각 가상 사용자가 전송할 요청 또는 메시지의 총 수를 지정
    • 예를 들어, n 20은 각 가상 사용자가 20개의 요청을 보내야 함을 의미
  • -o, --output=<value>
    • 이 옵션은 부하 테스트 실행 결과를 JSON 형식으로 저장할 파일의 이름을 지정
    • 예를 들어, o report.json은 테스트 결과를 report.json 파일에 저장하라는 의미
    • 이 파일은 테스트 후 분석을 위해 사용될 수 있음
  • -q, --quiet
    • 이 옵션을 사용하면 Artillery가 실행 중에 덜 자세한 출력을 생성
    • 테스트 실행 시 로그의 양을 줄이고 싶을 때 유용
--------------------------------------
Metrics for period to: 01:58:20(+0900) (width: 1.057s)
--------------------------------------

http.codes.200: ................................................................ 200
http.downloaded_bytes: ......................................................... 141400
http.request_rate: ............................................................. 194/sec
http.requests: ................................................................. 200
http.response_time:
  min: ......................................................................... 5
  max: ......................................................................... 27
  mean: ........................................................................ 7.8
  median: ...................................................................... 7
  p95: ......................................................................... 16.9
  p99: ......................................................................... 22.9
http.responses: ................................................................ 200
vusers.completed: .............................................................. 10
vusers.created: ................................................................ 10
vusers.created_by_name.0: ...................................................... 10
vusers.failed: ................................................................. 0
vusers.session_length:
  min: ......................................................................... 155.8
  max: ......................................................................... 230.8
  mean: ........................................................................ 185.7
  median: ...................................................................... 175.9
  p95: ......................................................................... 223.7
  p99: ......................................................................... 223.7


All VUs finished. Total time: 3 seconds

--------------------------------
Summary report @ 01:58:22(+0900)
--------------------------------

http.codes.200: ................................................................ 200
http.downloaded_bytes: ......................................................... 141400
http.request_rate: ............................................................. 194/sec
http.requests: ................................................................. 200
http.response_time:
  min: ......................................................................... 5
  max: ......................................................................... 27
  mean: ........................................................................ 7.8
  median: ...................................................................... 7
  p95: ......................................................................... 16.9
  p99: ......................................................................... 22.9
http.responses: ................................................................ 200
vusers.completed: .............................................................. 10
vusers.created: ................................................................ 10
vusers.created_by_name.0: ...................................................... 10
vusers.failed: ................................................................. 0
vusers.session_length:
  min: ......................................................................... 155.8
  max: ......................................................................... 230.8
  mean: ........................................................................ 185.7
  median: ...................................................................... 175.9
  p95: ......................................................................... 223.7
  p99: ......................................................................... 223.7
  • http.codes.200 … 숫자 : HTTP 200 OK 응답을 받은 요청이 총 200번, 모든 요청이 성공적으로 처리되었음을 의미
  • http.requests … 숫자 : 테스트 동안 총 200개의 HTTP 요청이 실행되었음
  • http.responses … 숫자 : 테스트 동안 총 200개의 HTTP 응답을 받았음
  • http.request_rate … 200/sec : 초당 요청률이 200회 였음
  • min, max, mean, median, p95, p99는 응답 시간의 통계를 의미 (모두 밀리초 단위).
    • min: 0는 최소 응답 시간이 0ms 였음
    • max: 2는 최대 응답 시간이 2ms 였음
    • mean: 0.6는 평균 응답 시간이 0.6ms 였음
    • median: 1는 중앙값 응답 시간이 1ms 였음
    • p95: 1, p99: 1는 각각 95%, 99%의 요청이 1ms 이하의 응답 시간을 가졌음!

0개의 댓글