체육관 검색 API를 비교해 보기위해서 API를 두가지 v1(캐시)와 v2(인메모리)를 만들어서 성능 비교
API엔드포인트 : http://localhost:8080/search/gyms/v1 와 (...)v2
검색 키워드 : "홍대", "강남" 각각 검색
측정 지표 : 개별 요청 응답 시간






실수로 인한 누락
실수로 인한 누락
첫번째 검색과 두번째 검색의 기준으로 비교를 해보고 이두값을 최댓값과 최솟값을 넣는다고 가정을 했을 때 유의미한 수치 비교가 아닌거 같다.






실수로 인한 누락
실수로 인한 누락
홍대키워드와 같은 사유로 누락이 되었지만 유의미한 수치가 아님.
이 두가지를 표로 만들어본다면
| 구분 | v1 (캐시) | v2 (인메모리) | v1이 v2보다 빠른 정도 |
|---|---|---|---|
| 1차 | 8.49s | 8.43s | v2가 0.7% 빠름 |
| 2차 | 45ms | 4.70s | v1이 99.0% 빠름 |
| 최솟값 | 24ms | 4.70s | v1이 99.5% 빠름 |
| 최댓값 | 30ms | 8.43s | v1이 99.6% 빠름 |
| 평균 | 4.27초 | 6.57초 | v1이 35% 빠름 |
| 구분 | v1 (캐시) | v2 (인메모리) | v1이 v2보다 빠른 정도 |
|---|---|---|---|
| 1차 | 10.86s | 8.52s | v2가 27.5% 빠름 |
| 2차 | 40ms | 4.19s | v1이 99.0% 빠름 |
| 최솟값 | 20ms | 4.19s | v1이 99.5% 빠름 |
| 최댓값 | 36ms | 8.52s | v1이 99.6% 빠름 |
| 평균 | 5.45초 | 6.36초 | v1이 14.2% 빠름 |
동시 사용자 : 1500 명
총 요청 수 : 1500 회
측정 지표 : 평균 응답시간, 처리량, 백분위수 성능


| 지표 항목 | 수치 | 설명 |
|---|---|---|
| 평균 응답시간 | 3,737ms | 대용량 데이터 처리 고려 시 우수 |
| 중간값 (Median) | 3,454ms | 안정적인 중앙값 |
| 90% Line | 5,392ms | 90% 사용자가 5.4초 이내 응답 |
| 95% Line | 6,242ms | 95% 사용자가 6.2초 이내 응답 |
| 99% Line | 7,021ms | 거의 모든 사용자가 7초 이내 응답 |
| 최소값 | 580ms | 최적 조건에서의 응답 시간 |
| 최대값 | 8,453ms | 최악 조건에서도 8.5초 이내 응답 |
| 에러율 | 0.00% | 500만 건에서도 완벽한 안정성 |
| 처리량 (TPS) | 78.4/sec | 초당 78건의 검색 요청 처리 가능 |


| 지표 항목 | 수치 | 설명 |
|---|---|---|
| 평균 응답시간 | 65,101ms | 대용량 데이터 처리에 부적합 |
| 중간값 (Median) | 67,564ms | 일관되게 느린 성능 |
| 90% Line | 86,858ms | 90% 사용자가 1분 30초 이상 대기 |
| 95% Line | 88,178ms | 거의 모든 사용자가 장시간 대기 |
| 99% Line | 91,894ms | 최악의 경우 1분 30초 이상 소요 |
| 최소값 | 6,698ms | 최선 조건에서도 6.7초 소요 |
| 최대값 | 93,901ms | 최악 시 94초, 사실상 타임아웃 수준 |
| 에러율 | 69.33% | 500만 건 처리 시 시스템 과부하 발생 |
| 처리량 (TPS) | 6.1/sec | 매우 낮은 초당 처리량 |
캐시 효율성
인메모리 시스템 한계
| 성능 지표 | v1 (캐시) | v2 (인메모리) | v1이 v2보다 우수한 정도 |
|---|---|---|---|
| 평균 응답시간 | 3,737ms | 65,101ms | 94.3% 빠름 |
| 처리량 (TPS) | 78.4/sec | 6.1/sec | 1,185% 높음 |
| 에러율 | 0.00% | 69.33% | 완벽한 안정성 |
캐시 방식 메모리 사용량 :
인메모리 방식 메모리 사용량 :
K6를 이용해서 캐시시스템만을 대상으로 웜업 후 최적 성능을 측정
키워드 : "강남", "홍대" 순서를 임의로 검색
성능 지표
| 지표 항목 | 수치 | 설명 |
|---|---|---|
| 평균 응답시간 | 22.25ms | 500만 건 중 실시간 검색 결과 |
| 최소 응답시간 | 11.97ms | 최적 조건에서의 검색 속도 |
| 중간값 (Median) | 19.1ms | 일반적인 검색 응답 시간 |
| 최대 응답시간 | 77.57ms | 최악 조건에서도 100ms 미만 |
| 90% Line | 32.48ms | 사용자 90%가 32ms 이내 응답 체험 |
| 95% Line | 45.58ms | 거의 모든 사용자가 50ms 이내 응답 |
| 실패율 | 0.00% (0/100) | 대용량 데이터에서도 100% 안정성 |
| 요청 처리량 | 9.749395/s | 초당 약 10건의 검색 처리 |
실행 및 네트워크 성능
| 지표 항목 | 수치 | 설명 |
|---|---|---|
| 실행 지속시간 평균 | 1.02s | 안정적인 처리 시간 |
| 실행 지속시간 중간값 | 1.01s | 일관된 성능 |
| 90% Line | 1.03s | 90% 요청에 대한 일관된 처리 시간 |
| 95% Line | 1.05s | 95% 요청에 대한 예측 가능한 응답 |
| 총 반복 수행 | 100회 | 모든 요청 성공 |
| 데이터 수신량 | 566 kB (55 kB/s) | 효율적인 검색 결과 전송 |
| 데이터 송신량 | 12 kB (1.2 kB/s) | 최소한의 요청 데이터 |
K6 테스트 목적과 결과
네트워크 효율성 -> 캐시 웜업 후 성능
핵심 성능 지표 비교 (캐시 기준)
| 테스트 시나리오 | v1 (캐시) 성능 | v2 (인메모리) 성능 | v1이 v2보다 빠른 정도 |
|---|---|---|---|
| 개별 요청 (안정화 후) | 20-45ms | 4-8초 | 99% 빠름 |
| 고부하 (1,500 VU) | 3,737ms | 65,101ms | 94.3% 빠름 |
| 처리량 (TPS) | 78.4/sec | 6.1/sec | 1,185% 높음 |
| 에러율 | 0% | 69.33% | 완벽한 안정성 |
성능 패턴 분석
캐시 시스템의 특성
여기서 보여지는 것은 캐시 시스템을 너무 잘보여준다는 점
- 초기에는 캐시 미스로 느리지만, 캐시가 워밍업 된 후에는 압도적으로 빠른 성능을 보여줌
압도적인 성능 지표
으로 압도 적인 성능 차이를 보여준 다는 것을 확인
비즈니스 임팩트
인메모리 방식의 근본적 문제
따라서, 데이터량의 증가 및 많은 사용자 접속을 고려 해봤을 때 캐시 시스템이 확연히 좋다는 것을 확인