Skip to content

[EPIC] 프로젝트 조회 API 캐시 전략 최적화 #204

@softmoca

Description

@softmoca

🔗 Related Issue

  • (없음 — 최상위 Epic)

🔗 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 인프라

  • EC2에서 Docker 컨테이너로 운영

📋 목표(What)

  • 5가지 캐시 시나리오별 정량적 성능 데이터 확보 (응답시간 P50/P95/P99, 처리량 RPS, 캐시 히트율, 외부 API 호출 횟수)
  • Micrometer 기반 캐시 메트릭 계측 인프라 구축
  • k6 부하 테스트 자동화 스크립트 작성
  • Redis 기반 CacheService 구현체 추가 및 프로파일별 전환
  • Lambda 환경에서 로컬 캐시 한계를 수치로 증명
  • 전체 시나리오 비교 결과를 포트폴리오용으로 정리

📊 진행 상황

  • #이슈번호 — [FEAT] Micrometer 캐시 메트릭 계측 추가 (대기)
  • #이슈번호 — [FEAT] k6 부하 테스트 스크립트 작성 (대기)
  • #이슈번호 — [PERF] 캐시 미적용 상태 성능 측정 (Baseline) (대기)
  • #이슈번호 — [PERF] Caffeine 로컬 캐시 성능 측정 (EC2) (대기)
  • #이슈번호 — [PERF] Lambda + Caffeine 캐시 성능 측정 (대기)
  • #이슈번호 — [FEAT] Redis 기반 CacheService 구현 (대기)
  • #이슈번호 — [PERF] Lambda + Redis 캐시 최종 성능 측정 (대기)

📊 예상 결과 테이블

시나리오 환경 캐시 P50 P95 RPS 외부 API 호출/100req 캐시 히트율
① Baseline EC2 없음 ? ? ? 100 0%
② 현재 EC2 Caffeine ? ? ? ~1 ~99%
Lambda 없음 ? ? ? 100 0%
Lambda Caffeine ? ? ? ? ?
⑤ 최종 Lambda Redis ? ? ? ~1 ~99%

④번의 캐시 히트율이 ②번 대비 얼마나 하락하는지가 이 Epic의 핵심 증명 포인트

📚 참고 자료

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions