뒤에 나올 쿠키와 세션, 토큰을 이해하기 위해서는 HTTP의 특성을 알아야한다.
HTTP(Hypertext Transfer Protocol)는 W3 상에서 정보를 주고 받을 수 있는 프로토콜로 이를 활용하면 HTML 텍스트뿐만 아니라 모든 것을 전송할 수 있는데,
HTTP는 다음과 같은 특징이 존재한다.
무상태성(Stateless)
서버가 클라이언트의 이전 상태를 보존하지 않는다는 의미.비연결성(Connectionless)
클라이언트가 서버에 요청하고 응답을 받으면 바로 TCP/IP 연결을 끊어 연결을 유지하지 않는 것.
위와 같은 특징 덕분에 클라이언트가 서버와 연결 상태를 유지하지 않기 때문에 서버 자원을 절약할 수 있지만 연결 해제 후에 상태 정보가 저장되지 않는다는 단점이 있다.
만약 클라이언트가 웹사이트를 접속해 로그인을 한다고 하면, 이와 같은 HTTP의 특성 때문에 매번 로그인을 해야 한다는 문제가 발생하게 될 것이다.
이런 HTTP의 비 연결성과 무상태성을 보완하기 위해 서버가 클라이언트를 식별하기 위해 쿠키와 세션을 사용한다.
(반대로 연결지향 프로토콜(Connection Oriented)에는 TCP가 있다.)
쿠키는 사이트를 방문하고 이용할 때, 이용자의 브라우저에 저장되는 내용들이다.
서버는 쿠키를 이용해서 브라우저에 데이터를 넣어 이용자에 대한 정보를 기록할 수 있다.
위에서 언급했던 HTTP의 특성 때문에 요청이 끝나면 서버는 요청을 한 녀석이 누구인지 잊어버리기 때문에 요청할 때마다 내가 누구인지 알려주어야 한다.
이를 위한 방법 중 하나가 바로 세션이다.
웹 사이트에서 로그인하는 과정을 통해 세션에 대해 알아보자.
즉, 세션 방식은 현재 로그인한 유저들의 모든 세션 ID를 DB에 저장해야 한다는 것.
요청이 들어올 때마다 서버는 쿠키를 받아서, 세션 ID를 보고 세션 ID와 일치하는 유저를 찾아야 다음 작업을 수행할 수 있다.
이는 유저가 늘어감에 따라 DB 리소스가 더 필요한 것을 의미하기도 한다.
여기서 짚고 넘어가야 할 점은 유저가 갖고 있는 것은 세션 ID 뿐이고, 쿠키는 이 세션 ID를 전달하기 위한 매개체일 뿐이라는 점이다.
JWT (JSON Web Token) 는 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다.
위의 세션/쿠키 방식과 유사하게 사용자는 Access Token (JWT Token) 을 HTTP 헤더에 실어 서버에 전송한다. 토큰은 임의로 생성된 비밀번호 같이 동작하는데, 제한된 수명을 가지고 새로운 토큰은 한번 만료되면 새로 생성되어야 하는 특징을 가지고 있다.(Refresh Token)