Published on
👁️

JPA N+1 문제 해결에 따른 성능 변화 분석 - 4. 테스트 결과 2

Authors
  • avatar
    Name
    River
    Twitter

목차 페이지로 이동

데이터 규모에 따른 JPA N+1 문제 진단과 해결 전략 비교
(Fetch Join, Entity Graph, Batch Fetching)

4.2. 테스트 케이스 2 결과
테스트 케이스 설명

대규모 데이터

  • Member : 500명
  • Animal : 1000마리
  • AnimalCase : 1000개 (Member 당 2개)
  • Protection : 1,000,000개 (AnimalCase 당 1,000개)

Batch Fetching

  • default_batch_fetch_size: 0

API 버전

  • Pure : 해결 전략 없는 상태 (N+1 문제 존재)
  • Optimized : Fetch Join 적용
  • Graph : Entity Graph 적용
  • Original : 프로젝트 끝날 때 상태 (일부 Fetch Join 적용됨)
쿼리 분석 결과

(1)1회차

========================================================================================================================
                                  API 버전 비교 분석 보고서
========================================================================================================================

1. 요약 정보

---

분석 대상 API 버전: 4
- original: /api/v1/protections/my-cases (호출 횟수: 1)
- pure: /api/v1/protections/pure/my-cases (호출 횟수: 1)
- optimized: /api/v1/protections/optimized/my-cases (호출 횟수: 1)
- graph: /api/v1/protections/graph/my-cases (호출 횟수: 1)

2. 회차별 응답 시간 비교

---

### 응답 시간 (ms)

응답 시간: original (1940) / pure (658) / optimized (82) / graph (79)

### 쿼리 수

쿼리 수: original (1506) / pure (505) / optimized (4) / graph (4)

### DB 접근 시간 (ms)

DB 시간: original (108.0) / pure (46.0) / optimized (31.0) / graph (21.0)

### 지연 로딩 횟수

지연 로딩: original (2008) / pure (2005) / optimized (2006) / graph (2006)

### 반복 쿼리 패턴 분석

#### original 버전 반복 쿼리:

1. 횟수: 999 전체 쿼리: select s1*0.id, s1_0.address, s1_0.business_registration_number, s1_0.created_at, s1_0.latitude, s1_0.longitude, s1_0.
 modified_at, s1_0.name, s1_0.closed_days, s1_0.weekday_time, s1_0.weekend_time, s1_0.owner, s1_0.save_target_animal, sm1_0.id, sm1_0
 .address, sm1_0.api_key, sm1_0.birth_date, sm1_0.created_at, sm1_0.email, sm1_0.gender, sm1_0.login_type, sm1_0.marketing_agree, sm1
 \_0.modified_at, sm1_0.nickname, oap1_0.member_id, oap1_0.created_at, oap1_0.google_connected, oap1_0.google_connected_at, oap1_0.goo
 gle_email, oap1_0.google_modified_at, oap1_0.google_provider_id, oap1_0.kakao_connected, oap1_0.kakao_connected_at, oap1_0.kakao_ema
 il, oap1_0.kakao_modified_at, oap1_0.kakao_provider_id, oap1_0.modified_at, oap1_0.naver_connected, oap1_0.naver_connected_at, oap1*
 0.naver*email, oap1_0.naver_modified_at, oap1_0.naver_provider_id, sm1_0.password, sm1_0.phone_number, sm1_0.profile_image_url, sm1*
 0.role, sm1_0.status, s1_0.tel, s1_0.vet_person_count from shelters s1_0 left join members sm1_0 on sm1_0.id=s1_0.member_id left join oauth_providers oap1_0 on sm1_0.id=oap1_0.member_id where s1_0.member_id=7
 ID 값들: 7, 4, 5, 6, 8, 9, 10, 11, 12, 13989...

2. 횟수: 500 전체 쿼리: select op1*0.member_id, op1_0.created_at, op1_0.google_connected, op1_0.google_connected_at, op1_0.google_email, op1_0
 .google_modified_at, op1_0.google_provider_id, op1_0.kakao_connected, op1_0.kakao_connected_at, op1_0.kakao_email, op1_0.kakao_modif
 ied_at, op1_0.kakao_provider_id, m1_0.id, m1_0.address, m1_0.api_key, m1_0.birth_date, m1_0.created_at, m1_0.email, m1_0.gender, m1*
 0.login*type, m1_0.marketing_agree, m1_0.modified_at, m1_0.nickname, m1_0.password, m1_0.phone_number, m1_0.profile_image_url, m1_0.
 role, s1_0.id, s1_0.address, s1_0.business_registration_number, s1_0.created_at, s1_0.latitude, s1_0.longitude, s1_0.modified_at, s1
 \_0.name, s1_0.closed_days, s1_0.weekday_time, s1_0.weekend_time, s1_0.owner, s1_0.save_target_animal, s1_0.tel, s1_0.vet_person_coun
 t, m1_0.status, op1_0.modified_at, op1_0.naver_connected, op1_0.naver_connected_at, op1_0.naver_email, op1_0.naver_modified_at, op1*
 0.naver_provider_id from oauth_providers op1_0 join members m1_0 on m1_0.id=op1_0.member_id left join shelters s1_0 on m1_0.id=s1_0.member_id where op1_0.member_id=7
 ID 값들: 7, 4, 5, 6, 8, 9, 10, 11, 12, 13490...

#### pure 버전 반복 쿼리:

1. 횟수: 500 전체 쿼리: select m1_0.id, m1_0.address, m1_0.api_key, m1_0.birth_date, m1_0.created_at, m1_0.email, m1_0.gender, m1_0.login_type
 , m1_0.marketing_agree, m1_0.modified_at, m1_0.nickname, oap1_0.member_id, oap1_0.created_at, oap1_0.google_connected, oap1_0.google
 \_connected_at, oap1_0.google_email, oap1_0.google_modified_at, oap1_0.google_provider_id, oap1_0.kakao_connected, oap1_0.kakao_conne
 cted_at, oap1_0.kakao_email, oap1_0.kakao_modified_at, oap1_0.kakao_provider_id, oap1_0.modified_at, oap1_0.naver_connected, oap1_0.
 naver_connected_at, oap1_0.naver_email, oap1_0.naver_modified_at, oap1_0.naver_provider_id, m1_0.password, m1_0.phone_number, m1_0.p
 rofile_image_url, m1_0.role, s1_0.id, s1_0.address, s1_0.business_registration_number, s1_0.created_at, s1_0.latitude, s1_0.longitud
 e, s1_0.modified_at, s1_0.name, s1_0.closed_days, s1_0.weekday_time, s1_0.weekend_time, s1_0.owner, s1_0.save_target_animal, s1_0.te
 l, s1_0.vet_person_count, m1_0.status from members m1_0 left join oauth_providers oap1_0 on m1_0.id=oap1_0.member_id left join shelters s1_0 on m1_0.id=s1_0.member_id where m1_0.id=4
 ID 값들: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13490...

#### optimized 버전 반복 쿼리:

반복 패턴 없음

#### graph 버전 반복 쿼리:

반복 패턴 없음

3. 성능 지표 요약

---

### 버전별 성능 비교 표:

| 성능 지표           | original | pure | optimized | graph |
| ------------------- | -------- | ---- | --------- | ----- |
| 응답 시간 (ms)      | 1940     | 658  | 82        | 79    |
| 쿼리 수             | 1506     | 505  | 4         | 4     |
| DB 시간 (ms)        | 108.0    | 46.0 | 31.0      | 21.0  |
| 지연 로딩           | 2008     | 2005 | 2006      | 2006  |
| 쿼리당 DB 시간 (ms) | 0.07     | 0.09 | 7.75      | 5.25  |

### 성능 지표별 최적 버전:

- 응답 시간: graph (79ms)
- 쿼리 효율성: optimized (4)
- DB 효율성: original (0.07ms/쿼리)

(2)2회차

========================================================================================================================
                                  API 버전 비교 분석 보고서
========================================================================================================================

1. 요약 정보
------------------------------------------------------------------------------------------------------------------------
분석 대상 API 버전: 4- original: /api/v1/protections/my-cases (호출 횟수: 1)
- pure: /api/v1/protections/pure/my-cases (호출 횟수: 1)
- optimized: /api/v1/protections/optimized/my-cases (호출 횟수: 1)
- graph: /api/v1/protections/graph/my-cases (호출 횟수: 1)

2. 회차별 응답 시간 비교
------------------------------------------------------------------------------------------------------------------------

### 응답 시간 (ms)
응답 시간: original (1545) / pure (649) / optimized (79) / graph (68)

### 쿼리 수
쿼리 수: original (1506) / pure (505) / optimized (4) / graph (4)

### DB 접근 시간 (ms)
DB 시간: original (70.0) / pure (28.0) / optimized (30.0) / graph (23.0)

