JWT를 보기 전에 우선 인증 방식을 간단하게 알아보자.
사용자의 인증정보를 관리하기 위한 방식으로 크게 두가지가 있다.
첫번째는 세션(서버)기반 인증이고 두번째는 토큰 기반 인증이다.
세션(서버)기반 인증
유저가 로그인을 하면 서버측에서 유저가 현재 로그인 중이라는 인증정보(세션)를 기억하고 있는다.
세션 기반의 인증 시스템은 클라이언트로부터 요청을 받으면, 클라이언트의 상태를 계속 유지하고, 이 정보를 서비스에 이용하는데 이러한 서버를 Stateful 서버라고 한다.
세션 기반 인증의 문제점은 크게 두가지로 볼 수 있다.
1. 세션을 유지해야하는 유저의 수가 많아진다면 성능에 무리가 가게 된다.
2. 서버 확장이 어려워진다. 단순히 서버사양의 업그레이드가 아닌 늘어난 트래픽을 감당하기 위해 여러 프로세스를 돌리거나, 여러 서버 컴퓨터를 추가하여 로드밸런싱을 할때를 의미한다. 세션을 사용하며 분산된 시스템을 설계하는건, 세션의 정보가 분산 된 프로세스간에 동기화가 되야하므로 그 과정이 매우 복잡하다.
토큰 기반 시스템
Stateless. 이는 서버 시스템측에서 유저의 정보를 유지하지 않고, 유저가 회원 인증을 하게 될 때 토큰을 발급하여 유저의 인증을 처리한다.
발급된 토큰에는 토큰의 유효기간, 토큰의 정보를 담고 있으며 해싱 알고리즘을 통해 인증이 되어있기에 서버에서 검증을 통하여 처음 서버가 발급해주었던 정보가 변조되지 않았음을 보장 해 줄 수 있다.
서버 확장에 있어서 매우 용이하다. 서버 시스템이 분산이 되어도 유저는 발급받은 토큰으로 서버에 요청을 하고, 서버는 해당 토큰이 위조된 토큰인지만 검증을 하고, DB 조회도 할 필요 없이 요청을 처리하면 되기 때문이다.
추가적으로 플랫폼간 권한 공유를 할 수 있다. 예를들어 구글/ 페이스북을 통한 소셜 로그인이 가능한 이유 역시 구글/ 페이스북에서 토큰기반인증 시스템을 사용하기 때문이다. 구글/페이스북 플랫폼에서 로그인을 하고, 해당 플랫폼이 토큰을 발급 해주면 우리 백엔드 서버에서는 이를 통해 회원정보를 가져오고 우리쪽 서비스에 계정 생성을 하게 된다.
'Java 웹 프로그래밍' 카테고리의 다른 글
JWT (JSON Web Token) - 3 (0) | 2020.04.28 |
---|---|
JWT (JSON Web Token) - 2 (0) | 2020.04.28 |
자바 스트링, 스트링빌더, 스트링버퍼 Java String, StringBuilder, StringBuffer (0) | 2020.04.03 |
Singleton Pattern 싱글톤 패턴 (0) | 2020.04.03 |
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 에러 (1) | 2020.03.26 |