본문 바로가기
Back-End/Security

서버와 토큰 기반 인증 시스템의 차이

by 어렵다어려웡 2022. 4. 15.

서버 기반 인증 시스템

기존 인증의 시스템은 서버측에서 사용자들의 정보를 기억하고 있어야 한다.

사용자의 정보를 기억하려면 세션을 유지해야 했는데, 그러기 위해서는

클라이언트의 정보를 DB 또는 메모리에 저장을 해둬야 한다.

그렇게 해서 클라이언트의 요청을 받으면, 클라이언트의 상태를 계속 유지하면서 정보를 서비스에 이용을 하는데,

이러한 서버를 Stateful 서버라고 한다.

 

대표적인 예시로 Spring Security가 있다.

 

이러한 인증 방식은 소규모 시스템에는 적합할지 모르지만,

요즘에는 MSA 구조로 처리기술에 대한 트렌드가 바뀌면서 오히려 부적합한 인증 시스템으로써 문제가 생기고 있다.

 

  1. 세션

사용자가 인증시 서버가 저장하는 정보를 보통 세션이라고 칭한다.

대부분 메모리에 저장을 하게 되고, 세션에 대한 처리 중 요청이 늘어날 경우

부하가 걸릴 가능성이 높아진다.

 

  2. 확장성

사용자가 늘어나게되면 트래픽을 분산시키는 기술을 써야하는데,

세션을 사용하면 세션을 분산시키는 구조를 구현해야 하지만 복잡하다.

 

그 외에도 순수하게 모바일 애플리케이션과의 API 연동을 생각해보았을 때,

세션과 같은 인증 시스템을 적용시키기에는 부적합하다.

 

그 문제에 대한 해결책으로 토큰 기반의 인증 시스템이 있다.

토큰 기반 인증시스템

인증을 받은 사용자들에게 토큰을 발급하고, 서버에 요청할 때마다 Headers 에 토큰을 함께 전달해서 유효성 검사를 한다.

사용자의 정보를 전달받지 않고 발급한 토큰으로만 요청의 작업을 처리하게 되므로 더이상 상태를 유지할 필요가 없어진다.

토큰을 클라이언트가 가지고 있지만, 클라이언트가 가졌던 쿠키와 다르게 특별한 정보도 포함하지 않고, 쿠키 사용에 대한 보안문제 관련하여 대비할 수 있는 장점이 있으며 여러 플랫폼과의 호환성이 생기기 떄문이다.

 

토큰 기반 인증시스템은 그 예시로 JWT 토큰이 있다.

'Back-End > Security' 카테고리의 다른 글

Spring Security 동작 및 구조에 대한 심화 학습  (0) 2022.09.06
Spring Security + JWT (2)  (0) 2022.04.18
Spring Security + JWT (1)  (0) 2022.04.15
Spring Security 동작 과정  (0) 2022.04.15