### 지연 로딩 횟수
지연 로딩: original (2008) / pure (2005) / optimized (2006) / graph (2006)

### 반복 쿼리 패턴 분석

#### original 버전 반복 쿼리:
1. 횟수: 999  전체 쿼리: select s1_0.id, s1_0.address, s1_0.business_registration_number, s1_0.created_at, s1_0.latitude, s1_0.longitude, s1_0.modified_at, s1_0.name, s1_0.closed_days, s1_0.weekday_time, s1_0.weekend_time, s1_
0.owner, s1_0.save_target_animal, sm1_0.id, sm1_0.address, sm1_0.api_key, sm1_0.birth_date, sm1_0.created_at, sm1_0.email, sm1_0.gender, sm1_0.login_type, sm1_0.marketing_agree, sm1_0.modified_at, sm1_0.nickname, oa
p1_0.member_id, oap1_0.created_at, oap1_0.google_connected, oap1_0.google_connected_at, oap1_0.google_email, oap1_0.google_modified_at, oap1_0.google_provider_id, oap1_0.kakao_connected, oap1_0.kakao_connected_at, o
ap1_0.kakao_email, oap1_0.kakao_modified_at, oap1_0.kakao_provider_id, oap1_0.modified_at, oap1_0.naver_connected, oap1_0.naver_connected_at, oap1_0.naver_email, oap1_0.naver_modified_at, oap1_0.naver_provider_id, s
m1_0.password, sm1_0.phone_number, sm1_0.profile_image_url, sm1_0.role, sm1_0.status, s1_0.tel, s1_0.vet_person_count from shelters s1_0 left join members sm1_0 on sm1_0.id=s1_0.member_id left join oauth_providers oap1_0 on sm1_0.id=oap1_0.member_id where s1_0.member_id=7
  ID 값들: 7, 4, 5, 6, 8, 9, 10, 11, 12, 13989...

2. 횟수: 500  전체 쿼리: select op1_0.member_id, op1_0.created_at, op1_0.google_connected, op1_0.google_connected_at, op1_0.google_email, op1_0.google_modified_at, op1_0.google_provider_id, op1_0.kakao_connected, op1_0.kakao_c
onnected_at, op1_0.kakao_email, op1_0.kakao_modified_at, op1_0.kakao_provider_id, m1_0.id, m1_0.address, m1_0.api_key, m1_0.birth_date, m1_0.created_at, m1_0.email, m1_0.gender, m1_0.login_type, m1_0.marketing_agree
, m1_0.modified_at, m1_0.nickname, m1_0.password, m1_0.phone_number, m1_0.profile_image_url, m1_0.role, s1_0.id, s1_0.address, s1_0.business_registration_number, s1_0.created_at, s1_0.latitude, s1_0.longitude, s1_0.
modified_at, s1_0.name, s1_0.closed_days, s1_0.weekday_time, s1_0.weekend_time, s1_0.owner, s1_0.save_target_animal, s1_0.tel, s1_0.vet_person_count, m1_0.status, op1_0.modified_at, op1_0.naver_connected, op1_0.nave
r_connected_at, op1_0.naver_email, op1_0.naver_modified_at, op1_0.naver_provider_id from oauth_providers op1_0 join members m1_0 on m1_0.id=op1_0.member_id left join shelters s1_0 on m1_0.id=s1_0.member_id where op1_0.member_id=7
  ID 값들: 7, 4, 5, 6, 8, 9, 10, 11, 12, 13490...

#### pure 버전 반복 쿼리:
1. 횟수: 500  전체 쿼리: select m1_0.id, m1_0.address, m1_0.api_key, m1_0.birth_date, m1_0.created_at, m1_0.email, m1_0.gender, m1_0.login_type, m1_0.marketing_agree, m1_0.modified_at, m1_0.nickname, oap1_0.member_id, oap1_0.c
reated_at, oap1_0.google_connected, oap1_0.google_connected_at, oap1_0.google_email, oap1_0.google_modified_at, oap1_0.google_provider_id, oap1_0.kakao_connected, oap1_0.kakao_connected_at, oap1_0.kakao_email, oap1_
0.kakao_modified_at, oap1_0.kakao_provider_id, oap1_0.modified_at, oap1_0.naver_connected, oap1_0.naver_connected_at, oap1_0.naver_email, oap1_0.naver_modified_at, oap1_0.naver_provider_id, m1_0.password, m1_0.phone
_number, m1_0.profile_image_url, m1_0.role, s1_0.id, s1_0.address, s1_0.business_registration_number, s1_0.created_at, s1_0.latitude, s1_0.longitude, s1_0.modified_at, s1_0.name, s1_0.closed_days, s1_0.weekday_time,
s1_0.weekend_time, s1_0.owner, s1_0.save_target_animal, s1_0.tel, s1_0.vet_person_count, m1_0.status from members m1_0 left join oauth_providers oap1_0 on m1_0.id=oap1_0.member_id left join shelters s1_0 on m1_0.id=s1_0.member_id where m1_0.id=4
  ID 값들: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13490...

#### optimized 버전 반복 쿼리:
반복 패턴 없음

#### graph 버전 반복 쿼리:
반복 패턴 없음

3. 성능 지표 요약
------------------------------------------------------------------------------------------------------------------------

### 버전별 성능 비교 표:
| 성능 지표 | original | pure | optimized | graph |
| --- | --- | --- | --- | --- |
| 응답 시간 (ms) | 1545 | 649 | 79 | 68 |
| 쿼리 수 | 1506 | 505 | 4 | 4 |
| DB 시간 (ms) | 70.0 | 28.0 | 30.0 | 23.0 |
| 지연 로딩 | 2008 | 2005 | 2006 | 2006 |
| 쿼리당 DB 시간 (ms) | 0.05 | 0.06 | 7.50 | 5.75 |

### 성능 지표별 최적 버전:
- 응답 시간: graph (68ms)
- 쿼리 효율성: optimized (4)
- DB 효율성: original (0.05ms/쿼리)

K6 부하 테스트 결과

(1)K6 시나리오 설명

(주의 !) P6Spy나 다른 로그 시스템을 끄지 않고 K6 테스트를 로컬에서 하는 경우 메모리 부족이 생길 수 있다.

  1. 대량의 쿼리가 발생 ⇒ P6Spy의 로깅 처리 ⇒ CPU, 메모리 사용 증가 및 로그 파일 생성으로 디스크 I/O 증가
  2. 로깅 작업 자체도 많은 임시 객체를 생성한다. ⇒ JVM Heap에 영향을 준다.
  3. 디스크 I/O 증가는 CPU, 메모리 등 전반적으로 영향을 많이 준다.
  4. 소규모 데이터에선 영향이 크지 않다.

  • K6 시나리오
    • 사용자 로그인
    • 시작 : 5명의 동시 사용자로 10초간 진행
    • 단계적 증가 : 20명 → 50명 → 100명으로 각 30초씩 증가
    • 최대 부하 유지 : 100명의 사용자로 30초간 유지
    • 마무리 : 5명으로 감소하여 10초간 진행

(2)

Original 버전

1회차

요약 ========================================================= 총 요청 수: 854 테스트 기간:
150.8466875TPS (초당 트랜잭션): 5.66

응답 시간 (ms): - 평균: 8280.57 - 최소: 78.36 - 중앙값: 8331.87 - 최대: 21578.61 - p90: 14715.28 - p95: 14937.08 - p99: 15215.39 - p99.9: 20136.22

# 실패율: 0.00%

{
"apiVersion": "original",
"summary": {
"totalRequests": 854,
"testDuration": 150.8466875,
"tps": 5.661377217845768
},
"responseTime": {
"avg": 8280.57015210773,
"min": 78.3589,
"med": 8331.8688,
"max": 21578.6081,
"p90": 14715.27781,
"p95": 14937.082225,
"p99": 15215.388907
},
"failRate": 0,
"vus_max": 100,
"http_req_waiting": 8274.315149414515,
"http_req_connecting": 0.1424067915690866,
"http_req_sending": 0.01543231850117096,
"http_req_receiving": 6.2395703747072515
}

running (2m30.8s), 000/100 VUs, 853 complete and 0 interrupted iterations  
 default[======================================] 000/100 VUs 2m20s  
 ERRO[0151] thresholds on metrics 'http_req_duration' have been crossed

2회차

=========================================================
            original 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 864
테스트 기간: 151.6044726TPS (초당 트랜잭션): 5.70

응답 시간 (ms):
  - 평균: 8271.32
  - 최소: 82.65
  - 중앙값: 8095.75
  - 최대: 24252.80
  - p90: 14644.78
  - p95: 14829.34
  - p99: 15029.73
  - p99.9: 23825.57

실패율: 0.00%
=========================================================

