[FE 지식] 쿠키, 세션, 토큰(JWT)의 차이?

LeeHanna·2021년 10월 8일
0

FE 지식

목록 보기
4/4
post-thumbnail

웹 공부를 하다보면 세션, 토큰, 쿠키라는 단어를 정말 많이 듣는다.

많이 듣는것 치고는 각각이 어떤 특징을 가지는지 또 어떤 차이점이 있는지 정확히 알지 못해서

이번에는 세션, 토큰, 쿠키 각각의 특징이 무엇인지 또 장단점은 무엇인지 알아보고자 한다.

🍪 쿠키

: 쿠키는 나의 브라우저에 데이터를 넣을 수 있도록 도와주는 매개체이다.

쿠키를 이용해 서버는 나의 브라우저에 다양한 데이터를 넣을 수 있다.

브라우저에 데이터를 넣는 순서는 다음과 같다.

  1. 사용자가 사이트에 방문하면 브라우저는 서버에 요청을 보낸다.
  2. 서버에서 사용자가 찾던 페이지 정보와 데이터 등을 응답해준다. 이때, 브라우저에 저장하고자 하는 쿠키가 있을 수 있다.
  3. 사용자가 브라우저에 쿠키를 저장하면 해당 브라우저를 접속 할 때마다 해당 쿠키와 함께 요청을 보내게 된다. 이때, 쿠키는 도메인에 제한된다. (예를들어, 유튜브가 보내준 쿠키는 유튜브에만 사용됨.)

이러한 과정과 함께 쿠키를 통해 데이터를 전송받게 된다.

쿠키는 서버가 설정해 놓은 기간에 따라 유효기간이 존재하며, 인증 뿐만 아니라 여러 정보를 저장할 수 있다. (언어 설정 등)

그 다음으로 세션과 토큰에 대해서 이해해보자.

세션과 토큰에 대해서 이해하려면 먼저 Stateless에 대해서 알아야 한다.

Stateless는 프로토콜로 서버로 가는 모든 요청이 이전 리퀘스트와 독립적으로 다뤄진다는 의미이다.

요청끼리 연결이 없고 메모리가 없기 때문에 요청이 끝나면 서버는 우리가 누군지 잊어버린다.

그래서 요청할 때마다 우리가 누군지 알려줘야 한다.

세션과 토큰은 이러한 Stateless 프로토콜 방식을 사용한다.

🗄 세션

: 세션은 쿠키를 기반으로 하여 사용자 정보 파일을 서버 측에서 관리하는 것이다.

세션을 통한 인증 과정은 다음과 같다.

  1. 서버에 사용자 아이디와 비밀번호를 보내서 비밀번호가 일치하면 세션 DB에 '아이디' 라는 유저를 생성한다.
  2. 해당 세션에는 별도의 ID를 가지는데 이 세션 ID가 쿠키를 통해 브라우저에 들어와 저장된다.
  3. 따라서 같은 웹사이트의 다른 페이지로 이동하면 브라우저는 세션 ID를 갖고있는 쿠키를 서버에게 전송한다.
  4. 서버는 세션 ID와 함께 들어오는 쿠키를 가지고 세션 DB를 확인하고 세션 DB에서 유저 ID를 알게 되면서 서버가 우리가 누군지 알게된다.
  5. 해당 요청이 끝나고 다른 페이지로 들어가면 위 요청들이 반복된다.

쿠키는 그저 세션ID를 전달하기 위한 하나의 매개체이다.

세션에 대해서 기억해야할 점은 현재 로그인한 유저들의 모든 세션 ID를 DB에 저장해야 한다는 것이다.

즉, 요청이 들어올 때마다 서버는 쿠키를 받아 세션 ID와 일치하는 유저를 찾아야하고 그제서야 다음 요청이 수행 가능하다. 유저가 늘어남에 따라 DB리소스가 더 필요하다.

세션을 이용해 iOS, Android 앱을 만들 수 있지만, 쿠키는 사용할 수 없다.

쿠키는 브라우저에만 있기 때문이다. 그래서 이 경우 토큰 사용하게 된다.

🔡 JWT

: JWT는 토큰 형식이며 세션 DB가 필요하지 않고 서버는 유저 인증을 위해 많은 일을 하지 않는다.

JWT를 통한 인증 방식 과정은 다음과 같다.

  1. JWT는 유저가 로그인하고 유저명과 비밀번호가 맞다면 서버는 DB에 세션 DB를 생성하지 않고, 유저의 ID를 가져다가 사인 알고리즘을 이용해 '사인'을 한다.
  2. 그리고 해당 '사인된 정보'를 string 형태로 전송한다.
  3. 서버에 요청을 보내려면 세션 ID와 비슷하게 사인된 정보나 토큰을 보내주어야 한다.
  4. 서버는 토큰을 받으면 해당 사인이 유효한지 체크하고 토큰이 유효하다면 서버는 우리를 유저로 인증한다.

세션에서는 세션 ID만 서버에 전달하면 된다. 세션에 대한 모든 정보는 세션 DB에 저장되어 있다.

JWT는 유저를 인증하는데 필요한 정보를 토큰에 저장하여 사용자에게 전달하고 서버에서는 해당 토큰이 유효한지 검사한다.

세션과 JWT 장단점

세션의 장단점

세션을 사용하면 로그인된 유저의 모든 정보를 저장하기때문에 해당 정보를 이용해 새로운 기능을 추가 시킬 수 있다. 그러나 이 정보를 모두 저장하려면 DB를 사고 유지해야 한다.

JWT의 장단점

JWT를 사용하면 생성된 토큰을 추적하지 않는다. 서버가 아는것은 토큰이 유효한지가 전부이다. DB를 사거나 할 필요 없다. 그러나 새로운 기능 등을 추가 할 수 없다. 토큰이 만료되기까지는 모든 사용자가 유효하기 때문이다.

출처 : https://www.youtube.com/watch?v=tosLBcAX1vk

0개의 댓글