Cookie & Session & Token

shin·2023년 1월 26일
0

HTTP

목록 보기
11/13

Cookie

  • 서버와 클라이언트가 대화하기 위한 수단이라고 생각하면 된다.
    - 브라우저와 서버가 연결되었을 때 브라우저에서 자동으로 쿠키를 생성하고 응답이 오면 Cookie를 담아서 보낸다.
    - Cookie는 클라이언트 로컬에 저장되고 key와 value가 들어있는 작은 데이터 파일이다.
    - Cookie 안에는 이름 값 만료날짜, 경로정보가 들어있고 일정시간 동안 데이터가 저장된다. (예를들어 로그인상태 유지 같은 것을 말한다.)

동작순서

  • 클라이언트가 브라우저에서 웹페이지에 접속한다.(페이지 요청)
  • 요청을 받은 서버는 쿠키를 생성한다.
  • 생성된 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때, 같이 클라이언트에 돌려준다.
  • 쿠키를 받은 클라이언트는 가지고 있다가 다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.





Session

  • 유저의 정보를 데이터베이스에 저장하고 상태를 유지하는 도구이다.
    - Session은 특수한 ID 값으로 구성되어있고 서버에서 생성되고 클라이언트에서 쿠키를 통해 저장된다.
    - 클라이언트에서 요청을 보낼때 Session ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다. 이렇게 되면 매번 요청할 때마다 ID와 비밀번호를 물어보지 않아도 된다.
    - Session ID는 데이터베이스에 저장되기 때문에 요청이 있을 때마다 데이터베이스를 확인해야 한다.
    - 서버에 데이터가 저장되기 때문에 클라이언트에 사용자 정보가 노출될 위험이 없다.

생성방식

  • 클라이언트에서 ID와 비밀번호를 API 서버에 전송한다.
  • 서버에서는 ID와 비밀번호가 일치하는지 검증을 한다.
  • 검증해서 일치하면 데이터베이스에 Session을 생성하고 저장한다.
  • 생성된 Session을 다시 쿠키 형태로 전송을 해준다.

사용방식

  • 로그인한 유저의 장바구니를 가져온다고 가정해보자
  1. 장바구니 요청과 함께 쿠키를 서버에 보낸다
  2. 서버에서 쿠키 안에 들어있는 Session이 제대로된 것인지 검증을 한다.
  3. 데이터베이스에서 현재 Session을 들고있는 유저가 누구인지 검색을 한다.
  4. 해당하는 유저를 찾으면 서버에 유저 정보를 응답한다.
  5. 유저와 관련된 장바구니 데이터를 서버에서 데이터베이스로 요청한다.
  6. 유저와 관련되 데이터를 서버에 응답하고 서버는 클라이언트에 데이터를 전송한다.



Token

  • 유저의 정보를 Base64로 인코딩된 String 값에 저장하는 도구이다.
    - 토큰은 Header, Payload, Signature로 구성되어있다
    - 서버에서 생성되고 클라이언트에서 저장된다.
    - 클라이언트에서 요청을 보낼 때 Token ID를 같이 보내게 되면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다. Session과 마찬가지로 매번 아이디와 비밀번호를 물어볼 필요가 없다.
    - 데이터베이스에 저장되지 않고 Signature 값을 이용해서 검증을 할수 있다. 그렇기 때문에 Session과 다르게 매번 데이터베이스를 들여다볼 필요가 없다.
    - 정보가 모두 토큰에 담겨있고 클라이언트에 저장되기 때문에 정보 유출 위험성이 높다.

생성방식

  • 클라이언트에서 ID와 비밀번호를 API 서버에 전송한다.
  • 서버에서 검증을 하고 Token을 발급한다.
  • 발급한 Token을 클라이언트에게 보낸다.

사용방식

  • 로그인한 유저의 장바구니를 가져온다고 가정해보자
  1. 장바구니 요청과 함께 토큰을 서버에 함께 보낸다
  2. 검증을 끝내고 나온 ID값을 사용해 장바구니값을 데이터베이스에 요청한다.
  3. 해당하는 데이터를 서버에 전송하고 클라이언트에게 보낸다.

0개의 댓글