Sessions vs JWT
· 약 15분
Sessions vs JWT 입문 (동영상)
세션 vs 토큰 vs 쿠키? 기초개념 잡아드림. 10분 순삭!
Cookies
토큰 vs 쿠키? 는 틀린 질문
쿠키를 이용해서 서버는 사용자의 브라우저에 데이터를 저장한다.
작동 원리
서버에 request를 보내고 받은 response에 cookies가 있을 수 있다.
그렇게 해서 저장해 놓은 cookies를 서버에 request 보낼 때마다 같이 보낸다.
특징
- 쿠키는 도메인에 따라 제한이 된다.
- 쿠키는 (서버가 정한 기간에 따라) 유통기한이 있다.
- 쿠키는 인증 정보뿐만 아니라, 여러 정보를 저장할 수 있다.
- e.g., 웹사이트 언어 설정을 바꾸면, 서버는 쿠키를 주어서 사용자의 언어 설정을 저장한다. 이 후에, 쿠키는 request와 함께 서버로 보내지고, 서버는 언어 설정에 해당하는 response를 줄 수 있다.
- 공간 제약이 있다.
세션과 토큰이 필요한 이유
HTTP (웹사이트를 이용할 때 쓰는 프로토콜)은 stateless
서버로 가는 모든 request가 이전 request와 독립적으로 다뤄진다. 즉, 요청이 끝나면, 서버는 그 요청에 대한 정보는 기억하지 못한다.
→ 요청을 보낼 때마다, 사용자에 대한 정보를 알려주어야 한다.
Sessions
작동 과정
- 유저명과 비밀번호를 서버에 보낸다
- 비밀번호가 맞다면 Session DB에 user 정보를 저장한다.
- 각 session마다 별도의 ID가 있고, 이를 쿠키를 통해 브라우저로 돌아와 쿠키에 저장된다.
- request를 보낼 때 session ID를 쿠키에 담아 보내게 된다.
- 세션 ID를 세션 DB에서 확인한다.
- 유저 정보에 해당하는 response를 준다.
특징
- 중요한 유저 정보는 모두 서버가 가지고 있다.
- 모든 request에 대해서 쿠키를 확인하여, DB를 찾고 저장하는 작업을 서버가 해야한다. 즉, user가 늘어나면 DB 리소스가 더 필요하다.
- 쿠키가 세션 ID를 전달하기 위한 매개체 역할을 한다.
- 세션을 이용하여 안드로이드. iOS를 만들 수 있지만, 쿠키는 사용할 수 없다. → 쿠키 대신 토큰을 사용한다.
장점
- 다양한 기능을 추가할 수 있다.
- e.g., 특정 유저를 쫓아내고 싶을 때
- e.g., 원하지 않는 디바이스에서 강제 로그아웃
- e.g., 로그인한 계정 개수를 알 수 있고, 제한할 수 있다. (넷플릭스)
단점
- DB를 사고, 유지해야 한다.
- 유저가 늘어날 수록 DB도 커진다.
- 주로 redis를 이용한다.
- 해당 목적을 수행하기 위한, 빠르고, 저렴한 DB
JWT
토큰 형식
작동과정
- 유저명과 비밀번호를 서버에 보낸다.
- 유저명과 비밀번호가 맞다면 서버는 ‘사인된 정보’(JWT)를 string 형태로 클라이언트에 보낸다.
- request를 보낼 때 ‘사인된 정보’(JWT)를 서버에 보낸다.
- 서버는 토큰을 받으면, 해당 사인이 유효한지 체크한다.
특징
- 세션 DB가 필요없다.
- 길이에 제약이 없다.
- JWT는 암호화되지 않았다.
장점
- 서버가 많은 정보를 저장하고 있다.
단점
- 다양한 기능을 할 수는 없다.
- e.g., 강제 로그아웃 X (해당 토큰이 만료되기 전까지 유효)