Skip to content

Top10 캐싱 개선 검증 실험 #81

@kimseonj

Description

@kimseonj

배경

PR #80 에서 Top10 쿼리 기간 제한(최근 2개월) 및 Redis 장애 시 DB fallback을 추가했다.
배포 후 아래 두 가지 실험으로 개선 효과를 검증해야 한다.


실험 1: k6 부하 테스트 - cache miss 시 latency 감소 확인

목적

Top10 쿼리에 기간 제한을 추가하여 cache miss 시 DB 쿼리 시간이 단축되었는지 확인한다.
단건 쿼리 기준 5,695ms → 2,054ms(64% 감소)가 부하 환경에서도 유효한지 검증.

실험 조건

항목
도구 k6
VUs 50
지속 시간 5분
스크립트 scripts/k6/baseline.js

실행 명령어

K6_WEB_DASHBOARD=true \
K6_WEB_DASHBOARD_EXPORT=./top10/after-date-filter.html \
k6 run --env BASE_URL=http://jongju.duckdns.org:8080 --env API_PREFIX=/api --env ACCESS_TOKEN=$ACCESS_TOKEN ./baseline.js

확인 포인트

  • get_top10_latency max 값이 이전(58s)보다 감소했는지
  • 초반 stampede로 인한 타임아웃 건수가 이전(40건)보다 감소했는지
  • Grafana Backend Latency에서 초반 스파이크 크기 비교

비교 기준 (이전 결과)

지표 이전 값
Top10 avg 315ms
Top10 max 58.01s
Top10 p95 27ms
타임아웃 40건 (0.22%)

실험 2: Redis 장애 시 DB fallback 확인

목적

Redis가 죽었을 때 Top10 API가 500 에러 대신 DB fallback으로 정상 응답하는지 확인한다.

실험 절차

# 1. Redis EC2에서 Redis 중지
docker stop redis

# 2. Top10 API 호출 (정상 응답이 와야 함)
curl -w "\nHTTP Status: %{http_code}\nTime: %{time_total}s\n" \
  http://jongju.duckdns.org:8080/api/posts/top10

# 3. 앱 로그에서 fallback 경고 확인
docker logs community-app --tail 20

# 4. Redis 재시작
docker start redis

# 5. 다시 API 호출하여 캐시 정상 동작 확인
curl -w "\nHTTP Status: %{http_code}\nTime: %{time_total}s\n" \
  http://jongju.duckdns.org:8080/api/posts/top10

확인 포인트

  • Redis 중지 상태에서 HTTP 200 응답 반환
  • 앱 로그에 Redis 조회 실패 - DB fallback 경고 출력
  • Redis 재시작 후 캐시 정상 동작 복귀 (응답 시간 ms 단위)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions