Event-Driven Architecture(EDA) 및 Keycloak 확장을 통한 초대 기반(Invitation-driven) SSO 가입 체계 구축
🏢 Project under 주식회사 바이브컴퍼니 (VAIV): Saas형 B2B 소셜데이터 분석 플랫폼
기존 Keycloak의 단일 인증 구조를 탈피하여 멀티테넌트 격리(Isolation)를 구현하고, EDA 기반 비동기 파이프라인으로 초대형 가입 프로세스를 통합한 엔터프라이즈급 IAM 아키텍처 설계
By 유민호
💡 [B2B 멀티테넌트 인증 플랫폼] Event-Driven Architecture(EDA) 및 Keycloak 확장을 통한 초대 기반(Invitation-driven) SSO 가입 체계 구축
[한 줄 요약] 기존 Keycloak의 단일 인증 구조를 탈피하여 멀티테넌트 격리(Isolation)를 구현하고, EDA 기반 비동기 파이프라인으로 초대 기반 가입 프로세스를 통합한 엔터프라이즈급 IAM 아키텍처 설계
📌 배경 및 문제 상황 (Problem)
- 레거시 인증 모델의 테넌트 격리(Isolation) 한계: 표준 Keycloak 구조는 B2B 멀티테넌트 환경의 Context 격리를 충분히 지원하지 못해, 자율 가입 시 테넌트 간 데이터 접근 권한이 교차될 수 있는 보안 리스크가 있었음.
- 인증 서버와 비즈니스 로직의 강결합 병목: 초대 메일 발송, 테넌트 리소스 프로비저닝, 가입 승인 등 계정 생명주기(Lifecycle)가 인증 서버와 동기식(Synchronous)으로 결합되어 있어 시스템 확장성과 가용성이 저하됨.
- 분산 환경 내 상태 정합성 보장 부재: 신규 사용자가 특정 테넌트에 가입했을 때, 분산된 여러 마이크로서비스(MSA)에 해당 사용자의 테넌트 컨텍스트와 권한을 안전하게 전파할 거버넌스가 부재함.
🛠️ 해결 과정 및 역할 (Action)
1. [Keycloak 인증 코어 확장 및 멀티테넌트 격리 아키텍처 수립]
- 기존 Keycloak의 기본 Realm/Client 구조에서 벗어나, Custom SPI(Service Provider Interface)를 개발하여 테넌트 식별자(Tenant ID) 기반의 Context 격리 메커니즘을 코어 레벨에 이식함.
- OIDC/SAML 인증 트랜잭션 전 과정에 걸쳐 JWT Claim 내에 테넌트 경계(Scope)를 주입하도록 설계하여, 인증 인프라 자체에서 타 테넌트로의 횡적 이동(Lateral Movement)을 차단함.
2. [EDA 기반 초대 기반(Invitation-driven) 가입 프로세스 래핑 및 통합]
- 공개된 회원가입 폼을 제거하고, 초대 토큰(Invitation Token) 소지자만 특정 테넌트 영역으로 진입할 수 있도록 전체 가입 프로세스를 폐쇄형(Invitation-driven)으로 래핑(Wrapping)함.
- Event-Driven Architecture(EDA) 도입: Keycloak Custom Event Listener를 구현하여 '초대장 발송 - 토큰 검증 - 최종 가입'으로 이어지는 라이프사이클을 이벤트(Event) 스트림으로 추상화함.
- 분산 메시지 브로커(Kafka)를 통해 인증 이벤트를 발행(Publish)하여, 인프라 로직(Keycloak)과 비즈니스 로직(도메인별 프로비저닝)의 결합도를 분리(Decoupling)함.
3. [지속 가능한 분산 인증 거버넌스 및 정합성 보장 정책]
- 비동기 환경에서의 최종 상태 정합성(Eventual Consistency)을 보장하기 위해, 이벤트 페이로드 처리 시 멱등성(Idempotency) 키를 강제하고 Dead Letter Queue(DLQ)를 활용한 글로벌 에러 복구 정책을 확립함.
- 초대 토큰 만료(TTL) 및 1회성 사용 규칙을 중앙화된 정책으로 관리하여, 재생 공격(Replay Attack)을 방지하는 Zero Trust 보안 체계를 구축함.
📈 업무 성과 (Result)
- 초대 기반의 가입 프로세스를 Keycloak과 EDA로 통합함으로써, B2B 고객 온보딩 시 발생하던 계정 프로비저닝 오류와 수동 작업을 줄였습니다.
- 인증 트랜잭션과 MSA 도메인 로직을 이벤트(Event) 기반으로 분리하여, 새로운 서비스 파이프라인 추가 시 인증 서버 수정 없이 확장할 수 있는 구조를 만들었습니다.
- 테넌트 격리(Isolation) 정책을 Keycloak 코어에 내재화하여 서비스 간 보안 정합성을 확보하고, 반복되던 권한 검증 보일러플레이트 코드를 줄였습니다.