Develop/FrontEnd
서버 vs 토큰 기반의 인증 방식
KimBangg
2021. 7. 4. 21:09
머릿말
사용에 목적을 두어 JWT를 사용해서, 기술면접에서 이에 대해 올바르게 대답 하지 못했다. 이를 계기로 사용하는 기술에 대해서는 "이유와 목적"을 명확히 해야겠다는 생각이 들었다.
그리하여, 서버 - 토큰 기반 인증과 JWT에 대해서 자세히 알아 보고자 합니다.
시작 하기 전에
HTTP는 다음 특징을 가지고 있습니다.
- Connenctionless: 클라이언트가 요청을 서버에게 보내면 서버는 이에 대한 적절한 응답을 한 후에 연결을 종료합니다.
- Stateless: 서버와 클라이언트와의 연결이 종료된다면 상태 정보는 저장하지 않고 사라집니다.
따라서 위의 특징으로 인해 이벤트를 발생 시킨 유저를 확인 할 수 있는 수단이 필요합니다. 이에따라, 하단의 서버 및 토큰을 기반으로 한 인증 방식이 등장합니다.
1. 서버 기반 인증 시스템
- 서버 기반의 인증 방식은 서버 측에서 사용자들의 정보를 기억하고 있어야 했다.
- 대표적으로 세션을 사용하는 방법이 이에 해당합니다. 유저가 로그인을 하면 서버는 해당 유저의 세션을 만들고 서버의 메모리와 데이터 베이스에 저장합니다.
- 클라이언트로부터 요청을 받으면, 상태를 계속해서 유지하고 이용하는데, 이를 stateful server라고 한다.
서비 기반 인증 방식의 문제점
- 사용자 수가 늘어날수록 세션으로 저장하는 정보가 증가하기에 메모리를 많이 차지하여 과부하가 발생합니다.
- 쿠키는 단일 도메인 및 서브 도메인에서만 작동하기 때문에 여러 도메인에서 관리하는 것은 번거롭습니다 ( = CORS )
- 사용자가 늘어나면, 이를 처리 하기 위해 컴퓨터를 확장 시켜야 한다. 이 때 세션을 분리하는 작업이 필요하지만, 이는 매우 복잡하다.
2. 토큰 기반 인증 방식
- 인증받은 사용자들에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 하여 클라이언트 측에서 유효성을 검사를 한다.
- 즉, 서버에서 고객의 정보를 유지 하지 않기 때문에 이를 Stateless Server라고 부른다.
토큰 기반 인증 방식 작동 방식
- 사용자가 아이디와 비밀번호로 로그인을 한다.
- 서버 측에서 해당 정보를 검증한다.
- 정보가 정확하다면 서버 측에서 사용자에게 Signed 토큰을 발급한다
- 클라이언트 측에서 전달받은 토큰을 저장해두고, 서버에 요청을 할때마다 해당 토큰을 서버에 함께 전달한다. 이때 HTTP 요청 헤더에 토큰을 포함시킨다.
- 서버는 토큰을 검증하고, 요청에 응답한다.
토큰 기반 인증 방식의 장점
- Stateless 하기 때문에, 어떤 서버에 요청해도 상관없다. 즉, 확장(Scalability)에 용이하다.
- (여기서 확장이란, 서버의 처리능력 이라고 생각 하시면 좋습니다. )
- 사용자에게 필요한 권한을 부여함으로써, 사용범위의 확장성(Extensibility)을 증가 시킬 수 있다 (= 소셜 로그인 )
- 여러 도메인에서 공통적으로 사용 될 수 있다.
여태까지 서버와 토큰 기반의 차이를 살펴봄으로써, 왜 "토큰" 방식을 채택하는 것이 좋은지 알게 되었는데요. 다음 게시물에서 JWT 에 대해서 자세히 다루어보겠습니다.