JWT를 써보자 - JWT(2)

후니·2023년 7월 28일
0

JWT

목록 보기
2/2
post-thumbnail

업데이트

* 한 번에 다 쓸 시간이 없어 지속적으로 업데이트하는 방향으로 작성하도록 하겠습니다.
  • 2023-07-28, 최초 작성

왜 JWT를...?

지금까지 세션 기반의 프로젝트만 진행하다가 최근에 개발 방향이 MSA 구조로 변경되고, 다중화로 인해 사용자 정보를 검증하는 문제가 발생하여 JWT를 적용해볼 기회가 생겼다.

# MSA, 다중화는 어떤 문제가 있나?

먼저 MSA 구조는 하나의 서비스를 여러 모듈로 나누어 분리시킨 구조이다. 이 과정에서 발생하는 문제점은 최초 사이트에 접속하여 로그인한 사용자가 모듈로 분리된 서비스를 이용하려고 할 때 해당 모듈에서는 사용자의 인증을 어떻게 할 것인가?이다.

즉, 사용자가 모듈A 서비스에 로그인하여 모듈B 서비스를 이용하고자 할 때, 사용자의 정보는 최초 로그인한 모듈A에만 저장되어 있기 때문에 모듈B에서는 사용자의 정보를 알 수 없다는 것이다.

다중화 구조는 동일한 서비스를 여러 서버에서 각각 실행하여 서비스하는 것이다. 즉 서비스를 A서버, B서버, C서버에 각각 설치하여 동일한 서비스가 3개 실행된 상태로, 하나의 서버에 트래픽이 몰리지 않게 해주며, 만약 서버에 장애가 발생하여 서비스가 죽더라도 다른 서버가 대신 요청을 처리해줄 수 있는 구조이다. 이 과정에서 발생하는 문제점은 사용자의 요청에 따라 처리해주는 서버가 달라지는 경우에 어떻게 사용자 정보를 물리적으로 분리된 서버들이 알 수 있는가?이다.

즉, 사용자가 서비스에 최초 로그인 시 서버A가 해당 요청을 처리했다면, 사용자의 정보는 서버A에 저장되고, 다음 기능을 사용자가 요청했을 때 해당 요청을 사용자 정보를 가진 서버A가 아니라 서버B에서 처리한다면, 서버B는 사용자의 정보를 알 수 없다는 것이다.

# 세션과 JWT의 해결 방안

세션을 사용하는 경우엔 보통 세션 클러스터링을 이용한다. 사용자의 정보를 해당 서버가 아닌 외부 저장소에 저장하고 모든 분산된 모듈, 다중화 서버들이 해당 저장소에서 사용자의 정보를 가져와 알 수 있는 것이다.

JWT는 사용자의 정보를 사용자 본인이 직접 가지고 있다가 요청 시 서버에 보내주는 것이다. 서버는 사용자가 보낸 정보를 토대로 검증을하고 해당 정보를 사용하게 된다. 이 뜻은 서버가 사용자 정보를 직접 관리하지 않기 때문에 분산된 모듈, 다중화 서버들은 사용자가 보낸 정보를 가지고 사용하면 되는 것이다. 물론 이 과정에서 해당 정보를 검증는 과정들이 필요하다.

적용하며 생긴 궁금증!

먼저 나는 JWT에 대해서 무지했기 때문에, 적용 전 생각하는 단계부터 궁금한 것들이 생기기 시작했다.

# 왜 세션이 아닌 JWT인가?

처음에는 세션도 클러스터링이 되는데 왜 JWT를 사용해야할까?에 대한 의문이 들었다.

profile
-ing

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기