쿠키 / 세션 / 토큰

허정·2022년 6월 4일
0

프로젝트들을 진행하면서, 다양한 선택의 순간들이 있었습니다. 서면으로 작성하면서 다시 한 번 개념을 정리할 수 있었습니다. 이렇게 정리한 정보들과 의견들을 상기시킬 겸 블로깅을 해보겠습니다.

1. 쿠키 VS 토큰

쿠키와 토큰을 비교하는 것은 질문부터가 잘못된 것입니다. 일단 쿠키에 대해서 알아보겠습니다.

(1) 쿠키를 이용해서 서버는 사용자의 브라우저에 데이터를 저장할 수 있습니다.

  • 사이트에 방문하면 브라우저는 서버에 요청을 보냅니다.
  • 응답에는 모든 데이터와 사용자가 찾는 페이지 정보가 있습니다.
  • 이 때, 서버가 브라우저에 저장하고자 하는 "쿠키"가 있을 수 있습니다.

(2) 쿠키의 특징

  • 기본적으로 쿠키는 도메인에 따라 제한됩니다.
  • 또한, 유효기간을 갖습니다.
  • 쿠키에는 인증 뿐만 아니라 여러가지 정보를 저장할 수 있습니다.

2. 세션 VS 토큰

세션과 토큰이 필요한 이유를 생각해봅시다. HTTP 웹사이트에서 사용하는 프로토콜, 즉 HTTP는 Stateless 합니다. 즉, 서버로 가는 모든 요청이 이전의 Request와는 독립적으로 다뤄집니다. 여기서는 세션에 대해 먼저 알아봅시다.

(1) 세션이란

서버가 요청이 누구 것인지 알게 하는 방법 중 하나가 세션입니다.

ex) A가 로그인 요청을 하면 . . .

  • 서버는 DB를 확인합니다.
  • A가 맞다면, 세션 DB에 A라는 유저를 저장합니다.
  • 여기서 저장된 세션마다 별도의 session ID가 있습니다.

(2) 세션 ID

session ID는 쿠키를 통해 브라우저로 전달되어 저장됩니다.

  • 이제 요청마다 브라우저는 세션 ID를 갖고 있는 쿠키를 서버에게 전달합니다.
  • session ID를 갖고 있는 session DB를 확인합니다.
  • session ID가 일치한다면, 해당 ID는 A라는 유저의 것이라는 것을 알게 됩니다.

중요한 것은, 유저 정보가 모두 서버에 저장된다는 것입니다. 즉, 여기서 쿠키는 세션 ID를 주고 받기 위한 매개체일 뿐입니다.

(3) 쿠키의 한계

쿠키는 IOS, 안드로이드에 없습니다. 그래서 "토큰"을 사용합니다.

  • 토큰은 단지 조금 복잡한 String입니다.
  • 서버에 토큰을 보내면 세션 DB에서 해당 토큰과 일치하는 유저를 찾습니다.
  • 현재 로그인한 유저들의 모든 session ID를 DB에 저장하는 것입니다.

3. JWT의 등장

웹 토큰 중 가장 유명한 JWT에 대해 알아봅시다.

  • 유저 인증을 위한 세션 DB가 없어도 됩니다.
  • 서버는 유저 인증을 위해서 많은 일을 하지 않아도 됩니다.
  • JWT에선 유저를 인증하는데 필요한 정보를 토큰에 저장합니다.
  • 페이지를 요청하면, 서버는 해당 토큰이 유효한지 검증합니다.
  • JWT는 암호화되지 않아서, 누구나 해당 데이터를 볼 수 있습니다.

4. 결론

  • 쿠키는 단지 데이터 전달을 위한 매개체일 뿐입니다.
  • 서비스가 더 커져서 유저 계정을 더 잘 관리하고 싶다면 세션으로 갈아타는 것을 고려할 수 있습니다.
  • 세션으로 유저를 관리한다면, 세션 DB에서 악의적인 유저의 세션 ID를 삭제하는 등의 작업이 가능합니다.

0개의 댓글