쿠키, 세션, 토큰

Jun·2022년 5월 28일
0

네이버 부스트캠프

목록 보기
21/21

쿠키

쿠키란?

  • 쿠키는 브라우저 로컬에 저장되는 key, value로 구성된 데이터 파일이다.
  • 쿠키를 이용하여 서버에서 브라우저에 데이터를 넣을 수 있다.
  • 브라우저에 300개까지 쿠키 저장이 가능하고, 하나의 도메인당 20개의 값만 가질 수 있다.
  • 하나의 쿠키는 최대 4KB이다.
  • 쿠키는 서버에 요청을 보낼 때 request 헤더에 자동으로 넣어서 함께 전송하게 된다.

쿠키의 사용 예시

  • 아이디, 비밀번호 저장, 자동 로그인
  • 쇼핑몰의 장바구니

세션

HTTP 프로토콜은 stateless이다.
즉, 서버로 가는 모든 request는 독립적이며 request가 끝나면 서버는 해당 request 정보를 기억하지 않는다.
따라서 로그인 같은 상태 정보 유지를 위해서 세션을 사용한다.

사용자가 ID, PW를 입력한 뒤, 서버에 로그인을 요청하면 서버는 해당 요청을 기반으로 세션을 생성한다.

세션은 DB에 저장되고, 해당 세션의 ID를 쿠키에 담아 클라이언트로 전송한다.

이제 클라이언트는 해당 서버에 요청을 보낼 때마다 쿠키에 세션ID가 담겨있으므로 로그인 유지가 가능해진다.

토큰

세션을 통한 사용자 정보 유지 방법은 사용자가 많을 수록 DB에 저장되는 세션 정보가 늘어나기 때문에 DB 리소스가 더 필요해진다.

따라서 이러한 문제를 해결하기 위해 토큰 방식이 등장한다.

토큰 방식으로 JWT가 있다.

JWT

사용자가 로그인 요청을 보내면, 서버는 DB에 세션을 생성하지 않는다.
대신 서버는 사용자의 ID를 기반으로 사인 알고리즘을 통해 사인된 정보 '토큰'을 생성한다.

생성된 토큰은 클라이언트로 전송하게 되고, 클라이언트는 이제 서버에 요청을 보낼 때 해당 토큰을 담아 요쳥을 보내 사용자 정보를 유지할 수 있다.

JWT의 저장 방법

JWT의 저장 방법으로 쿠키, localstorage, private variable이 있다.

먼저 private variable 저장 방식은 새로고침할 때마다 JWT 값이 사라지기 때문에 매번 로그인을 수행해야한다.

또, 쿠키와 localstorage 방식은 CSRF, XSS에 의해 보안에 취약하다.

그래서 가장 좋은 방법은 refresh token을 사용하는 것이다.
refresh token을 httpOnly 쿠키로 저장하고, 새로고침될 때마다 refresh token을 request에 담아 전송한다.
그리고 새로은 access token을 발급받는다.
발급 받은 access token은 private variable에 저장할 수 있다.

profile
HiHi

0개의 댓글