서버에 토큰을 보내서 서버는 세션 DB에서 해당 토큰과 일치하는 정보를 찾는다.
세션은 모든 세션 ID를 DB에 저장하고, 요청이 들어올 때마다 서버는 쿠키에 담긴 세션 id와 일치하는 유저를 찾아야한다. 요청이 있을 때마다 DB에서 세션 ID를 찾아야 하므로 유저가 늘어나면 DB 리소스도 증가하게 된다.
토큰 형식이고, 세션 DB가 필요없다. 따라서 서버는 DB에서 유저를 찾는 일을 하지 않아도 된다.
브라우저에서 유저 정보를 받으면 서버는 sign을 한다. 그리고 사인된 정보를 string 형태로 브라우저로 보낸다.
브라우저에서 토큰 또는 사인된 정보를 보낸다.
서버는 토큰을 받으면 해당 사인이 유효한지 체크하고(조작된 토큰은 아닌가) 토큰이 유효하다면 성공.
항목 | 세션 | JWT | 설명 |
---|---|---|---|
브라우저에 전달하는 것 | 세션 ID | 토큰 | JWT는 필요한 정보(예. 유저를 인증하는데 필요한 정보)를 토큰에 저장 |
DB | 필요 | 불필요 | 세션(세션 ID를 받아 DB에 저장), JWT(서버는 토큰이 유효한지만 검증하기 때문에 DB가 필요없음. JWT는 암호화가 안되어있기 때문에 비밀번호를 저장하면 안됨) |
새로운 기능 추가 | 가능 | 불가능 | ex. 로그아웃 |
단점 | DB 유지보수 기능 증가 | ||
용량 제한 | 도메인 당 20개, 1쿠키당 4KB | 제한 없음 | TMI. JWT는 용량제한 없음 |