업데이트
* 한 번에 다 쓸 시간이 없어 지속적으로 업데이트하는 방향으로 작성하도록 하겠습니다.
- 2023-07-28, 최초 작성
지금까지 세션 기반의 프로젝트만 진행하다가 최근에 개발 방향이 MSA 구조로 변경되고, 다중화로 인해 사용자 정보를 검증하는 문제가 발생하여 JWT를 적용해볼 기회가 생겼다.
먼저 MSA 구조는 하나의 서비스를 여러 모듈로 나누어 분리시킨 구조이다.
이 과정에서 발생하는 문제점은 최초 사이트에 접속하여 로그인한 사용자가 모듈로 분리된 서비스를 이용하려고 할 때 해당 모듈에서는 사용자의 인증을 어떻게 할 것인가?
이다.즉, 사용자가 모듈A 서비스에 로그인하여 모듈B 서비스를 이용하고자 할 때, 사용자의 정보는 최초 로그인한 모듈A에만 저장되어 있기 때문에 모듈B에서는 사용자의 정보를 알 수 없다는 것이다.
다중화 구조는 동일한 서비스를 여러 서버에서 각각 실행하여 서비스하는 것이다. 즉 서비스를 A서버, B서버, C서버에 각각 설치하여 동일한 서비스가 3개 실행된 상태로, 하나의 서버에 트래픽이 몰리지 않게 해주며, 만약 서버에 장애가 발생하여 서비스가 죽더라도 다른 서버가 대신 요청을 처리해줄 수 있는 구조이다.
이 과정에서 발생하는 문제점은 사용자의 요청에 따라 처리해주는 서버가 달라지는 경우에 어떻게 사용자 정보를 물리적으로 분리된 서버들이 알 수 있는가?
이다.즉, 사용자가 서비스에 최초 로그인 시 서버A가 해당 요청을 처리했다면, 사용자의 정보는 서버A에 저장되고, 다음 기능을 사용자가 요청했을 때 해당 요청을 사용자 정보를 가진 서버A가 아니라 서버B에서 처리한다면, 서버B는 사용자의 정보를 알 수 없다는 것이다.
세션을 사용하는 경우엔 보통 세션 클러스터링을 이용한다.
사용자의 정보를 해당 서버가 아닌 외부 저장소에 저장
하고 모든 분산된 모듈, 다중화 서버들이 해당 저장소에서 사용자의 정보를 가져와 알 수 있는 것이다.
JWT는 사용자의 정보를 사용자 본인이 직접 가지고 있다가 요청 시 서버에 보내주는 것이다.
서버는 사용자가 보낸 정보를 토대로 검증을하고 해당 정보를 사용하게 된다. 이 뜻은 서버가 사용자 정보를 직접 관리하지 않기 때문에 분산된 모듈, 다중화 서버들은 사용자가 보낸 정보를 가지고 사용하면 되는 것이다. 물론 이 과정에서 해당 정보를 검증는 과정들이 필요하다.
먼저 나는 JWT에 대해서 무지했기 때문에, 적용 전 생각하는 단계부터 궁금한 것들이 생기기 시작했다.
처음에는
세션도 클러스터링이 되는데 왜 JWT를 사용해야할까?
에 대한 의문이 들었다.
좋은 정보 얻어갑니다, 감사합니다.