쿠키
쿠키를 이용해 서버는 브라우저에 데이터를 넣을 수 있습니다.
해당 브라우저에 데이터, 페이지 정보 등 사용자의 사용기록을 저장합니다.
사용자가 웹사이트에 방문할 때마다, 브라우저는 해당 쿠키도 request와 함께 서버에 보냅니다.
=> 오직 해당하는 도메인에만 보낼 수 있습니다. 예를 들어, 유튜브의 쿠키는 오직 유튜브에만 보낼 수 있습니다.
서버가 정해놓은 유효기간이 존재하고, 쿠키의 크기에 제한이 존재합니다.
쿠키의 가장 큰 역할은 유저 인증을 하기 위한 세션ID를 서버에 전달하는 것입니다.
세션
먼저 "stateless"의 개념부터 이해해야 합니다.
클라이언트가 서버에 보내는 각 request는 서로 연관이 없고 독립적으로 다뤄집니다.
즉, request가 끝날 경우 서버는 해당 클라이언트가 누구인지 잊어버리게 되는 것입니다.
우리는 서버에서 클라이언트에 대한 정보를 가지고 있길 원하고, 그것이 세션입니다.
쿠키에는 세션ID가 존재하고, 서버에서는 세션ID를 통해 세션DB를 탐색합니다.
세션DB에서 해당 세션ID와 일치하는 정보를 통해 서버는 해당 클라이언트에 대한 정보를 찾게 됩니다.
즉, 쿠키 = 세션ID(Key)를 전달하기 위한 매개체 라고 보아도 좋습니다.
세션DBMS의 대표적인 예시로는 Redis가 있습니다.
토큰
브라우저에 쿠키가 존재한다면, 네이티브 앱에는 토큰이 존재합니다.
즉, 토큰은 쿠키와 유사한 역할을 수행합니다.
서버와 클라이언트는 string형태의 토큰을 주고받습니다.
JWT(JSON Web Token)은 인증에 필요한 정보들을 암호화시킨 토큰을 의미합니다.
세션이 하는 역할을 대신하는 것처럼 볼 수 있고, DB 없이 유저 인증이 가능하다는 것이 큰 장점입니다.
JWT의 대표적인 예시로는 코로나19 QR체크인을 들 수 있습니다.
QR체크인을 통해 우리의 정보를 인증받는것이 JWT를 통해 이뤄지는 것입니다.