로그인 처리를 하던 도중 세션과 토큰의 차이점에 대해서 정리해 보고자 한다.
서버(세션)
- 기존 인증 시스템은 서버 기반의 인증 방식으로 서버 측에서 사용자의 정보를 기억해야 한다.
- 서버가 사용자들의 정보를 기억하기 위해서 세션을 유지해야 하는데, 메모리 또는 디비를 통해 관리한다.
- 이러한 서버를 Sateful 서버라고 한다.
- 이러한 세션 인증 방식은 다음과 같은 문제점을 가지고 있다.
- 세션
- 사용자가 인증을 할 때 서버는, 이 정보를 저장해야 하고, 이를 세션이라고 부른다.
- 대부분의 경우에는 메모리에 저장하는데, 로그인 중인 사용자가 늘어날 때, 서버의 RAM 에 부하가 걸리게 된다.
- 이를 위해 디비에 저장하고 하는데, 디비에 무리를 줄 수 있다.
- 확장성
- 더 많은 트래픽을 처리해야 할 때, 세션을 사용한다면 세션을 분산시키는 시스템을 설계해야 하지만 이 과정은 매우 어렵고 복잡하다;;;
- CORS(Cross-Origin Resource Sharing)
- 웹에서 세션을 관리할 때 자주 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있다. 때문에 쿠키를 여러 도메인에서 관리하는 것은 번거롭다.
- 세션
TOKEN
- 토큰 기반의 인증 시스템은 인증 받은 사용자에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 유효성 검사를 한다.
- 이러한 방식은 서버가 세션을 유지하지 않고 클라이언트 측에서 들어오는 요청으로 작업을 처리한다.
- 서버 기반의 인증 시스템과 달리 stateless 한 방식이다.
-
- 사용자가 아이디와 비밀번호로 로그인 한다.
- 서버 측에서 해당 정보를 검증한다.
- 정보가 맞다면 서버측에서 Signed토큰을 발급한다. (Signed는 해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 Signature 를 가지고 있는 것)
- 클라이언트 측에서는 전달받은 토큰을 저장해두고, 서버에 요청을 할 때마다 해당 토큰을 서버에 함께 전달한다. (이때 http 요청 헤더에 토큰을 포함시킴)
- 서버는 토큰을 검증하고 요청에 응답한다.다음과 같은 방식을 수행한다.
- 토큰 방식은 다음과 같은 이점을 가지고 있다.
- 무상태성(stateless) & 확장성(Scalability)
- 토큰은 클라이언트 측에 저장되기 때문에 서버는 완전히 stateless 하며, 클라이언트와 서버의 연결 고리가 없기 때문에 확장하기에 매우 적합하다.
⇒ 만약 사용자 정보가 서버 세션에 저장된 경우, 서버를 확장하려면, 해당 사용자는 처음 로그인 했었던 서버에만 요청을 받도록 설정을 해주어야 한다. 하지만 토큰을 사용하면, 어떠한 서버로 요청이 와도 상관없음~
- 토큰은 클라이언트 측에 저장되기 때문에 서버는 완전히 stateless 하며, 클라이언트와 서버의 연결 고리가 없기 때문에 확장하기에 매우 적합하다.
- 보안성
- 클라이언트가 서버로 요청을 보낼 때 더 이상 쿠키를 전달하지 않기 때문에 쿠키 사용에 의한 취약점은 사라진다 하지만 토큰 환경의 취약점을 존재할 수 있기에 이에 대비해야 한다.
- 여러 플랫폼 및 도메인
- 서버 기반 인증 시스템의 문제 중 하나인 CORS 문제를 해결할 수 있다.
- 서비스 규모가 커지게 되면, 여러 디바이스를 호환시키고, 더 많은 종류의 서비스를 제공하게 된다.
- 토큰을 사용하면 어떤 디바이스, 어떤 도메인에서도 토큰의 유효성 검사를 진행한 후 처리가 가능하다.
- 무상태성(stateless) & 확장성(Scalability)
다음 포스팅에서는, 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 |