주제
- JWT 토큰 기본 개념
- 세션 - 쿠키 방식의 차이
- JWT 문제점 및 주의사항
목차
내용
🏗️ Build Up
- HTTP는 connectless , satateless 한 특징으로 인해 지속적으로 인증된 사용자인지 구분하지 못한다.
- 특히나 이러한 점 때문에 누가 누구인지 확인할 수 있는 방법은 개발자들이 직접 이 특징을 살려서 회원을 구분한다.
- 그렇게 구분하는 방식이 세션-쿠키 방식과 JWT 토큰이 있다.
- 주로 쓰는 방식 보통 세션-쿠키 방식이다
💨What [JWT는 무엇인가]
JSON 개체로 안전하게 정보를 전송하기 위한 개방형 표준 방법(RFC-7519)이다.
특징
- 자가 수용적이다. [
자체적으로 정보를 지니고 있음
] - 내부 구조를 보면 왜 자가 수용적인지 알 수 있다.
구조
- jwt토근은
.
을 구분자로 3가지 문자열로 구성이 된다.
- header
- typ : 토큰의 타입을 지정 (JWT)
- alg : 해싱 알고리즘 (HMAC, SHA256, RSA)
- 토큰 검증시 사용되는 signature 부분에 사용
- payload
- 토큰에 담을 주체적 정보들이 들어 있다.
Claim
이라고 부르고 이는 key, value 쌍으로 되어 있다.- 등록된 클레임
- 토큰에 대한 정보를 담기위한 미리 정의된 집합이다.
- 선택적으로 사용가능하지만 정보에 대한 유출에 유의 해야 한다.
- 공개 클레임
- 사용자 정의 클레임으로, 공개용 정보 전달을 위해 사용됨
- 충돌 방지를 위해 URI 포맷을 이용
- 비공개 클레임
- 당사자 간 정보를 공유하기 위해 만들어졌다.
- 공개 클레임과 달리 이름이 중복되어 충돌이 날 수 있으니 이점을 유의해야 한다.
Claim 종류

{ "username": "whyWhale" }
- signature
- 메시지가 도중에 변경되었는지를 판단하기 위해 사용이 된다.
- signature 사용

추가적으로 개인 키로 서명된 토큰의 경우 JWT의 보낸 사람이 누구인지도 확인 할 수 있다.
세션-쿠키 방식과 JWT 차이
구분 | 세션-쿠키 | 토큰 |
보관 | 서버 | 토큰 |
정보 노출 | X | O |
무효화 방식 | 비교적 쉽게 무효화(서버측) | 보관장소가 따로 없어 특정 사용자만을 무효화 시키기에 복잡한 로직이 필요 |
타임아웃 처리 방식 | 사용자가 일정시간 보내면 타임아웃 자동 갱신 | 한번 발급된 토큰 시간 연장할 수 없다. 그러므로 재발급 해야한다. |
❓Why [왜 JWT인가]
- 세션-쿠키 방식이나 JWT는 토큰이 탈취되면 답이 없다.
- 하지만 JWT를 쓰는 핵심적인 이유는 공유 데이터베이스 없이 서버 자체에서 검증이 가능하고 다중 서버 환경에서도 큰 고민 없이 가용 가능한 점에서 편리하다
- 하지만 JWT 비교적 세션-쿠키 방식보다 토큰 탈취에 대해 복잡성이 따른다.
- 특히나 access token 의 경우 무효화 처리가 어렵다.
✅이해가 안돼는 부분
메모리에 저장하는데 GC에 의해 수거되는 경우는 어떤 경우인지 궁금하다
결국 메모리에 저장되어 지속적으로 체크할 건데 그게 안사라질 것 같은 예상이 든다

📌 REFER
- 한쿸 자료
- 외국 자료