Cookie
- 서버와 클라이언트가 대화하기 위한 수단이라고 생각하면 된다.
- 브라우저와 서버가 연결되었을 때 브라우저에서 자동으로 쿠키를 생성하고 응답이 오면 Cookie를 담아서 보낸다.
- Cookie는 클라이언트 로컬에 저장되고 key와 value가 들어있는 작은 데이터 파일이다.
- Cookie 안에는 이름 값 만료날짜, 경로정보가 들어있고 일정시간 동안 데이터가 저장된다. (예를들어 로그인상태 유지 같은 것을 말한다.)
동작순서
- 클라이언트가 브라우저에서 웹페이지에 접속한다.(페이지 요청)
- 요청을 받은 서버는 쿠키를 생성한다.
- 생성된 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때, 같이 클라이언트에 돌려준다.
- 쿠키를 받은 클라이언트는 가지고 있다가 다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
Session
- 유저의 정보를 데이터베이스에 저장하고 상태를 유지하는 도구이다.
- Session은 특수한 ID 값으로 구성되어있고 서버에서 생성되고 클라이언트에서 쿠키를 통해 저장된다.
- 클라이언트에서 요청을 보낼때 Session ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다. 이렇게 되면 매번 요청할 때마다 ID와 비밀번호를 물어보지 않아도 된다.
- Session ID는 데이터베이스에 저장되기 때문에 요청이 있을 때마다 데이터베이스를 확인해야 한다.
- 서버에 데이터가 저장되기 때문에 클라이언트에 사용자 정보가 노출될 위험이 없다.
생성방식
- 클라이언트에서 ID와 비밀번호를 API 서버에 전송한다.
- 서버에서는 ID와 비밀번호가 일치하는지 검증을 한다.
- 검증해서 일치하면 데이터베이스에 Session을 생성하고 저장한다.
- 생성된 Session을 다시 쿠키 형태로 전송을 해준다.
사용방식
- 로그인한 유저의 장바구니를 가져온다고 가정해보자
- 장바구니 요청과 함께 쿠키를 서버에 보낸다
- 서버에서 쿠키 안에 들어있는 Session이 제대로된 것인지 검증을 한다.
- 데이터베이스에서 현재 Session을 들고있는 유저가 누구인지 검색을 한다.
- 해당하는 유저를 찾으면 서버에 유저 정보를 응답한다.
- 유저와 관련된 장바구니 데이터를 서버에서 데이터베이스로 요청한다.
- 유저와 관련되 데이터를 서버에 응답하고 서버는 클라이언트에 데이터를 전송한다.
Token
- 유저의 정보를 Base64로 인코딩된 String 값에 저장하는 도구이다.
- 토큰은 Header, Payload, Signature로 구성되어있다
- 서버에서 생성되고 클라이언트에서 저장된다.
- 클라이언트에서 요청을 보낼 때 Token ID를 같이 보내게 되면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다. Session과 마찬가지로 매번 아이디와 비밀번호를 물어볼 필요가 없다.
- 데이터베이스에 저장되지 않고 Signature 값을 이용해서 검증을 할수 있다. 그렇기 때문에 Session과 다르게 매번 데이터베이스를 들여다볼 필요가 없다.
- 정보가 모두 토큰에 담겨있고 클라이언트에 저장되기 때문에 정보 유출 위험성이 높다.
생성방식
- 클라이언트에서 ID와 비밀번호를 API 서버에 전송한다.
- 서버에서 검증을 하고 Token을 발급한다.
- 발급한 Token을 클라이언트에게 보낸다.
사용방식
- 로그인한 유저의 장바구니를 가져온다고 가정해보자
- 장바구니 요청과 함께 토큰을 서버에 함께 보낸다
- 검증을 끝내고 나온 ID값을 사용해 장바구니값을 데이터베이스에 요청한다.
- 해당하는 데이터를 서버에 전송하고 클라이언트에게 보낸다.