{
    "apiVersion": "original",
    "summary": {
        "totalRequests": 864,
        "testDuration": 151.6044726,
        "tps": 5.699040306545679
    },
    "responseTime": {
        "avg": 8271.316511458328,
        "min": 82.6475,
        "med": 8095.74545,
        "max": 24252.804,
        "p90": 14644.77648,
        "p95": 14829.34468,
        "p99": 15029.733403
    },
    "failRate": 0,
    "vus_max": 100,
    "http_req_waiting": 8264.908236226845,
    "http_req_connecting": 0.15374629629629624,
    "http_req_sending": 0.010217361111111111,
    "http_req_receiving": 6.398057870370371
}

running (2m31.6s), 000/100 VUs, 863 complete and 0 interrupted iterations
default[======================================] 000/100 VUs  2m20s
ERRO[0152] thresholds on metrics 'http_req_duration' have been crossed

3회차

요약 ========================================================= 총 요청 수: 855 테스트 기간:
151.6222918TPS (초당 트랜잭션): 5.64

응답 시간 (ms): - 평균: 8357.78 - 최소: 74.96 - 중앙값: 8047.71 - 최대: 23441.30 - p90: 15113.41 - p95: 15403.84 - p99: 15689.56 - p99.9: 22194.59

# 실패율: 0.00%

{
"apiVersion": "original",
"summary": {
"totalRequests": 855,
"testDuration": 151.6222918,
"tps": 5.639012508317725
},
"responseTime": {
"avg": 8357.776690526316,
"min": 74.9553,
"med": 8047.7083,
"max": 23441.2959,
"p90": 15113.41184,
"p95": 15403.837440000001,
"p99": 15689.556008000001
},
"failRate": 0,
"vus_max": 100,
"http_req_waiting": 8351.39562561404,
"http_req_connecting": 0.14600619883040936,
"http_req_sending": 0.00941719298245614,
"http_req_receiving": 6.371647719298251
}

running (2m31.6s), 000/100 VUs, 854 complete and 0 interrupted iterations  
 default[======================================] 000/100 VUs 2m20s  
 ERRO[0151] thresholds on metrics 'http_req_duration' have been crossed

(3)Pure 버전

1회차

=========================================================
            pure 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 1899
테스트 기간: 142.0607558TPS (초당 트랜잭션): 13.37

응답 시간 (ms):
  - 평균: 2899.44
  - 최소: 89.03
  - 중앙값: 2923.13
  - 최대: 8138.01
  - p90: 5209.24
  - p95: 5290.44
  - p99: 5488.89
  - p99.9: 7642.27

실패율: 0.00%
=========================================================

{
    "apiVersion": "pure",
    "summary": {
        "totalRequests": 1899,
        "testDuration": 142.0607558,
        "tps": 13.367520039619555
    },
    "responseTime": {
        "avg": 2899.442454923644,
        "min": 89.0302,
        "med": 2923.1279,
        "max": 8138.0052,
        "p90": 5209.23864,
        "p95": 5290.43898,
        "p99": 5488.8946160000005
    },
    "failRate": 0,
    "vus_max": 100,
    "http_req_waiting": 2893.0074435492365,
    "http_req_connecting": 0.06313638757240653,
    "http_req_sending": 0.006758504476040022,
    "http_req_receiving": 6.428252869931546
}

running (2m22.1s), 000/100 VUs, 1898 complete and 0 interrupted iterations
default[======================================] 000/100 VUs  2m20s
ERRO[0142] thresholds on metrics 'http_req_duration' have been crossed

2회차


=========================================================
pure 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 1898
테스트 기간: 141.9498751TPS (초당 트랜잭션): 13.37

응답 시간 (ms): - 평균: 2904.55 - 최소: 76.20 - 중앙값: 2919.40 - 최대: 7118.66 - p90: 5093.84 - p95: 5192.91 - p99: 5523.43 - p99.9: 6736.93

# 실패율: 0.00%

{
"apiVersion": "pure",
"summary": {
"totalRequests": 1898,
"testDuration": 141.9498751,
"tps": 13.370917013226734
},
"responseTime": {
"avg": 2904.545586775549,
"min": 76.1951,
"med": 2919.39525,
"max": 7118.6602,
"p90": 5093.83653,
"p95": 5192.9071,
"p99": 5523.426602999997
},
"failRate": 0,
"vus_max": 100,
"http_req_waiting": 2898.2194657534287,
"http_req_connecting": 0.06428914646996842,
"http_req_sending": 0.008323445732349843,
"http_req_receiving": 6.317797576396193
}

running (2m21.9s), 000/100 VUs, 1897 complete and 0 interrupted iterations  
 default[======================================] 000/100 VUs 2m20s  
 ERRO[0142] thresholds on metrics 'http_req_duration' have been crossed

3회차

=========================================================
            pure 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 1910
테스트 기간: 141.6948385TPS (초당 트랜잭션): 13.48

응답 시간 (ms):
  - 평균: 2884.47
  - 최소: 89.71
  - 중앙값: 2965.20
  - 최대: 7164.16
  - p90: 5092.33
  - p95: 5178.10
  - p99: 5323.03
  - p99.9: 7080.34

실패율: 0.00%
=========================================================

{
    "apiVersion": "pure",
    "summary": {
        "totalRequests": 1910,
        "testDuration": 141.6948385,
        "tps": 13.47967237352827
    },
    "responseTime": {
        "avg": 2884.468164031412,
        "min": 89.7061,
        "med": 2965.2042,
        "max": 7164.1577,
        "p90": 5092.32834,
        "p95": 5178.0961050000005,
        "p99": 5323.0293200000015
    },
    "failRate": 0,
    "vus_max": 100,
    "http_req_waiting": 2878.1477687958154,
    "http_req_connecting": 0.0639495287958115,
    "http_req_sending": 0.00934649214659686,
    "http_req_receiving": 6.311048743455497
}

running (2m21.7s), 000/100 VUs, 1909 complete and 0 interrupted iterations
default[======================================] 000/100 VUs  2m20s
ERRO[0142] thresholds on metrics 'http_req_duration' have been crossed

(4)

Optimized 버전

1회차

요약 ========================================================= 총 요청 수: 5535 테스트 기간:
140.8580007TPS (초당 트랜잭션): 39.29

응답 시간 (ms): - 평균: 227.88 - 최소: 60.01 - 중앙값: 183.63 - 최대: 2331.92 - p90: 414.05 - p95: 491.95 - p99: 785.16 - p99.9: 1515.94

# 실패율: 0.00%

{
"apiVersion": "optimized",
"summary": {
"totalRequests": 5535,
"testDuration": 140.8580007,
"tps": 39.29489253356981
},
"responseTime": {
"avg": 227.88183819331547,
"min": 60.005,
"med": 183.6257,
"max": 2331.9224,
"p90": 414.05238,
"p95": 491.95183000000003,
"p99": 785.1622879999995
},
"failRate": 0,
"vus_max": 100,
"http_req_waiting": 200.01739129177935,
"http_req_connecting": 0.20038332429990965,
"http_req_sending": 1.5974533875338754,
"http_req_receiving": 26.26699351400178
}

running (2m20.9s), 000/100 VUs, 5534 complete and 0 interrupted iterations  
 default[======================================] 000/100 VUs 2m20s

2회차


=========================================================
            optimized 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 5966
테스트 기간: 141.3583998TPS (초당 트랜잭션): 42.20

응답 시간 (ms):
  - 평균: 193.59
  - 최소: 60.21
  - 중앙값: 168.12
  - 최대: 621.01
  - p90: 348.59
  - p95: 380.83
  - p99: 456.81
  - p99.9: 508.22

실패율: 0.00%
=========================================================

{
    "apiVersion": "optimized",
    "summary": {
        "totalRequests": 5966,
        "testDuration": 141.3583998,
        "tps": 42.204778834798326
    },
    "responseTime": {
        "avg": 193.59001642641624,
        "min": 60.2133,
        "med": 168.1181,
        "max": 621.0075,
        "p90": 348.59295,
        "p95": 380.830875,
        "p99": 456.81373500000046
    },
    "failRate": 0,
    "vus_max": 100,
    "http_req_waiting": 187.78344480388859,
    "http_req_connecting": 0.01786666107945022,
    "http_req_sending": 0.010937261146496818,
    "http_req_receiving": 5.795634361381155
}

running (2m21.4s), 000/100 VUs, 5965 complete and 0 interrupted iterations
default[======================================] 000/100 VUs  2m20s

3회차

요약 ========================================================= 총 요청 수: 6022 테스트 기간:
141.0015135TPS (초당 트랜잭션): 42.71

응답 시간 (ms): - 평균: 186.90 - 최소: 58.73 - 중앙값: 157.76 - 최대: 588.91 - p90: 334.36 - p95: 366.93 - p99: 431.38 - p99.9: 518.87

