Hyun's Wonderwall

[BookDuck] 프로젝트 리팩토링 - (2) Grafana k6 세팅, Redis 캐시 사용 구현 및 Key Prefix 설계 리팩토링 본문

활동/프로젝트

[BookDuck] 프로젝트 리팩토링 - (2) Grafana k6 세팅, Redis 캐시 사용 구현 및 Key Prefix 설계 리팩토링

Hyun_! 2025. 7. 9. 18:09

이전 글: https://hereishyun.tistory.com/206

[BookDuck] 프로젝트 리팩토링 - (1) 부하 테스트 도구 선택(JMeter, k6), 외부 API Rate Limit 문제 해결 방

2024년 9~12월 동안 EFUB 4기에서 학기 중 프로젝트로 BookDuck 프로젝트를 진행했었다. 나는 백엔드이고, 백엔드는 3명이 맡아 개발했다. 프로젝트 목표가 실사용자가 존재하는 서비스였는데, 목표가

hereishyun.tistory.com


7/9 회의에서 한 일

  • 부하 테스트 도구 Grafana k6 세팅
  • Redis Cache 사용 위한 세팅 및 개발

부하 테스트 도구 Grafana k6 세팅

세팅 과정은 아래 글에 정리했다! https://hereishyun.tistory.com/207

부하 테스트 도구 k6 설치 & Grafana k6으로 시각화

이전 글: https://hereishyun.tistory.com/206 [BookDuck] 프로젝트 리팩토링 - (1) 부하 테스트 도구 선택(JMeter, k6), 외부 API Rate Limit 문제 해결 방2024년 9~12월 동안 EFUB 4기에서 학기 중 프로젝트로 BookDuck 프로

hereishyun.tistory.com

 

Redis Cache 사용 위한 세팅 및 개발

1. 목표 수립

  • 문제: Google Books API Rate Limit으로 인한 요청 실패 대응방안 수립
  • 목표: Google Books API 결과 캐싱 추가 + Lazy Update 적용
    • 기존에 Redis를 어떻게 사용하고 있었는지 분석 후 새 기능 추가 필요

2. 기존의 Redis 사용 방식 (리프레시토큰 저장/조회/삭제)

  • RedisConfig: RedisTemplate<String, Object>를 Bean으로 등록, JSON 직렬화 방식으로 Redis를 사용
  • RedisService: setValuesWithTimeout, getValues, deleteValues 등 기본적인 CRUD를 제공
  • 리프레시 토큰 저장: JwtUtil.generateRefreshToken()에서 리프레시 토큰 생성, redisService.setValuesWithTimeout(email, refreshToken, 7일)로 Redis에 저장
  • 리프레시 토큰 조회: redisService.getValues(email)로 Redis에서 리프레시 토큰을 조회
  • 리프레시 토큰 삭제: 로그아웃, 회원탈퇴, 토큰 재발급 시 redisService.deleteValues(email)로 Redis에서 해당 키 삭제

3. 개선 방향 수립

  • RedisService의 메서드를 재활용, Google Books API 결과 캐싱 추가
    • GoogleBooksApiService에 캐시 조회 → 없으면 API 호출 및 캐시 저장
  • Redis를 다용도로 사용 -> 캐시 key의 prefix 포맷 설계: [서비스명 또는 도메인]:[기능명]:[식별자] 구조
    • 리프레시 토큰: auth:refresh_token:{이메일}
    • Google Books API 검색 결과: googlebooks:search_cache:{키워드}
  • 검색의 Google Books API 응답 결과를 Redis에 TTL=12시간으로 캐싱. (캐시 만료 전에는 API 호출 x, Redis에서 바로 반환)
  • Google Books API 호출 실패 시 커스텀 에러 메시지 제공 (fallback으로 이전 검색 결과나 캐싱된 데이터 반환하지 x)

4. PR
https://github.com/MoneyMakersClub/mmc-backend/pull/236

[Feat] Google Books API 호출에 대한 Redis 캐싱 추가, Key Prefix 전략 추가 by seohyun-lee · Pull Request #236 · Mo

구현 기능 feat: Google Books API 검색 결과 캐시 활용 개발 글 정리: https://hereishyun.tistory.com/208 fix: Java Compiler args에 -parameters 추가 Spring 3.2 arg0, arg1 에러 해결 (컴파일러가 자동으로 바이트코드를 파싱

github.com

 
다음 목표는 이전 계획대로 튜플이 1개만 있어야 하는 경우 점검, 필요한 부분에 락 적용하기!