2026-02-11
JWT(JSON Web Token)란?
- 로그인 상태를 증명하는 문자열
- 서버가 서명한 “신분증”
-
프론트는 내용을 믿지 말고, 전달만 한다
- Access Token
- 짧은 수명
- API 요청할 때 사용
- 프론트 메모리(전역상태)에 저장
- Refresh Token
- 긴 수명
- Access 재발급용
- HttpOnly 쿠키
Authorization 헤더
“Bearer” 빠지면 인증 실패 난다 (면접 단골)
Authorization: Bearer <accessToken>
- axios 인터셉터에서 자동 처리
- 모든 보호 API에 포함
토큰 만료(exp) 처리 개념
- 프론트에서 하면 안 되는 것
- exp 직접 계산해서 로그인 판단
- “아직 안 만료됐으니까 괜찮겠지” 판단
- 정석
- 서버가 401 주면 → 만료로 간주
- 프론트는 결과만 보고 대응
401 발생 → refresh 요청 → 성공: 재시도 → 실패: 로그아웃
axios 인터셉터 개념
프론트 JWT 관리의 핵심은 인터셉터
- Request 인터셉터
- accessToken 자동 주입
- Response 인터셉터
- 401 감지
- refresh 시도
- 원래 요청 재시도
새로고침과 JWT
문제
- accessToken은 메모리에 있음
- 새로고침 → 사라짐 (로그아웃됨)
해결 (표준 패턴)
앱 시작 시
→ /auth/refresh 한 번 호출
→ accessToken 복구
→ 로그인 유지
로그아웃 처리
- 서버에
/auth/logout요청 - accessToken 변수 제거
- 로그인 상태 초기화
- 로그인 페이지 이동
⇒ 프론트가 토큰을 버리는 순간 로그아웃
보안 관련
- XSS
- localStorage에 토큰 저장 X
- 그래서 access는 메모리
- CSRF
- refreshToken을 쿠키로 쓰면 영향 있음
- access를 헤더로 보내서 영향 최소화
조합: Access(헤더) + Refresh(쿠키)
전체 구현 과정 (프론트)
accessToken을 전역 상태(메모리)로 관리하고, 앱 시작 시 refresh로 복구한다. API 요청은 인터셉터에서 토큰을 자동 주입하며, 401 발생 시 refresh 후 원요청을 재시도하고 실패하면 로그아웃한다.