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

- Name
- River
목차 페이지로 이동
데이터 규모에 따른 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, 13 외 989개...
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, 13 외 490개...
#### 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, 13 외 490개...
#### 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, 13 외 989개...
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, 13 외 490개...
#### 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, 13 외 490개...
#### 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 테스트를 로컬에서 하는 경우 메모리 부족이 생길 수 있다.
- 대량의 쿼리가 발생 ⇒ P6Spy의 로깅 처리 ⇒ CPU, 메모리 사용 증가 및 로그 파일 생성으로 디스크 I/O 증가
- 로깅 작업 자체도 많은 임시 객체를 생성한다. ⇒ JVM Heap에 영향을 준다.
- 디스크 I/O 증가는 CPU, 메모리 등 전반적으로 영향을 많이 준다.
- 소규모 데이터에선 영향이 크지 않다.
- K6 시나리오
- 사용자 로그인
- 시작 : 5명의 동시 사용자로 10초간 진행
- 단계적 증가 : 20명 → 50명 → 100명으로 각 30초씩 증가
- 최대 부하 유지 : 100명의 사용자로 30초간 유지
- 마무리 : 5명으로 감소하여 10초간 진행
(2)
Original 버전
1회차
요약 ========================================================= 총 요청 수: 854 테스트 기간:
150.8466875초 TPS (초당 트랜잭션): 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.6044726초
TPS (초당 트랜잭션): 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.6222918초 TPS (초당 트랜잭션): 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.0607558초
TPS (초당 트랜잭션): 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.9498751초
TPS (초당 트랜잭션): 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.6948385초
TPS (초당 트랜잭션): 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.8580007초 TPS (초당 트랜잭션): 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.3583998초
TPS (초당 트랜잭션): 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.0015135초 TPS (초당 트랜잭션): 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.0655947초
TPS (초당 트랜잭션): 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.4776275초
TPS (초당 트랜잭션): 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.440287초
TPS (초당 트랜잭션): 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.89초
TPS(초당 트랜잭션): 5.69
P90 응답 시간: 10736.80ms
P95 응답 시간: 12200.60ms
P99 응답 시간: 13752.52ms
API 상태 코드 분포: - 200: 853
API 버전 분포: - original: 853
## 3. K6 성능 지표
API 버전: original
총 요청 수: 854
테스트 기간: 150.85초
TPS: 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%
TPS당 GC 발생 수: 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.25초
TPS(초당 트랜잭션): 5.74
P90 응답 시간: 10843.20ms
P95 응답 시간: 12516.50ms
P99 응답 시간: 13969.80ms
API 상태 코드 분포:
- 200: 863
API 버전 분포:
- original: 863
## 3. K6 성능 지표
API 버전: original
총 요청 수: 864
테스트 기간: 151.60초
TPS: 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%
TPS당 GC 발생 수: 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.33초
TPS(초당 트랜잭션): 5.67
P90 응답 시간: 11934.40ms
P95 응답 시간: 12695.80ms
P99 응답 시간: 13772.08ms
API 상태 코드 분포: - 200: 853
API 버전 분포: - original: 853
## 3. K6 성능 지표
API 버전: original
총 요청 수: 855
테스트 기간: 151.62초
TPS: 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%
TPS당 GC 발생 수: 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.60초
TPS(초당 트랜잭션): 13.49
P90 응답 시간: 3972.40ms
P95 응답 시간: 4279.60ms
P99 응답 시간: 4753.40ms
API 상태 코드 분포:
- 200: 1897
API 버전 분포:
- pure: 1897
## 3. K6 성능 지표
API 버전: pure
총 요청 수: 1899
테스트 기간: 142.06초
TPS: 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%
TPS당 GC 발생 수: 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.60초
TPS(초당 트랜잭션): 13.48
P90 응답 시간: 3864.20ms
P95 응답 시간: 4121.30ms
P99 응답 시간: 4296.06ms
API 상태 코드 분포: - 200: 1895
API 버전 분포: - pure: 1895
## 3. K6 성능 지표
API 버전: pure
총 요청 수: 1898
테스트 기간: 141.95초
TPS: 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%
TPS당 GC 발생 수: 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.53초
TPS(초당 트랜잭션): 13.58
P90 응답 시간: 3826.00ms
P95 응답 시간: 4005.00ms
P99 응답 시간: 4396.68ms
API 상태 코드 분포:
- 200: 1909
API 버전 분포:
- pure: 1909
## 3. K6 성능 지표
API 버전: pure
총 요청 수: 1910
테스트 기간: 141.69초
TPS: 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%
TPS당 GC 발생 수: 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.55초
TPS(초당 트랜잭션): 39.65
P90 응답 시간: 278.00ms
P95 응답 시간: 323.00ms
P99 응답 시간: 422.36ms
API 상태 코드 분포: - 200: 5533
API 버전 분포: - optimized: 5533
## 3. K6 성능 지표
API 버전: optimized
총 요청 수: 5535
테스트 기간: 140.86초
TPS: 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%
TPS당 GC 발생 수: 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.94초
TPS(초당 트랜잭션): 42.62
P90 응답 시간: 275.00ms
P95 응답 시간: 305.00ms
P99 응답 시간: 360.00ms
API 상태 코드 분포:
- 200: 5964
API 버전 분포:
- optimized: 5964
## 3. K6 성능 지표
API 버전: optimized
총 요청 수: 5966
테스트 기간: 141.36초
TPS: 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%
TPS당 GC 발생 수: 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.02초
TPS(초당 트랜잭션): 42.98
P90 응답 시간: 264.00ms
P95 응답 시간: 293.00ms
P99 응답 시간: 342.83ms
API 상태 코드 분포: - 200: 6018
API 버전 분포: - optimized: 6018
## 3. K6 성능 지표
API 버전: optimized
총 요청 수: 6022
테스트 기간: 141.00초
TPS: 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%
TPS당 GC 발생 수: 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.78초
TPS(초당 트랜잭션): 45.26
P90 응답 시간: 180.00ms
P95 응답 시간: 215.00ms
P99 응답 시간: 278.74ms
API 상태 코드 분포:
- 200: 6327
API 버전 분포:
- graph: 6327
## 3. K6 성능 지표
API 버전: graph
총 요청 수: 6332
테스트 기간: 141.07초
TPS: 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%
TPS당 GC 발생 수: 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.91초
TPS(초당 트랜잭션): 44.86
P90 응답 시간: 195.00ms
P95 응답 시간: 223.00ms
P99 응답 시간: 278.00ms
API 상태 코드 분포: - 200: 6276
API 버전 분포: - graph: 6276
## 3. K6 성능 지표
API 버전: graph
총 요청 수: 6282
테스트 기간: 141.48초
TPS: 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%
TPS당 GC 발생 수: 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.97초
TPS(초당 트랜잭션): 45.24
P90 응답 시간: 174.00ms
P95 응답 시간: 199.00ms
P99 응답 시간: 257.69ms
API 상태 코드 분포:
- 200: 6332
API 버전 분포:
- graph: 6332
## 3. K6 성능 지표
API 버전: graph
총 요청 수: 6337
테스트 기간: 141.44초
TPS: 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%
TPS당 GC 발생 수: 3.96
K6 결과 비교:
로그 파싱 API 요청 / K6 총 요청 비율: 99.92%
로그 파싱 평균 응답 시간 / K6 평균 응답 시간 비율: 88.12%
5. 결과 종합
(1)Grafana 결과
전체 버전

그림 4-5: Case 2 전체 API (평균, P95, P99)
좌측부터 optimized, graph, pure, original 버전
1000ms 확대 사진
그림 4-6: Case 2 일부 API (평균, P95, P99)- 좌측부터 optimized, graph
- K6 thresholds 설정 : p(95)<600, p(99)<800
P95 응답 속도
그림 4-7: Case 2 일부 API (P95)- 좌측부터 optimized, graph
- K6 thresholds 설정 : p(95)<600
P99 응답 속도
그림 4-8: Case 2 일부 API (P99)- 좌측부터 optimized, graph
- K6 thresholds 설정 : p(99)<800
(2)
케이스 평균 데이터
GC 성능 지표
항목 | original | pure | optimized | graph |
|---|---|---|---|---|
| GC 발생 횟수 | 129.00 | 126.33 | 200.00 | 178.67 |
| 평균 GC 시간(ms) | 7.63 | 7.08 | 5.86 | 6.35 |
| 최대 GC 시간(ms) | 21.23 | 15.83 | 15.33 | 15.01 |
| 총 회수 메모리량(MB) | 66077.67 | 65678.33 | 95987.00 | 104139.00 |
| 평균 메모리 회수량(MB) | 512.23 | 519.88 | 479.93 | 582.87 |
API 성능 지표
항목 | original | pure | optimized | graph |
|---|---|---|---|---|
| API 요청 수 | 856.33 | 1900.33 | 5838.33 | 6311.67 |
| 평균 API 응답 시간(ms) | 5542.22 | 2094.56 | 161.18 | 115.98 |
| 최소 API 응답 시간(ms) | 897.00 | 330.00 | 56.00 | 48.00 |
| 최대 API 응답 시간(ms) | 15307.00 | 5222.00 | 495.00 | 376.00 |
| API TPS | 5.70 | 13.52 | 41.75 | 45.12 |
| API P90 응답 시간(ms) | 11171.47 | 3887.53 | 272.33 | 183.00 |
| API P95 응답 시간(ms) | 12470.97 | 4135.30 | 307.00 | 212.33 |
| API P99 응답 시간(ms) | 13831.47 | 4482.05 | 375.06 | 271.48 |
GC-API 상관관계 지표
항목 | original | pure | optimized | graph |
|---|---|---|---|---|
| API 호출 중 발생한 GC 수 | 129.00 | 126.33 | 199.67 | 178.00 |
| GC 발생 API 요청 수 | 835.33 | 1621.33 | 2165.33 | 1574.67 |
| GC 미발생 API 요청 수 | 21.00 | 279.00 | 3673.00 | 4737.00 |
| GC 발생 API 평균 응답 시간(ms) | 5655.94 | 2371.61 | 209.72 | 147.23 |
| GC 미발생 API 평균 응답 시간(ms) | 1006.74 | 485.23 | 132.52 | 105.57 |
| GC 발생 API 비율(%) | 97.55 | 85.32 | 37.03 | 24.95 |
| GC 영향 비율(%) | 462.36 | 388.78 | 58.49 | 39.42 |
K6 성능 지표
항목 | original | pure | optimized | graph |
|---|---|---|---|---|
| K6 TPS | 5.67 | 13.41 | 41.40 | 44.70 |
| 가상 사용자 최대 | 100.00 | 100.00 | 100.00 | 100.00 |
| K6 평균 응답 시간(ms) | 8303.22 | 2896.15 | 202.79 | 132.37 |
| K6 최소 응답 시간(ms) | 78.66 | 84.98 | 59.65 | 51.69 |
| K6 중간값 응답 시간(ms) | 8158.44 | 2935.91 | 169.84 | 116.48 |
| K6 최대 응답 시간(ms) | 23090.90 | 7473.61 | 1180.61 | 460.52 |
| K6 P90 응답 시간(ms) | 14824.49 | 5131.80 | 365.67 | 222.96 |
| K6 P95 응답 시간(ms) | 15056.75 | 5220.48 | 413.24 | 259.64 |
| K6 P99 응답 시간(ms) | 15311.56 | 5445.12 | 557.78 | 339.48 |
| 실패율(%) | 0.00 | 0.00 | 0.00 | 0.00 |
효율성 지표
항목 | original | pure | optimized | graph |
|---|---|---|---|---|
| 요청당 GC 발생 비율 | 0.15 | 0.07 | 0.03 | 0.03 |
| 요청당 메모리 회수량(MB) | 77.16 | 34.56 | 16.44 | 16.50 |
| 총 실행 시간 대비 GC 소요 시간 비율(%) | 0.02 | 0.02 | 0.13 | 0.16 |
다음 페이지로 이동 (4-3. 테스트 결과 3)