참고
이번 프로젝트에서 부하 테스트는 k6으로 하기로 결정했다. 마침 강의도 할인하기도 하고, 예전에 JS를 공부해 본 적 있어서 익히기 쉬울 것 같아 결정했다.
강의 처음에는 EC2 두 대 중 한 대에는 nodejs, 다른 한 대에는 k6를 띄워 부하 테스트를 진행한다. 이처럼 시스템과 테스트 툴을 분리하는 이유는 부하 테스트 툴 자체도 컴퓨팅 리소스를 사용하기 때문에, throughput 및 latency에 영향을 주기 때문이다.

아래 command를 통해 k6를 설치한다
sudo gpg -k && /
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69 && /
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list && /
sudo apt-get update && /
sudo apt-get install k6
아래처럼 script.js 를 작성한다. options를 통해 어떻게 부하 테스트를 할 건지 작성한다. 아래의 경우, 10분에 걸쳐 6000명이 11.22.33.44의 /boards 경로로 접근하는 것을 의미한다.
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
// 부하를 생성하는 단계(stages)를 설정
stages: [
// 10분에 걸쳐 가상 유저 수가 6000명이 접근
{ duration: '10m', target: 6000 } /
],
};
export default function () {
// public ip의 /boards 경로로 접근
http.get('http://11.22.33.44/boards');
sleep(1);
}
그리고 아래 command를 통해 부하 테스트를 시작한다. K6_WEB_DASHBOARD 옵션을 통해 5665 포트로 결과를 확인할 수 있다. (EC2 위에 올리는 것이므로, 5665 에 대한 보안 그룹을 설정해주도록 하자)
K6_WEB_DASHBOARD=true k6 run script.js
실행했을 때의 결과이다. 아래에 dashboard 접근 endpoint가 나오고, 아래에 진행 상황이 나오고 있는데, 이는 현재 6000명 중 881명의 VU가 접근 중인 걸 의미한다.

DashBoard에 들어가면 다양한 통계 자료가 보이는데, 우리는 이 중 Throughput과 Latency, fail에 집중하도록 하자.

1. HTTP Request Rate (http_reqs)
- Throughput을 의미한다. 예를 들어 HTTP Request Rate가 3.03k/s일 경우 이 서버는 1초당 약 3천 개의 HTTP Request를 처리할 수 있다는 것이다.
- 아래 그림에서는 나오지 않지만, http_reqs가 위처럼 vus와 같은 기울기로 나아가는 것이 아닌, http_reqs가 더 이상 증가하지 않을 때가 있는데, 이는 서버에 대한 최대 throughput을 의미한다. 이처럼 최대 throughput에 다다를 경우, 서버가 처리해야 할 요청이 밀림으로써 Latency도 늘어나는 걸 볼 수 있다.


2. HTTP Request Duration (Request Duration p)
- Latency를 의미한다.

예를 들어, 아래 상황에서 request를 보냈을 때 응답하기까지 걸리는 시간이 417ms 를 의미한다.

3. HTTP Request Failed
- 보낸 Request가 실패했을 때의 수치이다.


'k6' 카테고리의 다른 글
| 3. 병목 지점 해결 후 성능 개선하기 (0) | 2025.07.03 |
|---|---|
| 2. 병목 지점 진단 (2) | 2025.07.03 |