본 글의 탄생 배경

사내에서 JWT 기반의 인증 인가 시스템을 구현할 기회가 있었다. 당시 프로젝트 개발을 구상하는 단계에서 로그아웃에 대한 이슈가 있었다. 당시 해당 이슈를 정리하고 검토하면서 작성한 글이다.

결론적으로 JWT의 장점을 유지하면서도 가장 효율적인 대안으로 프론트엔드에서의 처리 방법으로 결정했었다.


개요

인증/인가 설계에 있어 JWT 토큰 기반의 방식을 결정하였습니다.

기술 구현에 있어서 토큰을 관리하는 구체적인 방식을 진행하기에 앞서 몇가지 논의 사항이 필요합니다.

쟁점 사항

이슈를 다루기 전에 먼저 JWT 방식에 대한 이해가 필요하여 다음과 같이 정리하였습니다.

❓ JWT 기반 인증의 기존 방식과의 차이

JWT(JSON Web Token) 기반 인증은 전통적인 서버 기반 인증 방식과 여러 면에서 차이가 있습니다.

기존의 방식은 서버, 세션 기반의 인증 방식입니다. 서버는 각 사용자에 대한 세션 정보를 유지하며, 사용자가 로그아웃하거나 세션이 만료될 때까지 이 정보를 관리해야 합니다. 즉, 서버가 사용자의 인증 상태(stateful)를 유지하는 것이 특징입니다.

다음 두 가지가 문제로 지적됩니다.

  1. 유저 증가에 따른 서버 부담 가중
  2. 여러 서버에서의 유저 정보 관리의 어려움 -> MSA 환경에서 확장성 저하

반면, JWT 토큰 기반 인증에서는 비저장(stateless) 방식을 지향합니다. JWT를 사용하면 사용자의 인증 정보가 토큰 형태로 클라이언트에 저장되며, 서버는 상태를 유지할 필요가 없기 때문에 서버의 관리 부담을 줄여줍니다.

토큰 기반 인증 방식은 각 서비스가 독립적으로 운영되어야 하고, 서버 간 상태 정보의 공유가 제한적이기 때문 RESTful API와 마이크로서비스 아키텍처(MSA) 환경에서 유리할 수 있습니다.