# 실패율: 0.00%

{
"apiVersion": "optimized",
"summary": {
"totalRequests": 6022,
"testDuration": 141.0015135,
"tps": 42.70876142049355
},
"responseTime": {
"avg": 186.90445033211537,
"min": 58.7294,
"med": 157.76119999999997,
"max": 588.9073,
"p90": 334.35764000000006,
"p95": 366.92913,
"p99": 431.38425699999993
},
"failRate": 0,
"vus_max": 100,
"http_req_waiting": 181.10894471936246,
"http_req_connecting": 0.0200286117568914,
"http_req_sending": 0.009498904018598472,
"http_req_receiving": 5.786006708734645
}

running (2m21.0s), 000/100 VUs, 6021 complete and 0 interrupted iterations  
 default[======================================] 000/100 VUs 2m20s

(5)Graph 버전

1회차

=========================================================
            graph 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 6332
테스트 기간: 141.0655947TPS (초당 트랜잭션): 44.89

응답 시간 (ms):
  - 평균: 130.26
  - 최소: 51.82
  - 중앙값: 114.79
  - 최대: 482.63
  - p90: 217.86
  - p95: 262.53
  - p99: 343.20
  - p99.9: 436.50

실패율: 0.00%
=========================================================

{
    "apiVersion": "graph",
    "summary": {
        "totalRequests": 6332,
        "testDuration": 141.0655947,
        "tps": 44.886919545946526
    },
    "responseTime": {
        "avg": 130.26295792798493,
        "min": 51.8217,
        "med": 114.78625,
        "max": 482.6344,
        "p90": 217.8603300000001,
        "p95": 262.52828,
        "p99": 343.19807899999967
    },
    "failRate": 0,
    "vus_max": 100,
    "http_req_waiting": 124.45318136449745,
    "http_req_connecting": 0.017232391029690455,
    "http_req_sending": 0.024374320909665192,
    "http_req_receiving": 5.7854022425773985
}


running (2m21.1s), 000/100 VUs, 6331 complete and 0 interrupted iterations
default[======================================] 000/100 VUs  2m20s

2회차


=========================================================
graph 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 6282
테스트 기간: 141.4776275TPS (초당 트랜잭션): 44.40

응답 시간 (ms): - 평균: 139.05 - 최소: 51.88 - 중앙값: 120.13 - 최대: 477.37 - p90: 240.61 - p95: 271.25 - p99: 349.31 - p99.9: 419.75

# 실패율: 0.00%

{
"apiVersion": "graph",
"summary": {
"totalRequests": 6282,
"testDuration": 141.4776275,
"tps": 44.40278022049811
},
"responseTime": {
"avg": 139.05004729385564,
"min": 51.8804,
"med": 120.12735,
"max": 477.3661,
"p90": 240.61193000000003,
"p95": 271.24947499999996,
"p99": 349.30719799999986
},
"failRate": 0,
"vus_max": 100,
"http_req_waiting": 132.83635692454632,
"http_req_connecting": 0.021469420566698504,
"http_req_sending": 0.023309646609360066,
"http_req_receiving": 6.1903807226997785
}

running (2m21.5s), 000/100 VUs, 6281 complete and 0 interrupted iterations  
 default[======================================] 000/100 VUs 2m20s

3회차

=========================================================
            graph 버전 성능 테스트 결과 요약
=========================================================
총 요청 수: 6337
테스트 기간: 141.440287TPS (초당 트랜잭션): 44.80

응답 시간 (ms):
  - 평균: 127.80
  - 최소: 51.37
  - 중앙값: 114.51
  - 최대: 421.56
  - p90: 210.41
  - p95: 245.13
  - p99: 325.93
  - p99.9: 383.73

실패율: 0.00%
=========================================================

{
    "apiVersion": "graph",
    "summary": {
        "totalRequests": 6337,
        "testDuration": 141.440287,
        "tps": 44.80335931445048
    },
    "responseTime": {
        "avg": 127.79636705065501,
        "min": 51.3708,
        "med": 114.5142,
        "max": 421.5598,
        "p90": 210.40684000000002,
        "p95": 245.1272,
        "p99": 325.9323880000001
    },
    "failRate": 0,
    "vus_max": 100,
    "http_req_waiting": 122.03385324285905,
    "http_req_connecting": 0.018646141707432538,
    "http_req_sending": 0.017741328704434275,
    "http_req_receiving": 5.744772479091044
}


running (2m21.4s), 000/100 VUs, 6336 complete and 0 interrupted iterations
default[======================================] 000/100 VUs  2m20s

GC 로그 분석 결과

(1)Original 버전

1회차

============================================
        GC-API 상관관계 분석 보고서        
============================================

분석 시간: 2025-05-02 01:24:10
로그 파일: results\temp_original_case2_log.txt

## 1. GC 통계

GC 발생 횟수: 128
GC 소요 시간: 1029.08ms
평균 GC 시간: 8.04ms
최대 GC 일시 정지 시간: 34.06ms
총 회수 메모리량: 65552MB
평균 메모리 회수량: 512.12MB
테스트 기간: 145.34초당 GC 발생 수: 0.8807
분당 GC 발생 수: 52.84

GC 유형별 발생 횟수: - Young (Normal) (G1 Evacuation Pause): 128

## 2. API 통계 (GC 추출)

API 요청 수: 853
API 실행 시간: 4753261.00ms
평균 API 응답 시간: 5572.40ms
최소 API 응답 시간: 892.00ms
최대 API 응답 시간: 16193.00ms
테스트 기간: 149.89TPS(초당 트랜잭션): 5.69
P90 응답 시간: 10736.80ms
P95 응답 시간: 12200.60ms
P99 응답 시간: 13752.52ms

API 상태 코드 분포: - 200: 853

API 버전 분포: - original: 853

## 3. K6 성능 지표

API 버전: original
총 요청 수: 854
테스트 기간: 150.85TPS: 5.66
평균 응답 시간: 8280.57ms
최소 응답 시간: 78.36ms
중간값 응답 시간: 8331.87ms
최대 응답 시간: 21578.61ms
P90 응답 시간: 14715.28ms
P95 응답 시간: 14937.08ms
P99 응답 시간: 15215.39ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간: - 대기 시간(waiting): 8274.32ms - 연결 시간(connecting): 0.14ms - 송신 시간(sending): 0.02ms - 수신 시간(receiving): 6.24ms

## 4. GC-API 상관관계 분석

API 호출 중 발생한 GC: 128
GC 발생 API 요청 수: 832
GC 미발생 API 요청 수: 21
전체 API 대비 GC 발생 API 비율: 97.54%

응답 시간 비교: - GC 발생 API 평균 응답 시간: 5688.70ms - GC 미발생 API 평균 응답 시간: 965.00ms - 응답 시간 차이: 4723.70ms - GC 영향 비율: 489.50%

백분위 응답 시간 비교: - GC 발생 API P95 응답 시간: 12272.30ms - GC 미발생 API P95 응답 시간: 1045.00ms

최소/최대 응답 시간 비교: - GC 발생 API 최소 응답 시간: 949.00ms - GC 미발생 API 최소 응답 시간: 892.00ms - GC 발생 API 최대 응답 시간: 16193.00ms - GC 미발생 API 최대 응답 시간: 1165.00ms

## 5. 효율성 지표

요청당 GC 발생 비율: 0.150059
요청당 메모리 회수량: 76.85MB
총 실행 시간 대비 GC 소요 시간 비율: 0.02%
TPSGC 발생 수: 22.49

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.88%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 67.29%

2회차

============================================
        GC-API 상관관계 분석 보고서
============================================

분석 시간: 2025-05-02 01:43:32
로그 파일: results\temp_original_case2_log.txt

## 1. GC 통계
GC 발생 횟수: 130
GC 소요 시간: 940.88ms
평균 GC 시간: 7.24ms
최대 GC 일시 정지 시간: 14.95ms
총 회수 메모리량: 66595MB
평균 메모리 회수량: 512.27MB
테스트 기간: 148.92초당 GC 발생 수: 0.8730
분당 GC 발생 수: 52.38

GC 유형별 발생 횟수:
  - Young (Normal) (G1 Evacuation Pause): 130

## 2. API 통계 (GC 추출)
API 요청 수: 863
API 실행 시간: 4644186.00ms
평균 API 응답 시간: 5381.44ms
최소 API 응답 시간: 887.00ms
최대 API 응답 시간: 14617.00ms
테스트 기간: 150.25TPS(초당 트랜잭션): 5.74
P90 응답 시간: 10843.20ms
P95 응답 시간: 12516.50ms
P99 응답 시간: 13969.80ms

API 상태 코드 분포:
  - 200: 863

API 버전 분포:
  - original: 863

