Skip to content

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

@rimeir

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

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions