한 줄 정리
JWT -> 토큰 기반 인증 (서버가 상태를 저장하지 않음, RESTful API에 적합, 확장성 높음)
세션 -> 서버에서 관리하는 인증 방식 (보안성이 더 높고, 일반 웹사이트에 적합)
JWT (JSON Web Token)
✔️ JWT는 인증을 위한 토큰
✔️ 서버에서 발급한 후 클라이언트가 저장 & 사용하는 방식
✔️ 로그인 성공 시 서버가 JWT를 생성해서 클라이언트에게 주고, 이후 클라이언트는 JWT를 포함해서 요청을 보냄
✔️ 서버는 JWT만 확인하고 요청하기 때문에, 별도의 세션 저장소가 필요 없음
장점
- 확장성 (Scalability) -> 서버에서 사용자가 상태를 저장할 필요가 없어서 수평 확장이 쉬움
- RESTful API와 잘 맞음 -> 서버가 Stateless(상태가 저장하지 않음)한 구조로 유지 가능
- 만료 시간을 설정할 수 있어 자동 로그아웃 가능
단점
- 보안 위험 -> 토큰이 탈취되면 누구나 사용 가능
- 토큰의 크기가 큼 -> 세션 ID보다 데이터가 많아서 네트쿼으 트래픽 증가 가능
- 수정 불가 -> 발급한 JWT는 수정할 수 없고, 새로운 토큰을 발급해야 함
JWT의 구조
header | payload | signature |
1️⃣ Header
- 2️⃣ Payload 어떤 알고리즘을 사용할지 정보 포함 (HMAC, RSA)
- 3️⃣ Signature 사용자 정보 (userId, 권한, ...) 와 만료 시간 (exp) 등의 데이터를 포함
- 토큰이 위조되지 않았음을 증명하는 암호화된 서명
JWT (토큰 인증) | 세션 (Session 인증) | |
저장 위치 | 클라이언트 (브라우저, 앱) | 서버 (세션 저장소 필요) |
서버 부담 | 서버에서 상태 저장 안함 (Stateless) | 서버에서 세션 저장해야 함 (메모리 사용) |
보안 | 토큰이 탈취되면 누구나 사용 가능 | 세션 ID만 탈취되면 서버에서 무효화 가능 |
유효기간 | 만료시간(exp) 지정 가능 | 보통 브라우저 종료 시 만료 |
확장성 | 높음 (멀티 서버에서 관리 쉬움) | 어려움 |
사용 예시 | OAuth2 인증, 모바일 앱 로그인 | 일반적인 웹사이트 로그인 |
JWT vs 세션, 언제 써야 할까?
✔️ JWT
- REST API 기반 인증 (서버에서 상태 저장 안함)
- OAuth2 인증 (Google, Facebook 로그인)
- 마이크로서비스 구조에서 인증 필요
- 모바일 앱과 백엔드가 인증을 주고받을 경우
✔️ 세션
- 보안이 중요한 서비스
- 사용자가 많지 않은 웹사이트
- JWT 없이도 인증 관리가 쉬운 경우
'네트워크 > 기본' 카테고리의 다른 글
[네트워크] 쿠키 vs 로컬 스토리지 vs 세션 스토리지 vs 세션 (0) | 2025.03.15 |
---|---|
[네트워크] 쿠키와 세션 (0) | 2025.03.15 |
[네트워크] HTTP vs HTTPS (0) | 2025.03.15 |
[네트워크] HTTP 요청 메서드 PUT vs PATCH (0) | 2025.03.15 |
[네트워크] HTTP 요청 메서드 GET vs POST (0) | 2025.03.15 |