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