# Microservice 아키텍처 사례

Keycloak은 여러 마이크로서비스 간의 인증·인가 작업을 통합적으로 관리할 수 있는 솔루션을 제공한다. 마이크로서비스 아키텍처에서는 애플리케이션이 다수의 독립된 서비스로 나뉘어 각각의 기능을 담당하게 되며, 각 서비스는 자체적으로 확장성과 독립 배포가 가능해야 한다. 이러한 구조에서 Keycloak을 이용하면 분산된 환경에서도 중앙 집중형 사용자 인증·인가 체계를 갖출 수 있다.

마이크로서비스 환경에서 Keycloak을 연동하기 위해 가장 먼저 고려해야 할 점은 인증 흐름과 토큰 분배 방식이다. 일반적으로 마이크로서비스 아키텍처에서는 게이트웨이 패턴을 적용하거나, 개별 서비스가 직접 Keycloak의 토큰 검증 엔드포인트와 통신하도록 설계한다. 다음은 대표적인 연동 방안들이다.

1. API 게이트웨이와의 연동 API 게이트웨이를 통해 외부의 요청이 들어오면, 게이트웨이가 Keycloak 서버와 연동하여 인증·인가를 수행한 뒤, 유효한 토큰이 포함된 요청만 각 마이크로서비스에 전달하는 방식이다. 게이트웨이는 Access Token을 Header로 전달하거나 필요한 경우 토큰을 검사하고, 만료 등의 이유로 실패 시 Keycloak 인증을 다시 수행한다.
   * 이 방식을 사용하면 마이크로서비스는 인증 로직을 최소화하고 비즈니스 로직에 집중할 수 있다.
   * 게이트웨이에서 전역 정책(예: 특정 경로별 권한 정책, 인증 실패 시 에러 응답 등)을 통합 적용할 수 있어 운영이 단순해진다.
   * 단, 게이트웨이 자체가 단일 장애점(Single Point of Failure)이 되지 않도록 이중화나 부하 분산을 고려해야 한다.
2. 각 마이크로서비스별 Keycloak 어댑터 적용 마이크로서비스마다 Keycloak 클라이언트 어댑터(Keycloak Adapter)를 직접 적용하고, 사용자 요청에 포함된 토큰을 검증하는 방식이다. 이 경우 API 게이트웨이 없이도 서비스 간 통신 시에도 동일한 인증·인가 프로세스를 유지할 수 있다.
   * 분산 환경에서 서비스가 서로 통신할 때에도 동일한 토큰을 기반으로 권한을 확인할 수 있다.
   * 각 서비스가 Keycloak 서버와 직접 통신하게 되므로, 서비스별 Keycloak 설정(클라이언트 ID, 시크릿, 리소스 보호 정책 등)을 관리해야 한다.
   * 서비스별로 인증·인가 로직이 나누어져 있으므로, 정책 변경 시에는 각 서비스의 설정을 재배포하거나 관리해야 하는 부담이 있다.

마이크로서비스에서 Keycloak을 도입하면, 모든 서비스가 일관된 인증 체계를 사용하게 되어 보안 모델이 단순화된다. 또한 사용자는 단 한 번의 로그인으로 마이크로서비스 전반의 리소스 접근 권한을 얻을 수 있다(SSO). 그러나 토큰의 유효 기간, 자동 재인증 정책, 서비스 간 통신 시 토큰 전달 방식 등을 사전에 충분히 설계해야 한다.

고려해야 할 구체적인 사항은 다음과 같다.

* **토큰 전파 방법**: 외부 사용자로부터 받은 Access Token을 내부 서비스 간 호출에서도 그대로 전달할지, 혹은 서비스 간 호출을 위한 별도의 서비스 계정(Service Account) 토큰을 사용할지 결정해야 한다.
* **권한 관리 전략**: 사용자별 권한 모델을 Keycloak 내의 Roles, Groups, Realms 등으로 어떻게 구성할지 결정해야 한다. 마이크로서비스별로 Resource와 Scope를 정의하고, Keycloak의 Authorization Services를 통해 세밀한 인가 정책을 관리할 수도 있다.
* **토큰 리프레시 정책**: 토큰 만료 시점을 어떻게 설정할지, Refresh Token을 어떤 방식으로 사용할지 결정해야 한다. 자주 갱신되는 서비스를 위해서는 짧은 Access Token 유효 기간과 충분히 긴 Refresh Token을 병행하는 방식을 쓸 수 있다.
* **오버헤드 관리**: 분산된 환경에서 각 서비스가 매번 Keycloak에 토큰 검증 요청을 보내는 것은 네트워크 오버헤드를 높인다. 로컬 캐싱(Local Caching) 또는 Keycloak가 제공하는 OIDC 표준 토큰 검증 기능을 활용하여 검증 횟수를 줄일 수 있다.

마이크로서비스 아키텍처에서 Keycloak 연동은 중앙 집중식 보안을 실현할 수 있는 강력한 수단이다. 그러나 서비스 분산으로 인해 인증 흐름이 복잡해질 수 있으므로, 게이트웨이를 통해 인증 로직을 집약하거나, 각 서비스에 Keycloak 어댑터를 배포하는 등 환경에 맞는 전략을 세워야 한다. 이를 통해 확장성과 보안성을 모두 만족하는 마이크로서비스 기반 애플리케이션을 구축할 수 있다.
