k6 - JavaScript 코드를 기반으로 테스트를 실행
코드 리뷰 용이, 변경사항 쉽게 추적 가능
테스트 유지보수 편리
JMeter - XML 기반 GUI를 통해 테스트 진행
SSE 알림 전송 기능에서 스레드풀, 비동기처리의 유무가 점진적으로 증가하는 트래픽에서 어떻게 동작하는지 확인하고 성능을 분석하기 위함
가상 사용자를 1000명까지 점점 증가시키고 각 단계에서 일정시간 부하를 유지하며 시스템의 성능을 측정한다.
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '1m', target: 100 }, // 1분 동안 100명까지 증가
{ duration: '3m', target: 100 }, // 3분 동안 유지
{ duration: '1m', target: 500 }, // 1분 동안 500명까지 증가
{ duration: '3m', target: 500 }, // 3분 동안 유지
{ duration: '1m', target: 1000 }, // 1분 동안 1000명까지 증가
{ duration: '3m', target: 1000 }, // 3분 동안 유지
],
};
export default function () {
let url = 'http://localhost:8080/api/notification/send';
let payload = JSON.stringify({
userId: Math.floor(Math.random() * 5) + 1, // 1~5번 사용자에게 랜덤 전송
message: `테스트 알림 - ${Math.random().toString(36).substring(7)}`
});
let params = {
headers: {
'Content-Type': 'application/json',
},
timeout: '30s', // 요청이 30초 이상 걸리면 자동 타임아웃
};
let res = http.post(url, payload, params);
// 응답 코드 체크
let isSuccess = check(res, {
'is status 200': (r) => r.status === 200,
'is status 500': (r) => r.status === 500,
'is status 429': (r) => r.status === 429,
});
// 추가 로그 출력
if (res.status === 500) {
console.error('서버 오류 발생:', res.body);
} else if (res.status === 429) {
console.warn('요청 제한 (Rate Limit) 초과:', res.body);
}
sleep(1);
}
K6_WEB_DASHBOARD=true k6 run 파일이름.js
이 명령어를 이용하면 대시보드 확인 가능하다.
💡 대시보드 용어 정리
Request Rate
- 1초당 처리하는 요청 수 (throughput 처리량)
Request Duration
- 요청에 대한 응답시간(latency)
Reqeust Failed
- 요청 실패 수
p(95)
- 전체 요청 중 상위 5%를 제외한 나머지 95%의 요청이 처리된 시간을 나타냄. 시스템의 성능 안정성을 평가하는 중요한 지표
지표 | 순차 처리 | 비동기 스레드 처리 | 개선 효과 |
---|---|---|---|
평균 응답 시간 (avg) | 9ms | 1ms | 9배 감소 |
최대 응답 시간 (max) | 529ms | 115ms | 4.6배 감소 |
95퍼센타일 (p95) | 35ms | 3ms | 11.6배 감소 |
99퍼센타일 (p99) | 119ms | 14ms | 8.5배 감소 |
- 평균 응답 시간 (9ms → 1ms) 9배 감소
비동기 처리 방식이 동시 처리를 가능하게 하여, 여러 작업을 동시에 처리할 수 있는 효율성을 제공했다고 볼 수 있다.- 최대 응답 시간 (529ms → 115ms) 4.6배 감소
서버의 대기 시간을 분산시켜 긴 처리 시간을 단축시켰다고 볼 수 있다.- p95 (35ms -> 3ms) 11.6배 감소
스템의 전체적인 성능 안정성이 향상되었음을 나타낸다.
🗂️ 참고