본문 바로가기
IT지식/Web, Server

[Server] 토큰 기반 인증과 세션 기반 인증을 공부해보자

by five-sun 2022. 12. 17.
728x90

기존의 시스템에서는 서버 기반의 인증방식을 사용했다고 한다. 하지만 시스템의 규모가 커짐에 따라 서버 기반의 인증 방식은 한계점을 보이기 시작했고, 토큰 기반의 인증 방식이 등장하게 되었다. 현대 웹 서비스에서 API를 이용한 웹 서비스를 개발할 때, 토근을 사용하여 사용자들의 인증 작업을 처리하는 것(OAuth)이 기장 좋은 방법이다. 서버 기반과 토큰 기반의 인증 시스템의 차이점을 알아보고 토큰 기반 인증 시스템의 장점을 공부해보자.

 

 서버(세션) 기반의 인증 시스템?

서버 측에서 사용자들의 정보를 기억하고 있어야 하는 방식이다. 사용자들의 정보를 기억하기 위해서 세션을 유지해야 하는데, 메모리나 디스크 또는 데이터베이스 등을 통해 관리한다. 이러한 방식은 클라이언트로부터 요청을 받으면, 클라이언트의 상태를 계속해서 유지하고 이 정보를 서비스에 이용하는데, 이러한 서버를 Sateful 서버라고 한다.

서버 기반 인증 시스템

위와 같은 흐름을 갖는다.

이러한 인증 방식은 소규모 시스템에서는 아직 많이 사용되고 있지만, 웹/앱 어플리케이션이 발달하게 되면서 서버를 확장하기가 어렵다는 문제점을 보이기 시작했다고 한다.

 

문제점?

1. 세션 : 사용자가 인증을 할 때, 서버는 이러한 정보를 저장해야 하고 이를 세션(Session)이라고 한다. 대부분의 경우 메모리 또는 데이터베이스에 저장하는데 사용자가 늘어날 경우에는 서버의 RAM에 부하가 걸리게 되거나 데이터베이스에 무리를 줄 수 있다.

2. 확장성 : 사용자가 늘어나게 되면 더 많은 트래픽을 처리하기 위해 여러 프로세스를 돌리거나 컴퓨터를 추가하는 등 서버를 확장해야 하는데 세션을 사용한다면 세션을 분산시키는 시스템을 설계해야 하므로 확장이 어려워진다.

3. CORS(Cross-Origin Resource Sharing) : 웹 어플리케이션에서 세션을 관리할 때 자주 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있다고 한다. 따라서 쿠키를 여러 도메인에서 관리하는 것이 번거롭다.

 

이러한 문제들 때문에 토큰 기반의 인증 시스템을 사용하게 되었다고 한다.

 

토큰 기반의 인증 시스템이란?

인증 받은 사용자들에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 하여 유효성 검사를 한다. 이러한 시스템에서는 서버나 세션에 사용자의 인증 정보를 유지하지 않고 클라이언트측에서 들어오는 요쳥만으로 작업을 처리한다. 즉, 서버 기반의 인증 시스템과 달리 상태를 유지하지 않으므로 Stateless한 구조를 갖는다. 이러한 토큰 기반의 인증 방식을 통해 수많은 문제점들을 해결할 수 있고 대표적으로 사용자가 로그인 되어있는지 안되어있는지를 신경쓰지 않고 손쉽게 시스템을 확장할 수 있다고 한다.

 

토큰 기반 인증 시스템의 과정

토큰 기반 인승 시스템

1. 사용자가 로그인한다.

2. 서버 측에서 해당 정보를 검증한다.

3. 정보가 정확하다면 서버 측에서 사용자에게 Signed 토큰을 발급한다.

4. 클라이언트 측에서 전달받은 토큰을 저장해두고, 서버에 요청할 때마다 해당 토큰을 서버에 함께 전달한다. 이때 HTTP 요청 헤더에 토큰을 포함한다.

5. 서버는 토큰을 검증하고 응답한다.

 

토큰 기반 인승 시스템의 이점들

1. 무상태성(Stateless)와 확장성(Scalability) : 클라이언트 측에서 토큰이 저장되기 때문에 서버는 환전히 Stateless하며, 확장하기에도 매우 적합하다.

2. 보안성 : 클라이언트가 서버로 요청을 보낼 때, 쿠키를 사용하지 않아도 되므로 쿠기 사용에 의한 취약점이 사라지게 된다. 하지만 토큰 환경의 취약점이 존재할 수 있으므로 대비해야 한다.

3. 확장성(Extensibility) : 시스템 확장뿐만 아니라 로그인 정보가 사용되는 분야의 확장을 의미한다. 예를 들어 OAuth를 사용하는 경우가 있다.

4. 여러 플랫폼 및 도메인 : 서버 기반 인증 시스템의 문제점 중 하나인 CORS를 해결할 수 있다. 토큰을 사용한다면 어떤 디바이스, 어떤 도메인에서도 토큰의 유효성 검사를 진행한 후에 요청을 처리할 수 있다. 이런 구조를 통해서 assests파일(Image, html, css, jss 등)은 모두 CDN에서 제공하고 서버 측에서는 API만 다루도록 설계할 수 있다.

 

 

 

 

출처: https://mangkyu.tistory.com/55

 

[Server] 토큰 기반 인증 VS 서버(세션) 기반 인증

기존의 시스템에서는 서버 기반의 인증방식을 사용하였다. 하지만 시스템의 규모가 커짐에 따라 서버 기반의 인증 방식은 한계점을 보이기 시작하였고, 토큰 기반의 인증 방식이 등장하게 되었

mangkyu.tistory.com

 

728x90