Skip to content

fix: refresh_token UK 위반 방지 — jti 추가 및 만료 토큰 정리 스케줄러#21

Merged
ThinkKat merged 2 commits intomainfrom
dev
Feb 27, 2026
Merged

fix: refresh_token UK 위반 방지 — jti 추가 및 만료 토큰 정리 스케줄러#21
ThinkKat merged 2 commits intomainfrom
dev

Conversation

@ThinkKat
Copy link
Copy Markdown
Owner

Summary

  • JwtTokenProvider.buildToken()jti(UUID) 추가 — 동일 사용자가 같은 1초 안에 재로그인해도 매번 고유한 토큰값 생성, refresh_token UK 위반 원천 차단
  • RefreshTokenRepository.deleteAllExpired() JPQL 쿼리 추가
  • UserCleanupScheduler에 매일 새벽 4시 만료 refresh token 정리 job 추가 (DB housekeeping)

Background

Phase 2 부하 테스트(S-3 AuthUser, 30 users) 중 간헐적 500 에러 발생.
원인: login()이 기존 토큰 DELETE 없이 INSERT만 수행 + jti 없어 동일 파라미터 시 동일 토큰 생성 → uk_refresh_token 위반.

실 서비스 재현 경로: 네트워크 단절 후 사용자 수동 재시도 (1초 이내).

Test plan

  • JwtTokenProviderTest — 동일 파라미터 연속 호출 시 서로 다른 토큰 반환
  • JwtTokenProviderTest — 100회 호출 시 중복 없음
  • UserServiceTest — 동일 사용자 연속 두 번 로그인 시 서로 다른 refreshToken 반환
  • 기존 UserServiceTest 10개 테스트 모두 통과

- JwtTokenProvider: buildToken()에 jti(UUID) 추가 → 동일 사용자 동일 초 재로그인 시 토큰값 중복 불가
- RefreshTokenRepository: deleteAllExpired() JPQL 쿼리 추가
- UserCleanupScheduler: 매일 새벽 4시 만료 refresh token 일괄 삭제 job 추가
- JwtTokenProviderTest: 동일 파라미터 연속 호출 시 서로 다른 토큰 반환, 100회 호출 중복 없음
- UserServiceTest: 동일 사용자 연속 두 번 로그인 시 서로 다른 refreshToken 반환
@ThinkKat ThinkKat merged commit 6917961 into main Feb 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant