두 토큰은 직접적인 충돌을 해결하기 위해 존재합니다: access token은 모든 요청에서 전송되어야 하므로 (많이 노출됨), 그러면서도 잦은 로그인을 강요하지 않고 오래 지속되는 세션도 원합니다. 하나의 토큰으로 둘 다 안전하게 가질 수는 없습니다 — 그래서 역할을 분리합니다.
Authorization 헤더에 담겨 전송됩니다. 끊임없이 전송되므로 유출 가능성이 높으며, 짧게 유지하면 탈취되어도 거의 즉시 만료됩니다.Login ──▶ access (15m) + refresh (30d)
모든 API 호출 ──▶ access 전송
Access 만료 ──▶ refresh 전송 ──▶ 새 access (+ 회전된 refresh)
| 하나의 장수명 access token | Access + refresh | |
|---|---|---|
| 노출 | 매 요청 전송, 오래 생존 → 큰 탈취 창 | Access는 단수명; refresh는 드물게 전송 |
| 폐기 | 어려움 (stateless JWT는 발급 취소 불가) | refresh token을 폐기; access는 몇 분 내 소멸 |
| UX | 짧으면 자주 재로그인 | 자격 증명 재입력 없이 로그인 유지 |
| 유출의 폭발 반경 | 큼 | 작음 (access가 빠르게 만료) |
httpOnly 쿠키에 저장되어 XSS의 손이 닿지 않는 곳에 둡니다.이것은 표준적인 현대 인증 설계이며, 면접관은 여러분이 어떻게뿐 아니라 왜를 이해하는지 보기 위해 이것을 묻습니다. 핵심 통찰은 트레이드오프입니다: 무상태성과 짧은 노출(access) 대 긴 세션과 폐기 가능성(refresh). 이를 잘못하면 — 장수명 access token, 회전 없음, localStorage에 저장된 refresh — 하나의 유출된 토큰이 장기적인 계정 침해로 바뀝니다. 이 분리와 각 토큰이 무엇을 제공하는지 짚어내는 것이야말로 보안을 의식하는 엔지니어에게 기대되는 것입니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기