간단한 소셜 로그인 방법 설명!
Refresh Token을 테이블에 저장하면 안될까?
물론 가능하지만 토큰 관리 관점에서 Redis를 사용했을 때의 이점이 많다.
Redis는 인메모리 기법을 사용한다.
항목 | RDB | Redis |
---|---|---|
속도 | 디스크 기반. 토큰 확인/삭제 쿼리 실행 시간 있음 | 인메모리. O(1) 수준의 빠른 읽기/쓰기 |
TTL 지원 | 별도 배치 작업이나 수동 컬럼 검사 필요 | 기본 기능으로 TTL 자동 만료 처리 가능 |
스케일링 | 부하 증가 시 성능 저하 | 고속 캐시 시스템. 수평 확장(Redis 클러스터와 같은 서버를 추가, key 기반 분산 처리가 잘 되어 있음) |
복잡성 | SQL JOIN, 인덱스 설계 등 구조 복잡도 ↑ | 단순한 key-value 구조, 관리 쉬움 |
자원 효율성 | 불필요한 만료 토큰도 계속 저장됨 | TTL 지나면 자동 삭제, 공간 효율 ↑ |
1. 로그인/인증 요청이 많은 서비스
2. 토큰 만료가 자동으로 필요한 서비스
3. 보안 정책에 따라 빠르게 Token 무효화가 필요한 경우
4. 수많은 사용자 / 다중 디바이스 로그인 환경
refresh:userId:deviceId
처럼 구성이 가능함! → 조회, 삭제, 갱신이 빠르고 편리결론
Redis를 써야만 구현 가능한 것은 아니지만, 사용 시 훨씬 효율적이다.
Redis를 캐시가 아닌 상태 저장소 측면으로 활용하는 것인데, 이를 통해
> 고속 응답 + 자동 만료 + 부하의 분산 + 유연한 구조 < 를 갖춘 토큰 시스템 구현이 가능하다.