🔗 Related Issue
🔗 Related PR
- #이슈1-PR — Micrometer 캐시 메트릭 계측 추가
- #이슈2-PR — k6 부하 테스트 스크립트 작성
- #이슈3-PR — 캐시 미적용 Baseline 성능 측정
- #이슈4-PR — Caffeine 로컬 캐시 성능 측정 (EC2)
- #이슈5-PR — Lambda + Caffeine 캐시 성능 측정
- #이슈6-PR — Redis 기반 CacheService 구현
- #이슈7-PR — Lambda + Redis 캐시 최종 성능 측정
🎯 개요
프로젝트 조회 API(GET /projects)는 Playground 외부 API를 커서 기반 페이지네이션으로 호출하여 전체 프로젝트 목록을 가져온다.
현재 EC2 환경에서 Caffeine 로컬 캐시(TTL 24시간)를 적용하여 외부 API 호출을 최소화하고 있지만,
Lambda 마이그레이션 이후에는 인스턴스가 요청마다 생성/소멸될 수 있어 로컬 캐시의 히트율이 급격히 하락할 것으로 예상된다.
이 Epic은 다음 흐름을 정량적으로 증명하고, 최종적으로 Redis 외부 캐시를 도입하는 것을 목표로 한다:
① 캐시 없음 → ② Caffeine (EC2) → ③ Lambda + 캐시 없음 → ④ Lambda + Caffeine → ⑤ Lambda + Redis
현재 캐시 구조
- 캐시 라이브러리: Caffeine (In-Memory)
- 캐시 대상:
PlaygroundServiceImpl.fetchProjectsWithCache() — 전체 프로젝트 목록
- TTL: 24시간, maxSize 100
- 문제점: Lambda의 stateless 특성으로 인스턴스 간 캐시 공유 불가
Redis 인프라
📋 목표(What)
📊 진행 상황
📊 예상 결과 테이블
| 시나리오 |
환경 |
캐시 |
P50 |
P95 |
RPS |
외부 API 호출/100req |
캐시 히트율 |
| ① Baseline |
EC2 |
없음 |
? |
? |
? |
100 |
0% |
| ② 현재 |
EC2 |
Caffeine |
? |
? |
? |
~1 |
~99% |
| ③ |
Lambda |
없음 |
? |
? |
? |
100 |
0% |
| ④ |
Lambda |
Caffeine |
? |
? |
? |
? |
? |
| ⑤ 최종 |
Lambda |
Redis |
? |
? |
? |
~1 |
~99% |
④번의 캐시 히트율이 ②번 대비 얼마나 하락하는지가 이 Epic의 핵심 증명 포인트
📚 참고 자료
🔗 Related Issue
🔗 Related PR
🎯 개요
프로젝트 조회 API(
GET /projects)는 Playground 외부 API를 커서 기반 페이지네이션으로 호출하여 전체 프로젝트 목록을 가져온다.현재 EC2 환경에서 Caffeine 로컬 캐시(TTL 24시간)를 적용하여 외부 API 호출을 최소화하고 있지만,
Lambda 마이그레이션 이후에는 인스턴스가 요청마다 생성/소멸될 수 있어 로컬 캐시의 히트율이 급격히 하락할 것으로 예상된다.
이 Epic은 다음 흐름을 정량적으로 증명하고, 최종적으로 Redis 외부 캐시를 도입하는 것을 목표로 한다:
현재 캐시 구조
PlaygroundServiceImpl.fetchProjectsWithCache()— 전체 프로젝트 목록Redis 인프라
📋 목표(What)
CacheService구현체 추가 및 프로파일별 전환📊 진행 상황
[FEAT] Micrometer 캐시 메트릭 계측 추가(대기)[FEAT] k6 부하 테스트 스크립트 작성(대기)[PERF] 캐시 미적용 상태 성능 측정 (Baseline)(대기)[PERF] Caffeine 로컬 캐시 성능 측정 (EC2)(대기)[PERF] Lambda + Caffeine 캐시 성능 측정(대기)[FEAT] Redis 기반 CacheService 구현(대기)[PERF] Lambda + Redis 캐시 최종 성능 측정(대기)📊 예상 결과 테이블
📚 참고 자료
CacheConfig.java,CacheType.javaPlaygroundServiceImpl.fetchProjectsWithCache()