Skip to content

[Feature] 토큰 관리 Redis 도입 #75

Description

@rimeir

🚀 기능 설명

  • 토큰 관리 방법인 Refresh Token 저장(토큰 재발급), Access Token 블랙리스트 조회(로그아웃)를 MySQL 대신 Redis를 활용하여 처리하도록 개선합니다.

🌟 구현 상세 내용

  • 현재는 Access Token 블랙리스트와 Refresh Token을 모두 MySQL에 저장하고 있으며, 이로 인해 인증 요청마다 DB 조회/갱신 쿼리가 발생하고 있습니다.
  • 이를 Redis로 전환함으로써 아래와 같은 방식으로 개선합니다.

Redis 적용

  • Access Token 블랙리스트 처리
    • Redis key: blacklist:{accessTokenHash} (SHA-256 해시 후 key로 사용)
    • Redis value: Refresh Token 문자열
    • TTL: 해당 Access Token의 남은 TTL 만큼
    • 불필요한 필드는 버리고, Redis의 TTL 기능 활용
    • 토큰 만료 시간만큼 TTL 설정 하여 만료 시 자동 삭제
  • Refresh Token 저장 및 검증
    • Redis key: refresh:{userId}
    • Redis value: 의미 없는 값 (예: "1")
    • TTL: 해당 Refresh Token 만료 시각까지 설정
    • Rotation 적용: 토큰 재발급 시, 새로운 Refresh Token으로 교체하고 TTL 재설정

🎯 기대 효과

  • 조회 성능 향상: Redis는 In-memory 구조로 MySQL 대비 빠른 키-값 조회 가능, 인증 필터 병목 해소
  • 토큰 자동 만료 처리: EXPIRE로 TTL 관리가 가능해 별도 만료 정리 작업이 필요 없음
  • 서버 부하 감소: 불필요한 MySQL I/O 감소로 전체 시스템 부하 개선

✅ To Do

  • Refresh Token 저장 로직 Redis 기반으로 리팩터링
  • Access Token 블랙리스트 등록/조회 로직 Redis로 리팩터링
  • 테스트 및 토큰 만료/재발급 시나리오 검증

Metadata

Metadata

Assignees

Labels

Fields

No fields configured for Feature.

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions