세션 vs JWT 개념
세션 (Session)
- 서버가 사용자의 로그인 상태를 기억하고 관리
- Stateful: 서버가 사용자의 상태를 계속 저장·유지
- 서버 메모리 또는 DB에 세션 정보 저장
JWT (JSON Web Token)
- JSON 객체를 사용한 인증 처리
- Stateless: 서버에서 로그인 상태를 기억하지 않음 *중요
- 비유: 신분증을 들고 다니는 것처럼 모든 정보가 JWT 자체에 포함
- 서버는 JWT에 담긴 정보로 사용자 식별
JWT의 구조
3부분 구성 (aaaa.bbbb.cccc)
헤더(Header) . 페이로드(Payload) . 서명(Signature)
헤더 & 페이로드
- 둘 다 eyJ로 시작 (Base64Url 인코딩 '{' )
- Base64Url 인코딩 사용 (암호화 아님!)
- 누구나 디코딩 가능
-> 비밀번호 등 민감정보 절대 포함 금지
- 누구나 디코딩 가능
서명 (Signature)
- 무결성을 보장하는 가장 중요한 부분
- 생성 과정:
- 헤더와 페이로드를 인코딩
- 서버만 알고 있는 비밀키 사용
- 헤더에 지정된 알고리즘(예: HMAC SHA256)으로 해시 생성
- eyJ로 시작하지 않음 (해시값이므로)
- 검증: 서버가 다시 서명을 생성하여 들어온 서명과 비교
Refresh Token 전략
문제 상황 : 보안과 편의성 간 trade-off 관계!
- JWT 만료시간을 짧게 하면 → 보안↑, 사용자 편의성↓
- JWT 만료시간을 길게 하면 → 보안↓, 사용자 편의성↑
해결책: Access Token + Refresh Token
구분 Access Token Refresh Token
| 구분 | Access Token | Refresh Token |
| 만료시간 | 짧음 (예: 15분) | 김 (예: 2주) |
| 사용빈도 | 모든 API 요청마다 | Access token 갱신 시만 |
| 저장위치 | 클라이언트 | DB에 저장 (Stateful) |
| 발급시점 | 로그인 시, 갱신 시 | 로그인 시 |
특징
- 하이브리드 방식: Stateless(JWT) + Stateful(Refresh token DB 저장)
- 대부분의 시간은 Access token 사용 → Stateless의 이점 유지
- 만료 시에만 Refresh token 사용 → 보안과 편의성의 절충안
유의점
- Refresh token은 최초 로그인 시 access token과 함께 발급되며, access token 갱신 시 사용됨 (새로 만들어지는 것이 아님)
면접 키포인트
- Stateful vs Stateless 차이를 명확히 설명
- JWT의 3부분 구조와 각 역할
- Base64Url ≠ 암호화 (민감정보 포함 금지!)
- 서명(Signature)을 통한 무결성 검증 메커니즘
- Access/Refresh Token 조합의 필요성과 장점
'ETC > etc3' 카테고리의 다른 글
| [Java] extends와 implements의 차이 (0) | 2025.12.04 |
|---|---|
| [SQL Exercise] 6. 문자열 데이터 조작하기 CAST로 데이터 타입 변환하기 (0) | 2025.11.28 |
| [SQL Exercise] 5. 조건문을 이용한 카테고리 분류해보기 (0) | 2025.11.27 |
| [나의 개발일지] 4. Spring에 대해서 좀 더 자세히 알아봅시다 (0) | 2025.11.20 |
| [나의 개발일지] 3. Java와 클래스 (0) | 2025.11.18 |