세션과 토큰

2022. 6. 27. 20:07·CS/네트워크

로그인 처리를 하던 도중 세션과 토큰의 차이점에 대해서 정리해 보고자 한다.

 

서버(세션)

  • 기존 인증 시스템은 서버 기반의 인증 방식으로 서버 측에서 사용자의 정보를 기억해야 한다.
  • 서버가 사용자들의 정보를 기억하기 위해서 세션을 유지해야 하는데, 메모리 또는 디비를 통해 관리한다.
  • 이러한 서버를 Sateful 서버라고 한다.

세션의 동작 방식

  • 이러한 세션 인증 방식은 다음과 같은 문제점을 가지고 있다.
    1. 세션
      • 사용자가 인증을 할 때 서버는, 이 정보를 저장해야 하고, 이를 세션이라고 부른다.
      • 대부분의 경우에는 메모리에 저장하는데, 로그인 중인 사용자가 늘어날 때, 서버의 RAM 에 부하가 걸리게 된다.
      • 이를 위해 디비에 저장하고 하는데, 디비에 무리를 줄 수 있다.
    2. 확장성
      • 더 많은 트래픽을 처리해야 할 때, 세션을 사용한다면 세션을 분산시키는 시스템을 설계해야 하지만 이 과정은 매우 어렵고 복잡하다;;;
    3. CORS(Cross-Origin Resource Sharing)
      • 웹에서 세션을 관리할 때 자주 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있다. 때문에 쿠키를 여러 도메인에서 관리하는 것은 번거롭다.
    ⇒ 이러한 문제를 해결하기 위해서 토큰 기반 인증 시스템을 사용한다.

TOKEN

  • 토큰 기반의 인증 시스템은 인증 받은 사용자에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 유효성 검사를 한다.
  • 이러한 방식은 서버가 세션을 유지하지 않고 클라이언트 측에서 들어오는 요청으로 작업을 처리한다.
  • 서버 기반의 인증 시스템과 달리 stateless 한 방식이다.
    • 사용자가 아이디와 비밀번호로 로그인 한다.
    • 서버 측에서 해당 정보를 검증한다.
    • 정보가 맞다면 서버측에서 Signed토큰을 발급한다. (Signed는 해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 Signature 를 가지고 있는 것)
    • 클라이언트 측에서는 전달받은 토큰을 저장해두고, 서버에 요청을 할 때마다 해당 토큰을 서버에 함께 전달한다. (이때 http 요청 헤더에 토큰을 포함시킴)
    • 서버는 토큰을 검증하고 요청에 응답한다.다음과 같은 방식을 수행한다.

토크의 동작 방식

  • 토큰 방식은 다음과 같은 이점을 가지고 있다.
    1. 무상태성(stateless) & 확장성(Scalability)
      • 토큰은 클라이언트 측에 저장되기 때문에 서버는 완전히 stateless 하며, 클라이언트와 서버의 연결 고리가 없기 때문에 확장하기에 매우 적합하다.
        ⇒ 만약 사용자 정보가 서버 세션에 저장된 경우, 서버를 확장하려면, 해당 사용자는 처음 로그인 했었던 서버에만 요청을 받도록 설정을 해주어야 한다. 하지만 토큰을 사용하면, 어떠한 서버로 요청이 와도 상관없음~
    2. 보안성
      • 클라이언트가 서버로 요청을 보낼 때 더 이상 쿠키를 전달하지 않기 때문에 쿠키 사용에 의한 취약점은 사라진다 하지만 토큰 환경의 취약점을 존재할 수 있기에 이에 대비해야 한다.
    3. 여러 플랫폼 및 도메인
      • 서버 기반 인증 시스템의 문제 중 하나인 CORS 문제를 해결할 수 있다.
      • 서비스 규모가 커지게 되면, 여러 디바이스를 호환시키고, 더 많은 종류의 서비스를 제공하게 된다.
      • 토큰을 사용하면 어떤 디바이스, 어떤 도메인에서도 토큰의 유효성 검사를 진행한 후 처리가 가능하다.

 

다음 포스팅에서는, JWT(Json Web Token) 에 대해서 알아보겠습니다!

'CS > 네트워크' 카테고리의 다른 글

[IT 엔지니어를 위한 네트워크 입문] Chapter1 네트워크 시작하기  (1) 2023.01.10
JWT(Json Web Token)  (0) 2022.06.27
리다이렉션?  (0) 2022.06.01
컴퓨터는 인터넷에서 어떻게 통신할까?  (0) 2022.05.30
포트 포워딩  (0) 2022.04.16
'CS/네트워크' 카테고리의 다른 글
  • [IT 엔지니어를 위한 네트워크 입문] Chapter1 네트워크 시작하기
  • JWT(Json Web Token)
  • 리다이렉션?
  • 컴퓨터는 인터넷에서 어떻게 통신할까?
gugbab2
gugbab2
국밥과 커피를 사랑하는 개발자 gugbab2 입니다.
  • gugbab2
    개발하는 프로 국밥러
    gugbab2
  • 전체
    오늘
    어제
    • 분류 전체보기 (52)
      • 프로젝트 (5)
      • 생각정리 (0)
      • Backend (3)
        • 소소한 백엔드 개발 이야기 (2)
        • Spring (1)
        • JPA (0)
      • 언어 (13)
        • Java (13)
      • CS (17)
        • 네트워크 (17)
      • 아키텍처 (14)
        • OOP (14)
        • TDD (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    새해
    github
    객체지향
    방화벽
    MC-LAG
    리뷰
    개발자
    Executor
    설계
    오브젝트
    JWT
    타입
    자바
    의존성
    프로젝트
    비전공
    네트워크
    LACP
    개발
    공부하자
    비동기
    언어
    하드웨어
    개발블로그
    동시성
    토큰
    책
    제네릭
    객체
    스위치
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gugbab2
세션과 토큰
상단으로

티스토리툴바