프로젝트들을 진행하면서, 다양한 선택의 순간들이 있었습니다. 서면으로 작성하면서 다시 한 번 개념을 정리할 수 있었습니다. 이렇게 정리한 정보들과 의견들을 상기시킬 겸 블로깅을 해보겠습니다.
쿠키와 토큰을 비교하는 것은 질문부터가 잘못된 것입니다. 일단 쿠키에 대해서 알아보겠습니다.
세션과 토큰이 필요한 이유를 생각해봅시다. HTTP 웹사이트에서 사용하는 프로토콜, 즉 HTTP는 Stateless 합니다. 즉, 서버로 가는 모든 요청이 이전의 Request와는 독립적으로 다뤄집니다. 여기서는 세션에 대해 먼저 알아봅시다.
서버가 요청이 누구 것인지 알게 하는 방법 중 하나가 세션입니다.
ex) A가 로그인 요청을 하면 . . .
- 서버는 DB를 확인합니다.
- A가 맞다면, 세션 DB에 A라는 유저를 저장합니다.
- 여기서 저장된 세션마다 별도의 session ID가 있습니다.
session ID는 쿠키를 통해 브라우저로 전달되어 저장됩니다.
- 이제 요청마다 브라우저는 세션 ID를 갖고 있는 쿠키를 서버에게 전달합니다.
- session ID를 갖고 있는 session DB를 확인합니다.
- session ID가 일치한다면, 해당 ID는 A라는 유저의 것이라는 것을 알게 됩니다.
중요한 것은, 유저 정보가 모두 서버에 저장된다는 것입니다. 즉, 여기서 쿠키는 세션 ID를 주고 받기 위한 매개체일 뿐입니다.
쿠키는 IOS, 안드로이드에 없습니다. 그래서 "토큰"을 사용합니다.
웹 토큰 중 가장 유명한 JWT에 대해 알아봅시다.
- JWT에선 유저를 인증하는데 필요한 정보를 토큰에 저장합니다.
- 페이지를 요청하면, 서버는 해당 토큰이 유효한지 검증합니다.
- JWT는 암호화되지 않아서, 누구나 해당 데이터를 볼 수 있습니다.