Skip to content

Conversation

@Dimo-2562
Copy link
Contributor

❤️ 기능 설명

1. 토큰 갱신 API

처리 흐름:

  1. 쿠키에서 리프레시 토큰 추출
  2. JWT 서명 및 만료시간 검증
  3. 토큰 타입 검증 (refresh 타입인지 확인)
  4. Redis에 저장된 토큰과 일치 여부 확인
  5. 사용자 조회 및 새로운 토큰 쌍 생성
  6. 새 리프레시 토큰을 Redis에 저장 & HttpOnly 쿠키 설정
  7. 새 액세스 토큰을 응답 바디로 반환

2. 로그아웃 API

처리 흐름:

  1. 쿠키에서 리프레시 토큰 추출 및 검증
  2. Redis에서 해당 사용자의 리프레시 토큰 삭제
  3. HttpOnly 쿠키 삭제 (maxAge=0)

3. JWT 로직 리팩토링

Before:

  • JwtTokenProvider: 토큰 생성만 담당
  • 검증 로직이 분산되어 있음

After:

  • JwtUtil: 토큰 생성, 검증, 파싱을 모두 담당
  • 토큰 타입 검증 메서드 추가 (validateTokenType)
  • 일관된 네이밍 컨벤션

4. 보안 개선

액세스 토큰 만료시간 단축

  • Before: 1시간 (3600000ms)
  • After: 15분 (900000ms)
  • 효과: 로그아웃 시 액세스 토큰 블랙리스트 없이도 최대 15분 내 자연 만료

리프레시 토큰 만료시간 연장

  • Before: 7일 (604800000ms)
  • After: 14일 (1209600000ms)
  • 효과: 사용자 편의성 향상 (2주간 재로그인 불필요)

Refresh Token Rotation (RTR)

  • 토큰 갱신 시마다 새로운 리프레시 토큰 발급
  • 이전 리프레시 토큰은 무효화
  • 토큰 탈취 시 피해 최소화

5. 테스트 커버리지

AuthServiceTest - 10개 테스트

  • 토큰 갱신 성공
  • 토큰 갱신 실패: null, 빈 문자열, 유효하지 않은 토큰, Redis 토큰 불일치, 사용자 없음
  • 로그아웃 성공
  • 로그아웃 실패: null, 빈 문자열, 유효하지 않은 토큰

테스트 환경 개선

  • 5개 통합 테스트 파일 수정:
    • UserRepositoryTest.java
    • UserInterestCategoryRepositoryTest.java
    • OnboardingControllerIntegrationTest.java
    • UserProfileServiceTest.java
    • TestDataGenerator.java
  • 변경 내용: User.create() → User.createSocialUser(SocialType.KAKAO, "socialId", "email")
  • 이유: DB 제약조건 nullable=false 필드 초기화
    swagger 테스트 성공 결과 스크린샷 첨부
image image

연결된 issue

연결된 issue를 자동으로 닫기 위해 아래 {이슈넘버}를 입력해주세요.

close #161



✅ 체크리스트

  • PR 제목 규칙 잘 지켰는가?
  • 추가/수정사항을 설명하였는가?
  • 테스트 결과 사진을 넣었는가?
  • 이슈넘버를 적었는가?

@Dimo-2562 Dimo-2562 self-assigned this Jan 15, 2026
@Dimo-2562 Dimo-2562 added 🛠️ FEAT 새 기능 👤 domain:user 사용자 관련 labels Jan 15, 2026
@Dimo-2562 Dimo-2562 merged commit 0081c28 into develop Jan 15, 2026
1 check passed
@Dimo-2562 Dimo-2562 deleted the feat/#161 branch January 15, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

👤 domain:user 사용자 관련 🛠️ FEAT 새 기능

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] JWT 토큰 갱신 및 로그아웃 API 구현

2 participants