왜 인증 중심으로 MSA 설계를 하는가?

인증 중심으로 MSA를 설계 한다는것은 무엇이고 어떻게 설계해야 할까?
마이크로서비스 아키텍처(MSA)를 도입하면서 가장 먼저 맞닥뜨리는 고민 중 하나는 ‘인증’이다.
단일 애플리케이션 구조에서는 로그인과 권한 관리를 하나의 서버에서 처리할 수 있지만, MSA 환경에서는 각 서비스가 독립적으로 운영되기 때문에 인증과 권한 관리가 복잡해진다.
이때, 인증을 중심에 두고 아키텍처를 설계하는 것이 유리한 전략이 될 수 있다.

1. 인증 중심으로 MSA를 설계?

인증 중심 설계란, 시스템 내 모든 서비스가 인증된 사용자라는 전제 하에 작동하도록 아키텍처를 구성하는 것이다.
인증 로직을 하나의 전담 서비스로 분리하고, 나머지 서비스는 인증 정보를 전달받아 처리에 집중한다.
이로써 각 서비스가 인증을 직접 구현할 필요가 없고, 인증 정책 변경 시 하나의 서비스만 수정하면 된다.

2. 인증의 일관성과 중앙 집중화

여러 서비스가 개별적으로 인증을 구현하게 되면 인증 방식이 달라지고, 보안 취약점이 생길 수 있다.
인증 중심 설계를 통해 인증 로직을 중앙화하면, 다음과 같은 이점이 있다:

  • 정책의 일관성 유지: 하나의 서비스에서 인증 정책을 관리함으로써 전체 시스템에 일관된 인증 규칙을 적용할 수 있다.
  • 보안성 향상: 토큰 기반 인증(OAuth2, JWT 등)을 도입하면, 민감한 사용자 정보가 각 서비스로 퍼지지 않고 안전하게 관리된다.
  • 유지보수의 편의성: 인증 로직이 단일 서비스에 집중되므로, 변경이나 확장이 용이하다.

3. 마이크로서비스 간 인증 정보 전달

MSA에서는 서비스 간 통신이 빈번하다.
이때 사용자 인증 정보를 각 서비스가 어떻게 신뢰하고 처리할지가 중요하다.
인증 중심 설계를 하면, 인증 서비스에서 JWT와 같은 토큰을 발급하고, 이를 다른 서비스들이 검증하는 구조를 갖출 수 있다. 이 방식은 다음과 같은 장점이 있다:

  • 스케일링 유연성: 인증 서비스를 독립적으로 확장 가능하다.
  • 성능 최적화: 토큰 기반 인증은 상태를 서버에 저장하지 않으므로, Stateless한 구조로 고성능을 유지할 수 있다.
  • 서비스 독립성 유지: 인증을 제외한 서비스들은 인증 로직과 무관하게 개발 및 배포가 가능하다.

4. 인증 중심 설계의 예시 흐름

  1. 사용자가 로그인 요청을 인증 서비스에 보낸다.
  2. 인증 서비스가 사용자 정보를 검증하고 JWT를 발급한다.
  3. 사용자는 JWT를 가지고 각 서비스를 호출한다.
  4. 각 서비스는 JWT를 검증하고, 필요한 데이터 처리 후 응답한다.

이러한 구조는 Spring Cloud Gateway, OAuth2, JWT, Spring Security 같은 기술과 잘 어울리며, Kotlin 기반의 마이크로서비스 환경에도 자연스럽게 녹여낼 수 있다.

인증 중심으로 MSA를 설계한 예시 흐름 다이어그램

인증을 중심에 두는 이유

MSA는 확장성과 유연성을 추구하지만, 그만큼 복잡성과 위험도도 높아진다.
특히 인증과 권한 관리는 시스템의 보안과 직결되기 때문에 초기에 전략적으로 설계할 필요가 있다.
인증 중심 설계는 보안, 유지보수, 성능 측면에서 명확한 장점을 제공하며, 장기적인 서비스 운영에도 안정성을 더해준다.

이후 포스트에서는 Kotlin과 Spring Boot 기반으로 실제 인증 서비스를 구현하는 과정을 다루며, 이 설계가 어떻게 코드에 녹아드는지 살펴볼 예정이다.

참고

OAuth2 설명 및 표준 문서
JWT 공식 소개

다음편 보기
Kotlin과 Spring Boot MSA 프로젝트 구조 설계 및 세팅

댓글 남기기