scenario-b
테스트 시나리오 코드: 이전과 동일
TEST-1
- test type: load
- 목적: baseline 성능 개선 측정
- test detail
load: [
{target: 10, duration: '1m'}, // 워밍업: 10 RPS까지 증가
{target: 20, duration: '1m'},
{target: 30, duration: '1m'},
{target: 0, duration: '30s'}, // 쿨다운
],
test result(console)
/\ Grafana /‾‾/
/\ / \ |\ __ / /
/ \/ \ | |/ / / ‾‾\
/ \ | ( | (‾) |
/ __________ \ |_|\_\ \_____/
execution: local
script: /k6/scenario-b.js
output: InfluxDBv1 (http://k6-influxdb:8086)
scenarios: (100.00%) 1 scenario, 500 max VUs, 4m0s max duration (incl. graceful stop):
* purchase_flow: Up to 30.00 iterations/s for 3m30s over 4 stages (maxVUs: 50-500, gracefulStop: 30s)
█ THRESHOLDS
http_req_duration{phase:scenario,name:cart_add}
✓ 'p(95)<800' p(95)=65.46ms
http_req_duration{phase:scenario,name:order_create}
✓ 'p(95)<1000' p(95)=15.25ms
http_req_duration{phase:scenario,name:payment_create}
✓ 'p(95)<1500' p(95)=35.73ms
http_req_failed
✓ 'rate<0.01' rate=0.00%
{phase:scenario}
✓ 'rate<0.01' rate=0.00%
█ TOTAL RESULTS
checks_total.......: 10538 36.821437/s
checks_succeeded...: 100.00% 10538 out of 10538
checks_failed......: 0.00% 0 out of 10538
✓ product fetch success
✓ login success
✓ address fetch success
✓ cart item added 201
✓ order created 201
✓ payment processed 201
HTTP
http_req_duration..........................: avg=32.65ms min=6.27ms med=24.55ms max=297.36ms p(90)=55.96ms p(95)=103.56ms
{ expected_response:true }...............: avg=32.65ms min=6.27ms med=24.55ms max=297.36ms p(90)=55.96ms p(95)=103.56ms
{ phase:scenario,name:cart_add }.........: avg=46.64ms min=32.66ms med=42.6ms max=181.51ms p(90)=58.04ms p(95)=65.46ms
{ phase:scenario,name:order_create }.....: avg=10.95ms min=6.27ms med=10.17ms max=103.52ms p(90)=12.97ms p(95)=15.25ms
{ phase:scenario,name:payment_create }...: avg=26.77ms min=18.61ms med=23.89ms max=143.86ms p(90)=32.71ms p(95)=35.73ms
http_req_failed............................: 0.00% 0 out of 10538
{ phase:scenario }.......................: 0.00% 0 out of 9537
http_reqs..................................: 10538 36.821437/s
EXECUTION
iteration_duration.........................: avg=84.98ms min=58.78ms med=77.17ms max=338.9ms p(90)=102ms p(95)=118.66ms
iterations.................................: 3179 11.107928/s
vus........................................: 0 min=0 max=9
vus_max....................................: 50 min=50 max=50
NETWORK
data_received..............................: 6.7 MB 24 kB/s
data_sent..................................: 3.6 MB 13 kB/s
running (4m46.2s), 000/050 VUs, 3179 complete and 0 interrupted iterations
purchase_flow ✓ [======================================] 000/050 VUs 3m30s 00.71 iters/s
test result(graph)




| 지표 | Before | After |
| iterations | 3180 | 3179 |
| failures | 0 | 0 |
| cart_add p95 | 67.58ms | 65.46ms |
| order_create p95 | 15.38ms | 15.25ms |
| payment_create p95 | 37.46ms | 35.73ms |
| iteration avg | 84.35ms | 84.98ms |
| iteration p95 | 121.8ms | 118.66ms |
| max VUs | 9 | 9 |
Summary
- cart_add p95: 약간 개선
- payment_create p95: 약간 개선
- iteration p95: 약간 개선
- max latency도 감소
해석: stability 구간에서는 이미 시스템이 충분히 여유 있어서, platform thread도 병목이 아니었다.
TEST-2
- test type: pressure
- 목적: 실패 지점 관찰
- test detail
pressure: [
{ target: 30, duration: '1m' },
{ target: 50, duration: '1m' },
{ target: 70, duration: '1m' },
{ target: 100, duration: '1m' },
{ target: 0, duration: '30s' },
]
test result(console)TEST-2
- test type: pressure
- 목적: 실패 지점 개선 관찰
- test detail
pressure: [
{ target: 30, duration: '1m' },
{ target: 50, duration: '1m' },
{ target: 70, duration: '1m' },
{ target: 100, duration: '1m' },
{ target: 0, duration: '30s' },
]
test result(console)
/\ Grafana /‾‾/
/\ / \ |\ __ / /
/ \/ \ | |/ / / ‾‾\
/ \ | ( | (‾) |
/ __________ \ |_|\_\ \_____/
execution: local
script: /k6/scenario-b.js
output: InfluxDBv1 (http://k6-influxdb:8086)
scenarios: (100.00%) 1 scenario, 500 max VUs, 5m0s max duration (incl. graceful stop):
* purchase_flow: Up to 100.00 iterations/s for 4m30s over 5 stages (maxVUs: 50-500, gracefulStop: 30s)
WARN[0215] Insufficient VUs, reached 500 active VUs and cannot initialize more executor=ramping-arrival-rate scenario=purchase_flow
█ THRESHOLDS
http_req_duration{phase:scenario,name:cart_add}
✗ 'p(95)<800' p(95)=6.04s
http_req_duration{phase:scenario,name:order_create}
✗ 'p(95)<1000' p(95)=5.94s
http_req_duration{phase:scenario,name:payment_create}
✗ 'p(95)<1500' p(95)=6.09s
http_req_failed
✓ 'rate<0.01' rate=0.00%
{phase:scenario}
✓ 'rate<0.01' rate=0.00%
█ TOTAL RESULTS
checks_total.......: 24122 67.785269/s
checks_succeeded...: 100.00% 24122 out of 24122
checks_failed......: 0.00% 0 out of 24122
✓ product fetch success
✓ login success
✓ address fetch success
✓ cart item added 201
✓ order created 201
✓ payment processed 201
HTTP
http_req_duration..........................: avg=3.35s min=6.84ms med=4.67s max=12.39s p(90)=5.58s p(95)=5.99s
{ expected_response:true }...............: avg=3.35s min=6.84ms med=4.67s max=12.39s p(90)=5.58s p(95)=5.99s
{ phase:scenario,name:cart_add }.........: avg=3.51s min=33.67ms med=4.78s max=12.39s p(90)=5.65s p(95)=6.04s
{ phase:scenario,name:order_create }.....: avg=3.46s min=6.84ms med=4.71s max=11.98s p(90)=5.56s p(95)=5.94s
{ phase:scenario,name:payment_create }...: avg=3.51s min=18.5ms med=4.74s max=12.39s p(90)=5.6s p(95)=6.09s
http_req_failed............................: 0.00% 0 out of 24122
{ phase:scenario }.......................: 0.00% 0 out of 23121
http_reqs..................................: 24122 67.785269/s
EXECUTION
dropped_iterations.........................: 5823 16.363221/s
iteration_duration.........................: avg=10.51s min=60.15ms med=14.8s max=37.46s p(90)=17.04s p(95)=17.41s
iterations.................................: 7707 21.657452/s
vus........................................: 82 min=0 max=500
vus_max....................................: 500 min=50 max=500
NETWORK
data_received..............................: 15 MB 43 kB/s
data_sent..................................: 8.5 MB 24 kB/s
running (5m55.9s), 000/500 VUs, 7707 complete and 0 interrupted iterations
purchase_flow ✓ [======================================] 000/500 VUs 4m30s 001.29 iters/s
ERRO[0356] thresholds on metrics 'http_req_duration{phase:scenario,name:cart_add}, http_req_duration{phase:scenario,name:order_create}, http_req_duration{phase:scenario,name:payment_create}' have been crossed




Summary: 의미 있는 개선은 없었습니다. 오히려 성능이 악화되었습니다.
| 지표 | 적용 전 | 적용 후 | 변화 |
| 전체 p95 응답시간 | 5.03s | 5.99s | +19.1% 악화 |
| cart_add p95 | 5.06s | 6.04s | +19.4% 악화 |
| order_create p95 | 4.99s | 5.94s | +19.0% 악화 |
| payment_create p95 | 5.03s | 6.09s | +21.1% 악화 |
| 평균 응답시간 | 2.89s | 3.35s | +15.9% 악화 |
| 처리된 iteration | 8,399 | 7,707 | -8.2% 감소 |
| HTTP RPS | 74.7/s | 67.8/s | -9.3% 감소 |
| dropped iterations | 5,130 | 5,823 | +13.5% 악화 |
| iteration p95 | 14.43s | 17.41s | +20.7% 악화 |
| max latency | 7.02s | 12.39s | +76.5% 악화 |
판단: 가상 스레드 적용 후 latency, throughput, dropped iteration 모두 나빠졌습니다.
특히 두 테스트 모두 Insufficient VUs가 발생했고 500 max VUs에 도달했기 때문에, 시스템이 목표 arrival rate를 소화하지 못하는 상태입니다. 그런데 적용 후에는 더 적은 요청을 처리하면서도 응답시간이 더 길어졌고 dropped iteration도 늘었습니다.
결론적으로 이번 pressure 테스트만 보면:
가상 스레드는 병목을 해소하지 못했고, 현재 워크로드에서는 역효과가 난 것으로 보는 게 맞습니다.
테스트가 실행되는 동안 블로그 작성, 음악 감상 등의 백그라운드 작업을 해서 결과가 오염되었을 거라 생각했습니다.
그래서 DB를 초기화하고 재시도했습니다.
의미 있는 개선은 여전히 없습니다. 가상 스레드 적용의 이점보다 컨텍스트 스위칭 비용이 더 높았기 때문으로 추정됩니다.
| 지표 | 적용 전 | 이번 재측정 | 변화 |
| 전체 p95 | 5.03s | 5.21s | +3.6% 악화 |
| cart_add p95 | 5.06s | 5.25s | +3.8% 악화 |
| order_create p95 | 4.99s | 5.16s | +3.4% 악화 |
| payment_create p95 | 5.03s | 5.20s | +3.4% 악화 |
| 평균 응답시간 | 2.89s | 2.99s | +3.5% 악화 |
| HTTP RPS | 74.71/s | 72.89/s | -2.4% 감소 |
| iterations | 8,399 | 8,216 | -2.2% 감소 |
| dropped iterations | 5,130 | 5,313 | +3.6% 악화 |
| iteration p95 | 14.43s | 15.13s | +4.9% 악화 |
'Projects > [Final] Shopping Mall Project' 카테고리의 다른 글
| 이중 락 해제 후 테스트 결과 (결제 생성) (0) | 2026.05.08 |
|---|---|
| 가상 스레드를 적용했는데 왜 성능이 그대로인가 (0) | 2026.05.08 |
| 가상 스레드 적용 전 테스트 결과 (결제 생성) (0) | 2026.05.07 |
| [트러블슈팅?] .setAllowedOrigins("")에 특정 도메인만 허용하기 (0) | 2026.05.07 |
| [트러블슈팅] BeanDefinitionOverrideException 해결하기 (0) | 2026.05.07 |