# Baron-Orgchart 데이터 흐름 및 아키텍처

이 문서는 조직도 뷰어 프론트엔드(`baron-orgchart`, OrgFront)와 Baron SSO 통합 인증/백엔드 서버 간의 인증 및 데이터 통신 흐름을 설명합니다.

`baron-orgchart`는 자체적인 데이터베이스나 권한 관리 로직을 가지지 않으며, Baron SSO 백엔드에 전적으로 의존하는 순수 표현 계층(Presentation Layer)으로 동작합니다.

## 아키텍처 및 데이터 흐름도

```mermaid
sequenceDiagram
    participant User as 사용자 (Browser)
    box rgba(173, 216, 230, 0.2) 외부 클라이언트 (표현 계층)
    participant OrgFront as OrgFront<br>(baron-orgchart)
    end
    box rgba(255, 228, 196, 0.2) Baron SSO (통합 인증 및 권한 중앙 서버)
    participant UI as UserFront<br>(SSO 로그인 화면)
    participant Hydra as Ory Hydra<br>(OAuth2/OIDC)
    participant Kratos as Ory Kratos<br>(Identity/Session)
    participant BE as Backend API<br>(baron_backend:3000)
    participant Keto as Ory Keto<br>(권한/조직 관계)
    participant DB as PostgreSQL<br>(메타데이터)
    end

    %% 1. 인증 흐름
    User->>OrgFront: 1. 조직도 웹사이트 접속
    OrgFront->>Hydra: 2. 로그인되지 않음. Authorization Code 요청 (OIDC)
    Hydra-->>User: 3. UserFront(로그인 화면)로 리다이렉트
    User->>UI: 4. ID/비밀번호 입력
    UI->>Kratos: 5. 로그인 검증 및 세션 생성
    UI-->>User: 6. 로그인 성공, OrgFront Callback으로 리다이렉트
    User->>OrgFront: 7. Authorization Code 전달
    OrgFront->>Hydra: 8. Code를 Access Token으로 교환
    Hydra-->>OrgFront: 9. Access Token 발급 완료

    %% 2. 조직도 데이터 요청 흐름
    User->>OrgFront: 10. 조직도 페이지 접근
    OrgFront->>BE: 11. API 호출: GET /user-groups<br>(헤더: Authorization Bearer [Token])
    
    %% 백엔드 내부 데이터 조합
    Note over BE,DB: 백엔드가 조직도 데이터를 취합하는 과정
    BE->>Keto: 12. Token(사용자 ID) 기반 접근 권한 검증
    BE->>DB: 13. 테넌트/부서 트리 메타데이터 조회
    BE->>Keto: 14. 각 부서별 멤버십(Member) ID 조회
    BE->>Kratos: 15. 멤버 ID로 프로필(이름/직급 등) 정보 조회
    
    BE-->>OrgFront: 16. 조합된 최종 조직도 JSON 반환
    Note over OrgFront: 17. 데이터를 바탕으로<br>트리/차트 UI 렌더링 (순수 표현)
    OrgFront-->>User: 18. 조직도 화면 표시
```

## 주요 설명

1. **표현 계층 (파란색 영역):** `baron-orgchart` (OrgFront)는 자체 DB를 조회하지 않고, 브라우저의 요청을 받아 화면을 그리는 역할만 담당하는 React/Vite(또는 유사 프레임워크) 애플리케이션입니다.
2. **통합 관리 (주황색 영역):** 
   * 조직도 웹사이트(OrgFront)에 접근하려면 `Ory Hydra`와 `UserFront`를 통해 먼저 SSO 로그인을 완료해야 합니다.
   * 인증 토큰을 받아 API를 호출하면, **`baron-sso` 백엔드**가 DB, Keto(조직 관계망), Kratos(사용자 프로필) 등 흩어진 데이터를 하나로 뭉쳐(Aggregation) JSON 형태로 내려줍니다.
3. **API Proxy 통신:** `docker-compose.yaml` 설정의 `API_PROXY_TARGET=http://baron_backend:3000` 환경 변수를 통해, OrgFront로 들어온 데이터 API 요청은 모두 안전하게 SSO 백엔드로 프록시(Proxy) 처리됩니다.
