JWT Token & Session
2023. 12. 19. 22:05ㆍ지식&개념
Session 이란?
유저의 정보를 데이터베이스에 저장하고 상태를 유지하는도구
특징
- session은 특수한 id 값으로 구성되어 있고, session 은 서버에서 생성되고 클라이언트에서 쿠키를 통해 저장이 된다.
- 클라이언트에서 요청을 보낼 때 session id 를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수가 있다.
- 즉 session id 의 정보가 서버에 특정 데이터베이스의 정보와 연결되어 있다는 것이다.
- 때문에 요청을 할 때마다 매번 아이디와 비밀번호를 물어 볼 필요가 없는 장점을 가지고 있다. (이부분은 JWT 도 마찬가지)
- 서버에서 데이터가 저장되기 때문에 클라이언트에 사용자 정보가 노출될 위험이 없다.
- 데이터베이스에 session 을 저장해야 하기 때문에 Horizontal Scaling 이 어렵다.
JWT Token 이란?
유저의 정보를 Base 64로 인코딩된 String 값에 저장하는 도구
특징
- JWT Token 은 Header, Payload, Signature 로 구성되어 있으며 Base 64로 인코딩 되어 있다.
- JWT Token 은 서버에서 생성되며 클라이언트에서 저장된다.
- 클라이언트에서 요청을 보낼 때 JWT Token ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다.
- JWT Token은 데이터베이스에 저장되지 않고 Signature 값을 이용해서 검증할 수 있다. 그래서 검증할 때마다 데이터베이스를 매번 들여다 볼 필요가 없다.
- 정보가 모두 토큰에 담겨있고 클라이언트에서 토큰을 저장하기 때문에 정보 유출의 위험이 있다.
- 데이터베이스가 필요 없기 때문에 Horizontal Scaling 이 쉽다.
비교
비교 요소 | Session | JWT Token |
유저의 정보를 어디에서 저장하고 있는가? | 서버 | 클라이언트 |
클라이언트에서 서버로 보내는 정보는? | 쿠키 | 토큰 |
유저 정보를 가져올 때 데이터베이스를 확인해야 하는가? | 확인 필요 | 토큰의 Payload에 들어있는 정보만 필요할 경우 확인 불필요 |
클라이언트에서 인증 정보를 읽을 수 있는가? | 불가능 | 가능 |
Horizontal Scaling이 쉬운가? | 어려움 | 쉬움 |
'지식&개념' 카테고리의 다른 글
단방향 데이터 바인딩 양방향 데이터 바인딩 (0) | 2024.04.18 |
---|---|
Angular vs React vs Vue (0) | 2024.04.16 |
SQL 기본 (0) | 2023.12.13 |
샤딩이란? (0) | 2023.12.09 |
객체 지향 설계 SOLID 원칙 (1) | 2023.12.05 |