| 컬럼 이름 | 의미 |
|---|---|
| id | Refresh Token 레코드의 ID (PK, 식별자) / DB 안에서 row 식별용 |
| user_id | 어떤 유저의 RT인지 나타내는 사용자 ID |
| token_hash | 실제 Refresh Token 문자열 또는 그 해시 값 |
| jti | 이 토큰을 식별하는 고유 ID (JWT의 jti 클레임 값) / JWT Layer에서 토큰 식별용 |
| family_id | 동일 로그인/세션 계열에 속한 RT들을 묶기 위한 그룹 ID |
| expires_at | RT 만료 시각 |
| created_at | RT 발급 시각 |
| revoked | 로그아웃, 보안 이슈 등으로 강제 무효화된 상태인지 여부 |
장점
단점
/refresh 트래픽 증가 시 DB 부하가 커질 수 있음Refresh Token Rotation을 구현할 때, 서버 저장 방식은 크게 두 가지로 나눌 수 있습니다.
user_id | token_hash | expires_at
--------|------------|------------
1 | abc123 | 2025-01-07
user_id | token_hash | expires_at
--------|------------|------------
1 | xyz789 | 2025-01-07 ← token만 교체
RT 재발급 시 기존 row를 유지한 채, token_hash만 새로운 값으로 UPDATE 합니다.
단순하고 구현이 간편하지만, 토큰 추적이 불가능하다는 단점이 있습니다.