## 3. K6 성능 지표
API 버전: original
총 요청 수: 864
테스트 기간: 151.60TPS: 5.70
평균 응답 시간: 8271.32ms
최소 응답 시간: 82.65ms
중간값 응답 시간: 8095.75ms
최대 응답 시간: 24252.80ms
P90 응답 시간: 14644.78ms
P95 응답 시간: 14829.34ms
P99 응답 시간: 15029.73ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간:
  - 대기 시간(waiting): 8264.91ms
  - 연결 시간(connecting): 0.15ms
  - 송신 시간(sending): 0.01ms
  - 수신 시간(receiving): 6.40ms

## 4. GC-API 상관관계 분석
API 호출 중 발생한 GC: 130
GC 발생 API 요청 수: 839
GC 미발생 API 요청 수: 24
전체 API 대비 GC 발생 API 비율: 97.22%

응답 시간 비교:
  - GC 발생 API 평균 응답 시간: 5506.65ms
  - GC 미발생 API 평균 응답 시간: 1004.54ms
  - 응답 시간 차이: 4502.11ms
  - GC 영향 비율: 448.18%

백분위 응답 시간 비교:
  - GC 발생 API P95 응답 시간: 12582.20ms
  - GC 미발생 API P95 응답 시간: 1183.75ms

최소/최대 응답 시간 비교:
  - GC 발생 API 최소 응답 시간: 915.00ms
  - GC 미발생 API 최소 응답 시간: 887.00ms
  - GC 발생 API 최대 응답 시간: 14617.00ms
  - GC 미발생 API 최대 응답 시간: 1218.00ms

## 5. 효율성 지표
요청당 GC 발생 비율: 0.150637
요청당 메모리 회수량: 77.17MB
총 실행 시간 대비 GC 소요 시간 비율: 0.02%
TPSGC 발생 수: 22.63

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.88%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 65.06%

3회차

============================================

분석 시간: 2025-05-02 01:50:54
로그 파일: results\temp_original_case2_log.txt

## 1. GC 통계

GC 발생 횟수: 129
GC 소요 시간: 979.79ms
평균 GC 시간: 7.60ms
최대 GC 일시 정지 시간: 14.69ms
총 회수 메모리량: 66086MB
평균 메모리 회수량: 512.29MB
테스트 기간: 149.97초당 GC 발생 수: 0.8602
분당 GC 발생 수: 51.61

GC 유형별 발생 횟수: - Young (Normal) (G1 Evacuation Pause): 129

## 2. API 통계 (GC 추출)

API 요청 수: 853
API 실행 시간: 4838915.00ms
평균 API 응답 시간: 5672.82ms
최소 API 응답 시간: 912.00ms
최대 API 응답 시간: 15111.00ms
테스트 기간: 150.33TPS(초당 트랜잭션): 5.67
P90 응답 시간: 11934.40ms
P95 응답 시간: 12695.80ms
P99 응답 시간: 13772.08ms

API 상태 코드 분포: - 200: 853

API 버전 분포: - original: 853

## 3. K6 성능 지표

API 버전: original
총 요청 수: 855
테스트 기간: 151.62TPS: 5.64
평균 응답 시간: 8357.78ms
최소 응답 시간: 74.96ms
중간값 응답 시간: 8047.71ms
최대 응답 시간: 23441.30ms
P90 응답 시간: 15113.41ms
P95 응답 시간: 15403.84ms
P99 응답 시간: 15689.56ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간: - 대기 시간(waiting): 8351.40ms - 연결 시간(connecting): 0.15ms - 송신 시간(sending): 0.01ms - 수신 시간(receiving): 6.37ms

## 4. GC-API 상관관계 분석

API 호출 중 발생한 GC: 129
GC 발생 API 요청 수: 835
GC 미발생 API 요청 수: 18
전체 API 대비 GC 발생 API 비율: 97.89%

응답 시간 비교: - GC 발생 API 평균 응답 시간: 5772.46ms - GC 미발생 API 평균 응답 시간: 1050.67ms - 응답 시간 차이: 4721.79ms - GC 영향 비율: 449.41%

백분위 응답 시간 비교: - GC 발생 API P95 응답 시간: 12708.10ms - GC 미발생 API P95 응답 시간: 1197.10ms

최소/최대 응답 시간 비교: - GC 발생 API 최소 응답 시간: 994.00ms - GC 미발생 API 최소 응답 시간: 912.00ms - GC 발생 API 최대 응답 시간: 15111.00ms - GC 미발생 API 최대 응답 시간: 1209.00ms

## 5. 효율성 지표

요청당 GC 발생 비율: 0.151231
요청당 메모리 회수량: 77.47MB
총 실행 시간 대비 GC 소요 시간 비율: 0.02%
TPSGC 발생 수: 22.73

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.77%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 67.87%

(2)Pure 버전

1회차

============================================
        GC-API 상관관계 분석 보고서
============================================

분석 시간: 2025-05-02 00:19:28
로그 파일: results\temp_pure_case2_log.txt

## 1. GC 통계
GC 발생 횟수: 126
GC 소요 시간: 913.12ms
평균 GC 시간: 7.25ms
최대 GC 일시 정지 시간: 15.97ms
총 회수 메모리량: 65525MB
평균 메모리 회수량: 520.04MB
테스트 기간: 134.29초당 GC 발생 수: 0.9383
분당 GC 발생 수: 56.30

GC 유형별 발생 횟수:
  - Young (Normal) (G1 Evacuation Pause): 126

## 2. API 통계 (GC 추출)
API 요청 수: 1897
API 실행 시간: 3916555.00ms
평균 API 응답 시간: 2064.60ms
최소 API 응답 시간: 331.00ms
최대 API 응답 시간: 5220.00ms
테스트 기간: 140.60TPS(초당 트랜잭션): 13.49
P90 응답 시간: 3972.40ms
P95 응답 시간: 4279.60ms
P99 응답 시간: 4753.40ms

API 상태 코드 분포:
  - 200: 1897

API 버전 분포:
  - pure: 1897

## 3. K6 성능 지표
API 버전: pure
총 요청 수: 1899
테스트 기간: 142.06TPS: 13.37
평균 응답 시간: 2899.44ms
최소 응답 시간: 89.03ms
중간값 응답 시간: 2923.13ms
최대 응답 시간: 8138.01ms
P90 응답 시간: 5209.24ms
P95 응답 시간: 5290.44ms
P99 응답 시간: 5488.89ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간:
  - 대기 시간(waiting): 2893.01ms
  - 연결 시간(connecting): 0.06ms
  - 송신 시간(sending): 0.01ms
  - 수신 시간(receiving): 6.43ms

## 4. GC-API 상관관계 분석
API 호출 중 발생한 GC: 126
GC 발생 API 요청 수: 1609
GC 미발생 API 요청 수: 288
전체 API 대비 GC 발생 API 비율: 84.82%

응답 시간 비교:
  - GC 발생 API 평균 응답 시간: 2347.24ms
  - GC 미발생 API 평균 응답 시간: 485.60ms
  - 응답 시간 차이: 1861.64ms
  - GC 영향 비율: 383.37%

백분위 응답 시간 비교:
  - GC 발생 API P95 응답 시간: 4347.80ms
  - GC 미발생 API P95 응답 시간: 693.65ms

최소/최대 응답 시간 비교:
  - GC 발생 API 최소 응답 시간: 342.00ms
  - GC 미발생 API 최소 응답 시간: 331.00ms
  - GC 발생 API 최대 응답 시간: 5220.00ms
  - GC 미발생 API 최대 응답 시간: 960.00ms

## 5. 효율성 지표
요청당 GC 발생 비율: 0.066421
요청당 메모리 회수량: 34.54MB
총 실행 시간 대비 GC 소요 시간 비율: 0.02%
TPSGC 발생 수: 9.34

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.89%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 71.21%

2회차

============================================

분석 시간: 2025-05-02 00:27:13
로그 파일: results\temp_pure_case2_log.txt

## 1. GC 통계

GC 발생 횟수: 126
GC 소요 시간: 920.00ms
평균 GC 시간: 7.30ms
최대 GC 일시 정지 시간: 16.83ms
총 회수 메모리량: 65511MB
평균 메모리 회수량: 519.93MB
테스트 기간: 138.48초당 GC 발생 수: 0.9099
분당 GC 발생 수: 54.59

GC 유형별 발생 횟수: - Young (Normal) (G1 Evacuation Pause): 126

## 2. API 통계 (GC 추출)

API 요청 수: 1895
API 실행 시간: 4048221.00ms
평균 API 응답 시간: 2136.26ms
최소 API 응답 시간: 328.00ms
최대 API 응답 시간: 5362.00ms
테스트 기간: 140.60TPS(초당 트랜잭션): 13.48
P90 응답 시간: 3864.20ms
P95 응답 시간: 4121.30ms
P99 응답 시간: 4296.06ms

API 상태 코드 분포: - 200: 1895

API 버전 분포: - pure: 1895

## 3. K6 성능 지표

API 버전: pure
총 요청 수: 1898
테스트 기간: 141.95TPS: 13.37
평균 응답 시간: 2904.55ms
최소 응답 시간: 76.20ms
중간값 응답 시간: 2919.40ms
최대 응답 시간: 7118.66ms
P90 응답 시간: 5093.84ms
P95 응답 시간: 5192.91ms
P99 응답 시간: 5523.43ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간: - 대기 시간(waiting): 2898.22ms - 연결 시간(connecting): 0.06ms - 송신 시간(sending): 0.01ms - 수신 시간(receiving): 6.32ms

## 4. GC-API 상관관계 분석

API 호출 중 발생한 GC: 126
GC 발생 API 요청 수: 1613
GC 미발생 API 요청 수: 282
전체 API 대비 GC 발생 API 비율: 85.12%

응답 시간 비교: - GC 발생 API 평균 응답 시간: 2425.19ms - GC 미발생 API 평균 응답 시간: 483.64ms - 응답 시간 차이: 1941.55ms - GC 영향 비율: 401.44%

백분위 응답 시간 비교: - GC 발생 API P95 응답 시간: 4138.00ms - GC 미발생 API P95 응답 시간: 670.50ms

최소/최대 응답 시간 비교: - GC 발생 API 최소 응답 시간: 338.00ms - GC 미발생 API 최소 응답 시간: 328.00ms - GC 발생 API 최대 응답 시간: 5362.00ms - GC 미발생 API 최대 응답 시간: 972.00ms

## 5. 효율성 지표

요청당 GC 발생 비율: 0.066491
요청당 메모리 회수량: 34.57MB
총 실행 시간 대비 GC 소요 시간 비율: 0.02%
TPSGC 발생 수: 9.35

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.84%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 73.55%

3회차

============================================
        GC-API 상관관계 분석 보고서
============================================

분석 시간: 2025-05-02 00:36:19
로그 파일: results\temp_pure_case2_log.txt

## 1. GC 통계
GC 발생 횟수: 127
GC 소요 시간: 850.54ms
평균 GC 시간: 6.70ms
최대 GC 일시 정지 시간: 14.69ms
총 회수 메모리량: 65999MB
평균 메모리 회수량: 519.68MB
테스트 기간: 134.81초당 GC 발생 수: 0.9421
분당 GC 발생 수: 56.52

GC 유형별 발생 횟수:
  - Young (Normal) (G1 Evacuation Pause): 127

## 2. API 통계 (GC 추출)
API 요청 수: 1909
API 실행 시간: 3976128.00ms
평균 API 응답 시간: 2082.83ms
최소 API 응답 시간: 331.00ms
최대 API 응답 시간: 5084.00ms
테스트 기간: 140.53TPS(초당 트랜잭션): 13.58
P90 응답 시간: 3826.00ms
P95 응답 시간: 4005.00ms
P99 응답 시간: 4396.68ms

API 상태 코드 분포:
  - 200: 1909

API 버전 분포:
  - pure: 1909

## 3. K6 성능 지표
API 버전: pure
총 요청 수: 1910
테스트 기간: 141.69TPS: 13.48
평균 응답 시간: 2884.47ms
최소 응답 시간: 89.71ms
중간값 응답 시간: 2965.20ms
최대 응답 시간: 7164.16ms
P90 응답 시간: 5092.33ms
P95 응답 시간: 5178.10ms
P99 응답 시간: 5323.03ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간:
  - 대기 시간(waiting): 2878.15ms
  - 연결 시간(connecting): 0.06ms
  - 송신 시간(sending): 0.01ms
  - 수신 시간(receiving): 6.31ms

## 4. GC-API 상관관계 분석
API 호출 중 발생한 GC: 127
GC 발생 API 요청 수: 1642
GC 미발생 API 요청 수: 267
전체 API 대비 GC 발생 API 비율: 86.01%

응답 시간 비교:
  - GC 발생 API 평균 응답 시간: 2342.41ms
  - GC 미발생 API 평균 응답 시간: 486.45ms
  - 응답 시간 차이: 1855.96ms
  - GC 영향 비율: 381.53%

백분위 응답 시간 비교:
  - GC 발생 API P95 응답 시간: 4053.85ms
  - GC 미발생 API P95 응답 시간: 675.70ms

최소/최대 응답 시간 비교:
  - GC 발생 API 최소 응답 시간: 343.00ms
  - GC 미발생 API 최소 응답 시간: 331.00ms
  - GC 발생 API 최대 응답 시간: 5084.00ms
  - GC 미발생 API 최대 응답 시간: 833.00ms

## 5. 효율성 지표
요청당 GC 발생 비율: 0.066527
요청당 메모리 회수량: 34.57MB
총 실행 시간 대비 GC 소요 시간 비율: 0.02%
TPSGC 발생 수: 9.35

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.95%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 72.21%

(3)

Optimized 버전

1회차

============================================

분석 시간: 2025-05-01 21:34:06
로그 파일: results\temp_optimized_case2_log.txt

## 1. GC 통계

GC 발생 횟수: 190
GC 소요 시간: 1073.89ms
평균 GC 시간: 5.65ms
최대 GC 일시 정지 시간: 15.95ms
총 회수 메모리량: 91142MB
평균 메모리 회수량: 479.69MB
테스트 기간: 135.34초당 GC 발생 수: 1.4038
분당 GC 발생 수: 84.23

GC 유형별 발생 횟수: - Young (Normal) (G1 Evacuation Pause): 190

## 2. API 통계 (GC 추출)

API 요청 수: 5533
API 실행 시간: 922049.00ms
평균 API 응답 시간: 166.65ms
최소 API 응답 시간: 56.00ms
최대 API 응답 시간: 541.00ms
테스트 기간: 139.55TPS(초당 트랜잭션): 39.65
P90 응답 시간: 278.00ms
P95 응답 시간: 323.00ms
P99 응답 시간: 422.36ms

API 상태 코드 분포: - 200: 5533

API 버전 분포: - optimized: 5533

## 3. K6 성능 지표

API 버전: optimized
총 요청 수: 5535
테스트 기간: 140.86TPS: 39.29
평균 응답 시간: 227.88ms
최소 응답 시간: 60.01ms
중간값 응답 시간: 183.63ms
최대 응답 시간: 2331.92ms
P90 응답 시간: 414.05ms
P95 응답 시간: 491.95ms
P99 응답 시간: 785.16ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간: - 대기 시간(waiting): 200.02ms - 연결 시간(connecting): 0.20ms - 송신 시간(sending): 1.60ms - 수신 시간(receiving): 26.27ms

## 4. GC-API 상관관계 분석

API 호출 중 발생한 GC: 190
GC 발생 API 요청 수: 1920
GC 미발생 API 요청 수: 3613
전체 API 대비 GC 발생 API 비율: 34.70%

응답 시간 비교: - GC 발생 API 평균 응답 시간: 214.02ms - GC 미발생 API 평균 응답 시간: 141.47ms - 응답 시간 차이: 72.55ms - GC 영향 비율: 51.29%

백분위 응답 시간 비교: - GC 발생 API P95 응답 시간: 382.00ms - GC 미발생 API P95 응답 시간: 266.00ms

최소/최대 응답 시간 비교: - GC 발생 API 최소 응답 시간: 64.00ms - GC 미발생 API 최소 응답 시간: 56.00ms - GC 발생 API 최대 응답 시간: 541.00ms - GC 미발생 API 최대 응답 시간: 507.00ms

## 5. 효율성 지표

요청당 GC 발생 비율: 0.034339
요청당 메모리 회수량: 16.47MB
총 실행 시간 대비 GC 소요 시간 비율: 0.12%
TPSGC 발생 수: 4.79

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.96%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 73.13%

2회차

============================================
        GC-API 상관관계 분석 보고서
============================================

분석 시간: 2025-05-01 22:15:57
로그 파일: results\temp_optimized_case2_log.txt

## 1. GC 통계
GC 발생 횟수: 204
GC 소요 시간: 1232.83ms
평균 GC 시간: 6.04ms
최대 GC 일시 정지 시간: 15.26ms
총 회수 메모리량: 97935MB
평균 메모리 회수량: 480.07MB
테스트 기간: 134.16초당 GC 발생 수: 1.5206
분당 GC 발생 수: 91.24

GC 유형별 발생 횟수:
  - Young (Normal) (G1 Evacuation Pause): 204

## 2. API 통계 (GC 추출)
API 요청 수: 5964
API 실행 시간: 958458.00ms
평균 API 응답 시간: 160.71ms
최소 API 응답 시간: 56.00ms
최대 API 응답 시간: 476.00ms
테스트 기간: 139.94TPS(초당 트랜잭션): 42.62
P90 응답 시간: 275.00ms
P95 응답 시간: 305.00ms
P99 응답 시간: 360.00ms

API 상태 코드 분포:
  - 200: 5964

API 버전 분포:
  - optimized: 5964

## 3. K6 성능 지표
API 버전: optimized
총 요청 수: 5966
테스트 기간: 141.36TPS: 42.20
평균 응답 시간: 193.59ms
최소 응답 시간: 60.21ms
중간값 응답 시간: 168.12ms
최대 응답 시간: 621.01ms
P90 응답 시간: 348.59ms
P95 응답 시간: 380.83ms
P99 응답 시간: 456.81ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간:
  - 대기 시간(waiting): 187.78ms
  - 연결 시간(connecting): 0.02ms
  - 송신 시간(sending): 0.01ms
  - 수신 시간(receiving): 5.80ms

## 4. GC-API 상관관계 분석
API 호출 중 발생한 GC: 203
GC 발생 API 요청 수: 2308
GC 미발생 API 요청 수: 3656
전체 API 대비 GC 발생 API 비율: 38.70%

응답 시간 비교:
  - GC 발생 API 평균 응답 시간: 211.91ms
  - GC 미발생 API 평균 응답 시간: 128.38ms
  - 응답 시간 차이: 83.53ms
  - GC 영향 비율: 65.06%

백분위 응답 시간 비교:
  - GC 발생 API P95 응답 시간: 337.00ms
  - GC 미발생 API P95 응답 시간: 254.00ms

최소/최대 응답 시간 비교:
  - GC 발생 API 최소 응답 시간: 64.00ms
  - GC 미발생 API 최소 응답 시간: 56.00ms
  - GC 발생 API 최대 응답 시간: 476.00ms
  - GC 미발생 API 최대 응답 시간: 427.00ms

## 5. 효율성 지표
요청당 GC 발생 비율: 0.034205
요청당 메모리 회수량: 16.42MB
총 실행 시간 대비 GC 소요 시간 비율: 0.13%
TPSGC 발생 수: 4.79

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.97%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 83.01%

3회차

============================================

분석 시간: 2025-05-01 22:48:23
로그 파일: results\temp_optimized_case2_log.txt

## 1. GC 통계

GC 발생 횟수: 206
GC 소요 시간: 1211.27ms
평균 GC 시간: 5.88ms
최대 GC 일시 정지 시간: 14.77ms
총 회수 메모리량: 98884MB
평균 메모리 회수량: 480.02MB
테스트 기간: 130.93초당 GC 발생 수: 1.5733
분당 GC 발생 수: 94.40

GC 유형별 발생 횟수: - Young (Normal) (G1 Evacuation Pause): 206

## 2. API 통계 (GC 추출)

API 요청 수: 6018
API 실행 시간: 939859.00ms
평균 API 응답 시간: 156.17ms
최소 API 응답 시간: 56.00ms
최대 API 응답 시간: 468.00ms
테스트 기간: 140.02TPS(초당 트랜잭션): 42.98
P90 응답 시간: 264.00ms
P95 응답 시간: 293.00ms
P99 응답 시간: 342.83ms

API 상태 코드 분포: - 200: 6018

API 버전 분포: - optimized: 6018

## 3. K6 성능 지표

API 버전: optimized
총 요청 수: 6022
테스트 기간: 141.00TPS: 42.71
평균 응답 시간: 186.90ms
최소 응답 시간: 58.73ms
중간값 응답 시간: 157.76ms
최대 응답 시간: 588.91ms
P90 응답 시간: 334.36ms
P95 응답 시간: 366.93ms
P99 응답 시간: 431.38ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간: - 대기 시간(waiting): 181.11ms - 연결 시간(connecting): 0.02ms - 송신 시간(sending): 0.01ms - 수신 시간(receiving): 5.79ms

## 4. GC-API 상관관계 분석

API 호출 중 발생한 GC: 206
GC 발생 API 요청 수: 2268
GC 미발생 API 요청 수: 3750
전체 API 대비 GC 발생 API 비율: 37.69%

응답 시간 비교: - GC 발생 API 평균 응답 시간: 203.22ms - GC 미발생 API 평균 응답 시간: 127.72ms - 응답 시간 차이: 75.50ms - GC 영향 비율: 59.12%

백분위 응답 시간 비교: - GC 발생 API P95 응답 시간: 325.65ms - GC 미발생 API P95 응답 시간: 251.55ms

최소/최대 응답 시간 비교: - GC 발생 API 최소 응답 시간: 62.00ms - GC 미발생 API 최소 응답 시간: 56.00ms - GC 발생 API 최대 응답 시간: 468.00ms - GC 미발생 API 최대 응답 시간: 354.00ms

## 5. 효율성 지표

요청당 GC 발생 비율: 0.034231
요청당 메모리 회수량: 16.43MB
총 실행 시간 대비 GC 소요 시간 비율: 0.13%
TPSGC 발생 수: 4.79

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.93%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 83.56%

(4)Graph 버전

1회차

============================================
        GC-API 상관관계 분석 보고서
============================================

분석 시간: 2025-05-01 23:18:51
로그 파일: results\temp_graph_case2_log.txt

## 1. GC 통계
GC 발생 횟수: 179
GC 소요 시간: 1126.29ms
평균 GC 시간: 6.29ms
최대 GC 일시 정지 시간: 15.32ms
총 회수 메모리량: 104378MB
평균 메모리 회수량: 583.12MB
테스트 기간: 163.87초당 GC 발생 수: 1.0923
분당 GC 발생 수: 65.54

GC 유형별 발생 횟수:
  - Young (Normal) (G1 Evacuation Pause): 179

## 2. API 통계 (GC 추출)
API 요청 수: 6327
API 실행 시간: 725359.00ms
평균 API 응답 시간: 114.65ms
최소 API 응답 시간: 48.00ms
최대 API 응답 시간: 401.00ms
테스트 기간: 139.78TPS(초당 트랜잭션): 45.26
P90 응답 시간: 180.00ms
P95 응답 시간: 215.00ms
P99 응답 시간: 278.74ms

API 상태 코드 분포:
  - 200: 6327

API 버전 분포:
  - graph: 6327

## 3. K6 성능 지표
API 버전: graph
총 요청 수: 6332
테스트 기간: 141.07TPS: 44.89
평균 응답 시간: 130.26ms
최소 응답 시간: 51.82ms
중간값 응답 시간: 114.79ms
최대 응답 시간: 482.63ms
P90 응답 시간: 217.86ms
P95 응답 시간: 262.53ms
P99 응답 시간: 343.20ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간:
  - 대기 시간(waiting): 124.45ms
  - 연결 시간(connecting): 0.02ms
  - 송신 시간(sending): 0.02ms
  - 수신 시간(receiving): 5.79ms

## 4. GC-API 상관관계 분석
API 호출 중 발생한 GC: 177
GC 발생 API 요청 수: 1519
GC 미발생 API 요청 수: 4808
전체 API 대비 GC 발생 API 비율: 24.01%

응답 시간 비교:
  - GC 발생 API 평균 응답 시간: 146.33ms
  - GC 미발생 API 평균 응답 시간: 104.63ms
  - 응답 시간 차이: 41.69ms
  - GC 영향 비율: 39.85%

백분위 응답 시간 비교:
  - GC 발생 API P95 응답 시간: 261.00ms
  - GC 미발생 API P95 응답 시간: 188.00ms

최소/최대 응답 시간 비교:
  - GC 발생 API 최소 응답 시간: 54.00ms
  - GC 미발생 API 최소 응답 시간: 48.00ms
  - GC 발생 API 최대 응답 시간: 401.00ms
  - GC 미발생 API 최대 응답 시간: 351.00ms

## 5. 효율성 지표
요청당 GC 발생 비율: 0.028291
요청당 메모리 회수량: 16.50MB
총 실행 시간 대비 GC 소요 시간 비율: 0.16%
TPSGC 발생 수: 3.95

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.92%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 88.01%

2회차

============================================

분석 시간: 2025-05-01 23:28:49
로그 파일: results\temp_graph_case2_log.txt

## 1. GC 통계

GC 발생 횟수: 178
GC 소요 시간: 1119.48ms
평균 GC 시간: 6.29ms
최대 GC 일시 정지 시간: 14.17ms
총 회수 메모리량: 103796MB
평균 메모리 회수량: 583.12MB
테스트 기간: 138.06초당 GC 발생 수: 1.2893
분당 GC 발생 수: 77.36

GC 유형별 발생 횟수: - Young (Normal) (G1 Evacuation Pause): 178

## 2. API 통계 (GC 추출)

