(Cookie vs Session vs Token) based authentication

스머리·2023년 11월 7일

Cookie

쿠키를 이용해서 서버는 브라우저에 데이터를 넣을 수 있다.
사이트에 방문하면 브라우저는 서버에 요청을 보낸다.
서버는 이에 응답한다. 모든 데이터와 페이지 정보..
그리고 응답에 쿠키도 담겨있다.

브라우저에 쿠키를 저장한 후에는 해당 웹사이트에 방문할 때마다
브라우저는 해당 쿠키도 요청과 함께 보내게 된다.
쿠키는 도메인에 따라 제한된다. (유튜브가 준 쿠키는 유튜브에만 보내지게 됨)

쿠키는 유효기간이 있다.
하루, 한 달 등.. 서버가 정한 기간에 따라 유효하다.

쿠키는 인증 뿐만 아니라 여러가지 정보를 저장할 수 있다.
웹사이트 언어설정 (En 설정 -> 다음번에 웹사이트 방문시에도 쿠키가 기억해둔 언어설정 쿠키를 요청하여 설정된 언어로 페이지를 제공함.)

Session

username과 pw를 서버에 보낸다.
일치하면 서버는 세션 DB에 해당 유저를 생성한다.

현재 로그인한 유저들의 모든 세션 ID를 DB에 저장해야 한다.
요청이 들어올 때마다 서버는 쿠키를 받아서 세션 ID를 보고, 일치하는 유저를 찾고, 다음 작업을 수행한다.
즉 유저가 늘어남에 따라 DB 리소스가 더 필요하다.

장점

  • 서버는 로그인 된 유저의 모든 정보를 저장. 해당 정보를 이용하면 새로운 기능 추가할 수 있음.
  • 특정 유저를 로그아웃 시키고 싶을 때 그냥 세션 삭제시킨다.
    • ex. 인스타그램에 로그인된 디바이스 중 원치 않는 디바이스는 강제 로그아웃 시킨다.
    • ex. 넷플릭스처럼 계정 공유 숫자를 제한한다. (현재 로그인 몇 명이 했는지 알 수 있다.)

단점

  • DB를 사서 유지해야 하는데 유저가 늘어날수록 DB도 커져야 한다. -> 비용적 문제

Token

JWT를 이용하면 세션DB를 가질 필요가 없고
서버는 유저 인증을 위해 많은 작업을 거치지 않아도 된다.

토큰은 요상하게 생긴 문자열.
서버에서 받아서 요청할 때마다 보낸다.

장점

  • JWT에선 DB를 따로 살 필요가 없다.

단점

  • Session에서와 같이 강제 로그아웃 같은 기능을 할 수 없다.
    • 토큰이 만료되기 전까지는 계속 유효
profile
꾸준히 나아가는 프론트엔드 개발자

0개의 댓글