토큰 재발급 테스트 가이드

1. Access Token 만료 시간 변경 (테스트용)

src/main/resources/application.yml 수정:

jwt:
  secret: ${JWT_SECRET_KEY}
  expiration_access: 10000    # 👈 10초로 변경 (테스트용)
  expiration_refresh: 14400000  # 4시간 (그대로)

⚠️ 테스트 후 원래 값(1800000 = 30분)으로 복구하세요!

2. 브라우저 테스트 순서

준비

  1. 서버 재시작 (설정 변경 적용)
  2. 브라우저 개발자 도구(F12) → Console 탭 열기

    테스트 단계

    Step 1: 로그인

  3. /login 페이지에서 로그인
  4. 개발자 도구 → 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.htmlauthFetch(), callApi()
토큰 만료 감지 SecurityConfig.javaauthenticationEntryPoint
토큰 검증 필터 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시간