Loading the catalog…
Loading the catalog…
테스트 코드가 아닌 실제로 서버를 띄우고 테스트를 진행할 때, 한번에 많은 요청을 보내기 어렵습니다. 하지만 k6라는 부하 테스트 툴을 사용할 경우 해결이 가능합니다. 한단계씩 알아보겠습니다. winget install k6 --source winget powe shell을 이용하여 k6 을 다운로드 해줍니다 설치 후 터미널을 새로 열어서 확인 해줍니다 . k6 version 지금부터 k6 코드를 작성 해보겠습니다. k6는 javaScript로 작성 하였습니다 import http from 'k6/http'; import { check } from 'k6'; export const options = { vus: 20, iterations: 1000, }; export default function () { const response = http.post( `http://localhost:8080/api/tickets/${__ENV.TICKET_ID}/issue`, JSON.stringify({ userId: Number(__ENV.TICKET_ID), }), { headers: { 'Content-Type': 'application/json', }, } ); check(response, { '발급 성공: HTTP 200': (r) => r.status === 200, }); } 각 부분에 대해 설명 해드리겠습니다 . JavaScript라 익숙하지 않습니다 .. import http from 'k6/http'; k6의 모듈 기능을 가져옵니다 const response = http.post( `http://localhost:8080/api/tickets/${__ENV.TICKET_ID}/issue`, JSON.stringify({ userId: Number(__ENV.TICKET_ID), }), { headers: { 'Content-Type': 'application/json', }, const response 는 변수 선언입니다 지금 코드에서는 HTTP 응답을 담았습니다 JSON.stringify에는 Body 부분을 작성 해주면 됩니다 지금 코드에서는 userId를 넘기도록 되어있어서 작성 하였습니다 . header또한 똑같습니다. check(response, { '발급 성공: HTTP 200': (r) => r.status === 200, }); 마지막 결과 확인 구문입니다. 200이 맞다면 성공입니다. 실행 해보겠습니다 k6 run -e TICKET_ID=3 -e USER_ID=1 .\load-test.js 컨트롤러로 요청을 보낼때 TICKET_ID와 USER_ID를 보내야하도록 만들어두었습니다 K6에서도 비슷하게 각 변수의 값을 넣고 실행 해주면 됩니다 . 실행 화면 /\ Grafana / ̅ ̅/ /\ / \ |\ __ / / / \/ \ | |/ / / ̅ ̅\ / \ | ( | ( ̅) | / __________ \ |_|\_\ \_____/ execution: local script: .\load-test.js output: - scenarios: (100.00%) 1 scenario, 20 max VUs, 10m30s max duration (incl. graceful stop): * default: 1000 iterations shared among 20 VUs (maxDuration: 10m0s, gracefulStop: 30s) █ TOTAL RESULTS checks_total.......: 1000 527.457513/s checks_succeeded...: 5.00% 50 out of 1000 checks_failed......: 95.00% 950 out of 1000 ✗ 발급 성공: HTTP 200 ↳ 5% — ✓ 50 / ✗ 950 HTTP http_req_duration..............: avg=37.19ms min=14.51ms med=28.88ms max=187.77ms p(90)=39.52ms p(95)=100.95ms { expected_response:true }...: avg=145.88ms min=18.28ms med=171.86ms max=187.77ms p(90)=174.6ms p(95)=177.13ms http_req_failed................: 95.00% 950 out of 1000 http_reqs......................: 1000 527.457513/s EXECUTION iteration_duration.............: avg=37.66ms min=15.03ms med=29.06ms max=196.2ms p(90)=40.04ms p(95)=102.33ms iterations.....................: 1000 527.457513/s vus............................: 20 min=20 max=20 vus_max........................: 20 min=20 max=20 NETWORK data_received..................: 250 kB 132 kB/s data_sent......................: 154 kB 81 kB/s running (00m01.9s), 00/20 VUs, 1000 complete and 0 interrupted iterations default ✓ [======================================] 20 VUs 00m01.9s/10m0s 1000/1000 shared iters 우선 지금 보이는 코드들은 총 티켓을 50장 발급 하고 1000개의 요청을 보내도록 짠 시나리오입니다 . 50개 성공, 950개 실패로 예상한 값이 나왔고 속도도 측정이 가능 합니다 .DB에서도 확인 하였습니다 . mysql> select * from issued_ticket where ticket_id=3; +-----+-----------+---------+ | id | ticket_id | user_id | +-----+-----------+---------+ | 111 | 3 | 3 | | 112 | 3 | 3 | | 113 | 3 | 3 | | 114 | 3 | 3 | | 115 | 3 | 3 | . . . | 160 | 3 | 3 | +-----+-----------+---------+ 50 rows in set (0.00 sec) mysql> select * from ticket where id =3; +-----------------+--------------+----+------+ | quantity_ticket | total_ticket | id | name | +-----------------+--------------+----+------+ | 0 | 50 | 3 | ???4 | +-----------------+--------------+----+------+ 1 row in set (0.02 sec) 잘못 발행된 티켓 없이 동일하게 일치 합니다 다음에는 비동기 큐를 도입하여 보다 원활하게 속도를 조절 해보겠습니다
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
k6를 이용한 부하 테스트와 재고 정합성 인증. 테스트 코드가 아닌 실제로 서버를 띄우고 테스트를 진행할 때, 한번에 많은 요청을 보내기 어렵습니다. 하지만 k6라는 부하 테스트 툴을 사용할 경우 해결이 가능합니다. 한단계씩 알아보겠습니다. winget install k6 --source winget powe shell을 이용하여 k6 을 다운로드 해줍니다 설치 후 터미널을 새로 열어서 확인 해줍니다 . k6 version 지금부터 k6 코드를 작성 해보겠습니다. k6는 javaScript로 작성 하였습니다 import http from 'k6/http'; import { check } from 'k6'; export const options = { vus: 20, iterations: 1000, };…
Open source