API 요청 수: 6276
API 실행 시간: 757451.00ms
평균 API 응답 시간: 120.69ms
최소 API 응답 시간: 48.00ms
최대 API 응답 시간: 347.00ms
테스트 기간: 139.91TPS(초당 트랜잭션): 44.86
P90 응답 시간: 195.00ms
P95 응답 시간: 223.00ms
P99 응답 시간: 278.00ms

API 상태 코드 분포: - 200: 6276

API 버전 분포: - graph: 6276

## 3. K6 성능 지표

API 버전: graph
총 요청 수: 6282
테스트 기간: 141.48TPS: 44.40
평균 응답 시간: 139.05ms
최소 응답 시간: 51.88ms
중간값 응답 시간: 120.13ms
최대 응답 시간: 477.37ms
P90 응답 시간: 240.61ms
P95 응답 시간: 271.25ms
P99 응답 시간: 349.31ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간: - 대기 시간(waiting): 132.84ms - 연결 시간(connecting): 0.02ms - 송신 시간(sending): 0.02ms - 수신 시간(receiving): 6.19ms

## 4. GC-API 상관관계 분석

API 호출 중 발생한 GC: 178
GC 발생 API 요청 수: 1649
GC 미발생 API 요청 수: 4627
전체 API 대비 GC 발생 API 비율: 26.27%

응답 시간 비교: - GC 발생 API 평균 응답 시간: 154.06ms - GC 미발생 API 평균 응답 시간: 108.80ms - 응답 시간 차이: 45.26ms - GC 영향 비율: 41.60%

백분위 응답 시간 비교: - GC 발생 API P95 응답 시간: 252.00ms - GC 미발생 API P95 응답 시간: 198.00ms

최소/최대 응답 시간 비교: - GC 발생 API 최소 응답 시간: 52.00ms - GC 미발생 API 최소 응답 시간: 48.00ms - GC 발생 API 최대 응답 시간: 347.00ms - GC 미발생 API 최대 응답 시간: 323.00ms

## 5. 효율성 지표

요청당 GC 발생 비율: 0.028362
요청당 메모리 회수량: 16.54MB
총 실행 시간 대비 GC 소요 시간 비율: 0.15%
TPSGC 발생 수: 3.97

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.90%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 86.80%

3회차

============================================
        GC-API 상관관계 분석 보고서
============================================

분석 시간: 2025-05-01 23:55:53
로그 파일: results\temp_graph_case2_log.txt

## 1. GC 통계
GC 발생 횟수: 179
GC 소요 시간: 1157.50ms
평균 GC 시간: 6.47ms
최대 GC 일시 정지 시간: 15.55ms
총 회수 메모리량: 104243MB
평균 메모리 회수량: 582.36MB
테스트 기간: 128.83초당 GC 발생 수: 1.3895
분당 GC 발생 수: 83.37

GC 유형별 발생 횟수:
  - Young (Normal) (G1 Evacuation Pause): 179

## 2. API 통계 (GC 추출)
API 요청 수: 6332
API 실행 시간: 713070.00ms
평균 API 응답 시간: 112.61ms
최소 API 응답 시간: 48.00ms
최대 API 응답 시간: 380.00ms
테스트 기간: 139.97TPS(초당 트랜잭션): 45.24
P90 응답 시간: 174.00ms
P95 응답 시간: 199.00ms
P99 응답 시간: 257.69ms

API 상태 코드 분포:
  - 200: 6332

API 버전 분포:
  - graph: 6332

## 3. K6 성능 지표
API 버전: graph
총 요청 수: 6337
테스트 기간: 141.44TPS: 44.80
평균 응답 시간: 127.80ms
최소 응답 시간: 51.37ms
중간값 응답 시간: 114.51ms
최대 응답 시간: 421.56ms
P90 응답 시간: 210.41ms
P95 응답 시간: 245.13ms
P99 응답 시간: 325.93ms
실패율: 0.00%
최대 가상 사용자 수: 100

HTTP 요청 상세 시간:
  - 대기 시간(waiting): 122.03ms
  - 연결 시간(connecting): 0.02ms
  - 송신 시간(sending): 0.02ms
  - 수신 시간(receiving): 5.74ms

## 4. GC-API 상관관계 분석
API 호출 중 발생한 GC: 179
GC 발생 API 요청 수: 1556
GC 미발생 API 요청 수: 4776
전체 API 대비 GC 발생 API 비율: 24.57%

응답 시간 비교:
  - GC 발생 API 평균 응답 시간: 141.29ms
  - GC 미발생 API 평균 응답 시간: 103.27ms
  - 응답 시간 차이: 38.02ms
  - GC 영향 비율: 36.81%

백분위 응답 시간 비교:
  - GC 발생 API P95 응답 시간: 234.25ms
  - GC 미발생 API P95 응답 시간: 183.00ms

최소/최대 응답 시간 비교:
  - GC 발생 API 최소 응답 시간: 55.00ms
  - GC 미발생 API 최소 응답 시간: 48.00ms
  - GC 발생 API 최대 응답 시간: 337.00ms
  - GC 미발생 API 최대 응답 시간: 380.00ms

## 5. 효율성 지표
요청당 GC 발생 비율: 0.028269
요청당 메모리 회수량: 16.46MB
총 실행 시간 대비 GC 소요 시간 비율: 0.16%
TPSGC 발생 수: 3.96

K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.92%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 88.12%

5. 결과 종합

(1)Grafana 결과

전체 버전

Case 2 전체 API (평균, P95, P99)
그림 4-5: Case 2 전체 API (평균, P95, P99)
  • 좌측부터 optimized, graph, pure, original 버전

    1000ms 확대 사진

    Case 2 일부 API (평균, P95, P99)
    그림 4-6: Case 2 일부 API (평균, P95, P99)
    • 좌측부터 optimized, graph
    • K6 thresholds 설정 : p(95)<600, p(99)<800

    P95 응답 속도

    Case 2 일부 API (P95)
    그림 4-7: Case 2 일부 API (P95)
    • 좌측부터 optimized, graph
    • K6 thresholds 설정 : p(95)<600

    P99 응답 속도

    Case 2 일부 API (P99)
    그림 4-8: Case 2 일부 API (P99)
    • 좌측부터 optimized, graph
    • K6 thresholds 설정 : p(99)<800

(2)

케이스 평균 데이터

GC 성능 지표

항목

original

pure

optimized

graph

GC 발생 횟수129.00126.33200.00178.67
평균 GC 시간(ms)7.637.085.866.35
최대 GC 시간(ms)21.2315.8315.3315.01
총 회수 메모리량(MB)66077.6765678.3395987.00104139.00
평균 메모리 회수량(MB)512.23519.88479.93582.87

API 성능 지표

항목

original

pure

optimized

graph

API 요청 수856.331900.335838.336311.67
평균 API 응답 시간(ms)5542.222094.56161.18115.98
최소 API 응답 시간(ms)897.00330.0056.0048.00
최대 API 응답 시간(ms)15307.005222.00495.00376.00
API TPS5.7013.5241.7545.12
API P90 응답 시간(ms)11171.473887.53272.33183.00
API P95 응답 시간(ms)12470.974135.30307.00212.33
API P99 응답 시간(ms)13831.474482.05375.06271.48

GC-API 상관관계 지표

항목

original

pure

optimized

graph

API 호출 중 발생한 GC 수129.00126.33199.67178.00
GC 발생 API 요청 수835.331621.332165.331574.67
GC 미발생 API 요청 수21.00279.003673.004737.00
GC 발생 API 평균 응답 시간(ms)5655.942371.61209.72147.23
GC 미발생 API 평균 응답 시간(ms)1006.74485.23132.52105.57
GC 발생 API 비율(%)97.5585.3237.0324.95
GC 영향 비율(%)462.36388.7858.4939.42

K6 성능 지표

항목

original

pure

optimized

graph

K6 TPS5.6713.4141.4044.70
가상 사용자 최대100.00100.00100.00100.00
K6 평균 응답 시간(ms)8303.222896.15202.79132.37
K6 최소 응답 시간(ms)78.6684.9859.6551.69
K6 중간값 응답 시간(ms)8158.442935.91169.84116.48
K6 최대 응답 시간(ms)23090.907473.611180.61460.52
K6 P90 응답 시간(ms)14824.495131.80365.67222.96
K6 P95 응답 시간(ms)15056.755220.48413.24259.64
K6 P99 응답 시간(ms)15311.565445.12557.78339.48
실패율(%)0.000.000.000.00

효율성 지표

항목

original

pure

optimized

graph

요청당 GC 발생 비율0.150.070.030.03
요청당 메모리 회수량(MB)77.1634.5616.4416.50
총 실행 시간 대비 GC 소요 시간 비율(%)0.020.020.130.16

다음 페이지로 이동 (4-3. 테스트 결과 3)