성능 테스트를 위한 오픈 소스 도구로, 쉽게 스크립트를 작성하고 실행할 수 있다.
MacOS k6 설치
brew install k6

script.js 를 작성한다.
import http from 'k6/http';
import { sleep } from 'k6'; export const options = { vus: 100, duration: '30s' };
export default function() {
http.get('http://localhost:8080/concert');
// const url = 'http://localhost:8080/waiting-queue/join';
// const data = {
// userId: "test_user",
// seriesId: "test_series"
// };
// http.post(url, JSON.stringify(data), {
// headers: { 'Content-Type': 'application/json' },
// });
sleep(1);
}
실행
k6 run script.js

서버의 성능과 부하 처리 능력을 평가하는 데 유용하다.
응답 시간, 요청 실패율, 데이터 송수신 속도 등 다양한 메트릭을 통해 서버가 얼마나 효율적으로 작동하는지 분석할 수 있다.
data_received..................: 2.1 MB 70 kB/s
data_sent......................: 966 kB 32 kB/s
http_req_blocked...............: avg=407.71µs min=0s med=1µs max=101.22ms p(90)=5µs p(95)=1.22ms
http_req_connecting............: avg=383.73µs min=0s med=0s max=101.19ms p(90)=0s p(95)=1.19ms
http_req_duration..............: avg=16.5ms min=1ms med=8.53ms max=161.16ms p(90)=39.94ms p(95)=58.37ms
{ expected_response:true }...: avg=16.77ms min=1ms med=8.68ms max=161.16ms p(90)=40.88ms p(95)=59.59ms
http_req_failed................: 2.48% ✓ 261 ✗ 10239
http_req_receiving.............: avg=177.62µs min=0s med=88µs max=15.34ms p(90)=267µs p(95)=483µs
http_req_sending...............: avg=15.56µs min=2µs med=5µs max=9.84ms p(90)=18µs p(95)=27µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=16.31ms min=944µs med=8.27ms max=160.91ms p(90)=39.78ms p(95)=58.08ms
http_reqs......................: 10500 343.242101/s
iteration_duration.............: avg=1.01s min=1s med=1s max=1.16s p(90)=1.04s p(95)=1.06s
iterations.....................: 10500 343.242101/s
vus............................: 350 min=350 max=350
vus_max........................: 350 min=350 max=350
1. data_received 및 data_sent
• data_received: 테스트 동안 클라이언트가 서버로부터 받은 데이터의 총량을 나타냅니다. 여기서는 2.1 MB를 받았고, 평균 속도는 70 kB/s입니다.
• data_sent: 테스트 동안 클라이언트가 서버로 전송한 데이터의 총량을 나타냅니다. 여기서는 966 kB를 전송했고, 평균 속도는 32 kB/s입니다.
2. http_req_blocked
• http_req_blocked: HTTP 요청이 전송되기 전에 블로킹(차단)된 시간입니다.
• avg=407.71µs: 평균 블로킹 시간은 407.71 마이크로초입니다.
• min=0s: 최소 블로킹 시간은 0초입니다.
• med=1µs: 중앙값 블로킹 시간은 1 마이크로초입니다.
• max=101.22ms: 최대 블로킹 시간은 101.22 밀리초입니다.
• p(90)=5µs: 90%의 요청이 5 마이크로초 이하의 블로킹 시간을 가집니다.
• p(95)=1.22ms: 95%의 요청이 1.22 밀리초 이하의 블로킹 시간을 가집니다.
3. http_req_connecting
• http_req_connecting: HTTP 요청이 서버와 연결을 수립하는 데 걸린 시간입니다.
• avg=383.73µs: 평균 연결 시간은 383.73 마이크로초입니다.
• min=0s: 최소 연결 시간은 0초입니다.
• med=0s: 중앙값 연결 시간은 0초입니다.
• max=101.19ms: 최대 연결 시간은 101.19 밀리초입니다.
• p(90)=0s: 90%의 요청이 0초 이하의 연결 시간을 가집니다.
• p(95)=1.19ms: 95%의 요청이 1.19 밀리초 이하의 연결 시간을 가집니다.
4. http_req_duration
• http_req_duration: HTTP 요청의 전체 처리 시간입니다.
• avg=16.5ms: 평균 요청 시간은 16.5 밀리초입니다.
• min=1ms: 최소 요청 시간은 1밀리초입니다.
• med=8.53ms: 중앙값 요청 시간은 8.53 밀리초입니다.
• max=161.16ms: 최대 요청 시간은 161.16 밀리초입니다.
• p(90)=39.94ms: 90%의 요청이 39.94 밀리초 이하의 처리 시간을 가집니다.
• p(95)=58.37ms: 95%의 요청이 58.37 밀리초 이하의 처리 시간을 가집니다.
5. http_req_failed
• http_req_failed: 요청 실패 비율과 실패 횟수입니다.
• 2.48%: 총 요청 중 2.48%가 실패했습니다.
• ✓ 261: 261개의 요청이 성공했습니다.
• ✗ 10239: 10,239개의 요청이 실패했습니다.
6. http_req_receiving
• http_req_receiving: 서버가 응답을 클라이언트에 전송하는 데 걸린 시간입니다.
• avg=177.62µs: 평균 수신 시간은 177.62 마이크로초입니다.
• min=0s: 최소 수신 시간은 0초입니다.
• med=88µs: 중앙값 수신 시간은 88 마이크로초입니다.
• max=15.34ms: 최대 수신 시간은 15.34 밀리초입니다.
• p(90)=267µs: 90%의 요청이 267 마이크로초 이하의 수신 시간을 가집니다.
• p(95)=483µs: 95%의 요청이 483 마이크로초 이하의 수신 시간을 가집니다.
7. http_req_sending
• http_req_sending: 클라이언트가 요청을 서버에 전송하는 데 걸린 시간입니다.
• avg=15.56µs: 평균 전송 시간은 15.56 마이크로초입니다.
• min=2µs: 최소 전송 시간은 2 마이크로초입니다.
• med=5µs: 중앙값 전송 시간은 5 마이크로초입니다.
• max=9.84ms: 최대 전송 시간은 9.84 밀리초입니다.
• p(90)=18µs: 90%의 요청이 18 마이크로초 이하의 전송 시간을 가집니다.
• p(95)=27µs: 95%의 요청이 27 마이크로초 이하의 전송 시간을 가집니다.
8. http_req_tls_handshaking
• http_req_tls_handshaking: TLS 핸드셰이킹에 걸린 시간입니다.
• avg=0s: 평균 핸드셰이킹 시간은 0초입니다.
• min=0s: 최소 핸드셰이킹 시간은 0초입니다.
• med=0s: 중앙값 핸드셰이킹 시간은 0초입니다.
• max=0s: 최대 핸드셰이킹 시간은 0초입니다.
• p(90)=0s: 90%의 요청이 0초 이하의 핸드셰이킹 시간을 가집니다.
• p(95)=0s: 95%의 요청이 0초 이하의 핸드셰이킹 시간을 가집니다.
• 이 값이 0s인 이유는 테스트가 HTTP (비 HTTPS)에서 수행되었기 때문입니다.
9. http_req_waiting
• http_req_waiting: 서버가 응답을 준비하는 데 걸린 시간입니다 (HTTP 요청 후 대기 시간).
• avg=16.31ms: 평균 대기 시간은 16.31 밀리초입니다.
• min=944µs: 최소 대기 시간은 944 마이크로초입니다.
• med=8.27ms: 중앙값 대기 시간은 8.27 밀리초입니다.
• max=160.91ms: 최대 대기 시간은 160.91 밀리초입니다.
• p(90)=39.78ms: 90%의 요청이 39.78 밀리초 이하의 대기 시간을 가집니다.
• p(95)=58.08ms: 95%의 요청이 58.08 밀리초 이하의 대기 시간을 가집니다.
10. http_reqs
• http_reqs: 전체 HTTP 요청 수입니다.
• 10500: 총 10,500개의 요청이 수행되었습니다.
• 343.242101/s: 초당 평균 요청 수입니다.
11. iteration_duration
• iteration_duration: 각 가상 사용자의 작업(iteration) 실행 시간입니다.
• avg=1.01s: 평균 작업 시간은 1.01초입니다.
• min=1s: 최소 작업 시간은 1초입니다.
• med=1s: 중앙값 작업 시간은 1초입니다.
• max=1.16s: 최대 작업 시간은 1.16초입니다.
• p(90)=1.04s: 90%의 작업이 1.04초 이하의 시간을 가집니다.
• p(95)=1.06s: 95%의 작업이 1.06초 이하의 시간을 가집니다.
12. iterations
• iterations: 총 반복(iterations) 수입니다.
• 10500: 총 10,500회의 반복이 수행되었습니다.
• 343.242101/s: 초당 평균 반복 수입니다.
13. vus (Virtual Users)
• vus: 테스트 동안 활성화된 가상 사용자의 수입니다.
• 350: 총 350명의 가상 사용자가 동시에 테스트를 수행하고 있습니다.
• min=350: 최소 가상 사용자 수는 350입니다.
• max=350: 최대 가상 사용자 수는 350입니다.
14. vus_max (Maximum Virtual Users)
• vus_max: 테스트 중 최대 가상 사용자 수입니다.
• 350: 테스트 중 최대 가상 사용자 수는 350입니다.
• min=350: 최소 최대 가상 사용자 수는 350입니다.
• max=350: 최대 최대 가상 사용자 수는 350입니다.
'Develop > Feature' 카테고리의 다른 글
[Redis] Redisson vs Lettuce vs Spring data redis (0) | 2024.07.31 |
---|---|
Redis (0) | 2024.07.23 |
[Docker] Database docker-compose 구축(mysql, redis) (0) | 2024.07.22 |
Filter, Interceptor (0) | 2024.07.16 |
Mac Node.js 설치 (0) | 2024.06.24 |
댓글