1
0
forked from baron/baron-sso
Files
baron-sso/IDP_ARCHITECTURE.md
2026-01-27 12:28:39 +09:00

2.7 KiB

Baron SSO IDP 아키텍처 설명

이 문서는 Baron SSO 백엔드에서 IDP(Identity Provider)를 관리하는 핵심 파일들의 역할과 상호작용을 설명합니다. 이 아키텍처의 핵심 목표는 특정 IDP 구현으로부터 비즈니스 로직을 분리하여 유연하고 확장 가능한 구조를 만드는 것입니다.


파일별 역할

1. backend/internal/domain/idp_models.go (설계도 / 계약서)

이 파일은 IdentityProvider 인터페이스와 BrokerUser 표준 사용자 모델을 정의하여, IDP가 제공해야 할 기능과 데이터 구조를 추상화합니다. 시스템이 IDP의 구체적인 구현과 독립적으로 동작하게 합니다.

2. backend/internal/idp/factory.go (부품 공장)

이 파일은 환경 변수(IDP_PROVIDER)에 따라 Descope와 같은 특정 IDP 구현체를 생성하고, 이를 IdentityProvider 인터페이스 타입으로 반환하는 팩토리 역할을 합니다.

3. backend/cmd/server/main.go (조립 라인 / 최종 소비자)

이 파일은 factory.go를 통해 IDP 객체를 초기화하고, idp_models.goBrokerUser 모델과의 호환성을 검증한 후, 애플리케이션의 나머지 부분에서 IDP를 활용하여 인증 및 인가 로직을 수행합니다.


연계 동작 흐름

sequenceDiagram
    participant M as main.go (소비자)
    participant F as factory.go (공장)
    participant D as idp_models.go (계약서)

    M->>F: 1. idp.InitializeProvider() 호출
    F->>F: 2. .env 확인 (IDP_PROVIDER="descope")
    F->>F: 3. Descope 객체 생성 (service.NewDescopeProvider)
    Note over F, D: 생성된 객체는<br/>IdentityProvider 인터페이스를 구현
    F-->>M: 4. IdentityProvider로 포장된 객체 반환
    M->>D: 5. BrokerUser 호환성 검증<br/>(idpProvider.GetMetadata() 호출)
    M->>M: 6. 검증 통과 후 서버 실행

이 아키텍처의 장점

  • 느슨한 결합 (Loose Coupling): main.go는 Descope의 구체적인 구현을 몰라도 되므로, IDP가 변경되어도 main.go 코드는 수정할 필요가 없습니다.
  • 확장성 (Extensibility): 새로운 IDP(예: Keycloak)를 추가하고 싶을 때, IdentityProvider 인터페이스를 구현하는 새로운 서비스와 factory.gocase 문 하나만 추가하면 됩니다.
  • 테스트 용이성 (Testability): 단위 테스트 시, 실제 IDP 대신 가짜(Mock) IdentityProvider 객체를 쉽게 만들어 주입할 수 있습니다.
  • 조기 실패 (Fail-Fast): 서버 시작 시점에 설정을 검증함으로써, 런타임에 발생할 수 있는 치명적인 오류를 사전에 방지합니다.