토큰 재발급 테스트 가이드
1. Access Token 만료 시간 변경 (테스트용)
src/main/resources/application.yml 수정:
jwt:
secret: ${JWT_SECRET_KEY}
expiration_access: 10000 # 👈 10초로 변경 (테스트용)
expiration_refresh: 14400000 # 4시간 (그대로)
⚠️ 테스트 후 원래 값(1800000 = 30분)으로 복구하세요!
2. 브라우저 테스트 순서
준비
- 서버 재시작 (설정 변경 적용)
- 브라우저 개발자 도구(F12) → Console 탭 열기
테스트 단계
Step 1: 로그인
/login페이지에서 로그인- 개발자 도구 → Application → Cookies 확인
access_token쿠키 존재 ✅refresh_token쿠키 존재 ✅Step 2: 10초 대기
- Access Token이 만료될 때까지 기다림 #### Step 3: 인증 필요한 API 요청 - 예: `/community/write` 페이지에서 게시글 작성 - 또는 `/mypage` 페이지 접속 #### Step 4: 콘솔 로그 확인 성공 시 다음 로그가 표시됨: ``` 🔑 Access Token 만료 - 재발급 시도 🔄 토큰 재발급 시도... ✅ 토큰 재발급 성공 🔄 원래 요청 재시도: /api/communities ``` #### Step 5: 쿠키 확인 - Application → Cookies에서 `access_token`, `refresh_token` 값이 변경됨 ✅ ---
3. 테스트 시나리오
✅ 시나리오 1: Access Token 만료 → 자동 재발급 → 원래 요청 성공
| 단계 | 동작 | 결과 | |——|——|——| | 1 | 로그인 | access_token, refresh_token 쿠키 저장 | | 2 | 10초 대기 | access_token 만료 | | 3 | 게시글 작성 시도 | 401 + TOKEN_EXPIRED | | 4 | 자동으로 /api/tokens/refresh 호출 | 새 토큰 발급 | | 5 | 원래 요청 재시도 | 게시글 작성 성공 ✅ |
✅ 시나리오 2: Refresh Token도 만료 → 로그인 페이지로 이동
| 단계 | 동작 | 결과 | |——|——|——| | 1 | access_token 만료 상태 | - | | 2 | refresh_token도 만료됨 | - | | 3 | API 요청 | 401 + TOKEN_EXPIRED | | 4 | /api/tokens/refresh 호출 | 401 + TOKEN_EXPIRED (refresh도 만료) | | 5 | 재발급 실패 | alert → 로그인 페이지로 이동 |
✅ 시나리오 3: 로그아웃 후 → 토큰 폐기됨
| 단계 | 동작 | 결과 |
|---|---|---|
| 1 | 로그아웃 | DB에서 refresh_token 삭제, 쿠키 삭제 |
| 2 | 인증 필요 API 요청 | 401 + NOT_AUTHENTICATED |
| 3 | - | 로그인 페이지로 이동 |
4. 관련 코드 위치
| 구분 | 파일 |
|---|---|
| 서버: 토큰 재발급 | RefreshController.java |
| 클라이언트: 자동 재발급 | layout/header.html → authFetch(), callApi() |
| 토큰 만료 감지 | SecurityConfig.java → authenticationEntryPoint |
| 토큰 검증 필터 | JwtAccessTokenCheckAndSaveUserInfoFilter.java |
5. 동작 흐름도
[브라우저] [서버]
| |
|-- POST /api/communities (글 작성) -->|
| |
|<-- 401 + TOKEN_EXPIRED --------------| (access_token 만료)
| |
|-- POST /api/tokens/refresh --------->| (refresh_token 쿠키 자동 전송)
| |
|<-- 200 + Set-Cookie (새 토큰) -------|
| |
|-- POST /api/communities (재시도) --->| (새 access_token 쿠키)
| |
|<-- 201 Created (성공) ---------------|
6. 설정 복구
테스트 후 application.yml 원래 값으로 복구:
jwt:
expiration_access: 1800000 # 30분 (운영용)
expiration_refresh: 14400000 # 4시간