Projects/[Final] Shopping Mall Project

가상 스레드 적용 후 테스트 결과 (결제 생성)

montmer27 2026. 5. 8. 00:53

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% 악화