# [Master Plan] 프론트엔드 모노레포 통합 및 공용 모듈 마이그레이션

## 1. 개요 (Overview)
현재 `adminfront`, `devfront`, `orgfront` 세 개의 프론트엔드 프로젝트는 동일한 기술 스택을 사용함에도 불구하고 코드가 각자 복제되어 관리되고 있습니다. 이를 **NPM Workspaces 기반의 모노레포** 구조로 개편하여 중복을 제거하고, 기술적 일관성을 확보하는 것이 본 설계의 목적입니다.

---

## 2. 아키텍처 설계 (Architecture)

### 2.1. 디렉토리 구조
프로젝트 루트를 Workspace로 설정하고, 모든 앱과 공용 모듈을 `packages/` 하위로 통합 관리합니다.

```text
baron-sso/
├── package.json               # [New] 루트 레벨 Workspace 및 의존성 관리
├── packages/                  # 재사용 가능한 내부 패키지
│   ├── shared-ui/             # Shadcn UI, 제네릭 AppLayout, 브랜드 자산(로고/아이콘)
│   ├── shared-utils/          # apiClient 팩토리, i18n 엔진, 공용 로케일(사전 병합)
│   ├── shared-auth/           # OIDC 설정, AuthGuard 본체, 세션 관리(Sliding Session)
│   ├── shared-types/          # 도메인 모델 및 API TypeScript 타입
│   └── shared-config/         # Tailwind, Biome, TSConfig 공통 설정
├── adminfront/                # Feature 중심 유지 + Shared 패키지 참조
├── devfront/                  # App Shell 공유 + Shared 패키지 참조
└── orgfront/                  # App Shell 공유 + Shared 패키지 참조
```

### 2.2. 모노레포 도입의 이유 (Why Workspaces?)
1.  **깔끔한 임포트**: `../../common` 같은 상대 경로 대신 `@shared/ui`와 같은 패키지 이름으로 참조 가능.
2.  **의존성 단일화**: 모든 앱이 동일한 라이브러리 버전을 사용하여 런타임 에러 방지.
3.  **설정 자동화**: Vite와 TypeScript가 로컬 패키지를 자동으로 인식하여 HMR 및 타입 체킹 지원.

---

## 3. 핵심 기술 설계 (Technical Governance)

### 3.1. 의존성 관리 (Single Version Policy)
- `react`, `react-router-dom`, `tailwindcss`, `@tanstack/react-query` 등 핵심 라이브러리 버전을 루트 `package.json`에서 고정 관리합니다.
- 각 패키지는 필요한 경우에만 별도 의존성을 가지며, 가능한 루트 버전을 따릅니다.

### 3.2. i18n 및 에셋 전략
- **동적 병합(Dictionary Merge)**: 공용 문구(Shared)를 먼저 로드하고, 앱별 특화 문구를 그 위에 덮어쓰는(Merge) 로직을 `shared-utils`에서 제공합니다.
- **자산 중앙화**: 브랜드 로고, 파비콘 등 공통 정적 자산은 `shared-ui/assets`에서 관리합니다.

### 3.3. 제네릭 AppLayout 엔진
- `AppLayout.tsx`는 더 이상 하드코딩된 메뉴를 갖지 않습니다.
- 메뉴(`navItems`), 브랜드 로고, 역할 스위처 표시 여부 등을 **설정 객체(Config)**로 주입받아 렌더링하는 범용 엔진으로 리팩토링합니다.

---

## 4. 실행 로드맵 (Execution Roadmap)

### **[1단계] 인프라 구축 (Infrastructure)**
- 루트 `package.json` Workspace 설정.
- `shared-config` 패키지 생성 및 Tailwind/Biome 설정 중앙화.
- 각 앱에서 `@shared/config`를 참조하도록 설정 변경.

### **[2단계] 기초 모듈 추출 (Base Migration)**
- 중복도가 가장 높은 `components/ui/*`를 `shared-ui`로 이동.
- `apiClient`, `i18n`, `utils` 등 순수 유틸리티 코드를 `shared-utils`로 이동.
- 각 앱의 임포트 경로를 `@shared/*`로 일괄 치환.

### **[3단계] 플랫폼 레이어 통합 (Platform)**
- `AppLayout.tsx`를 제네릭하게 리팩토링하여 `shared-ui`로 이동.
- `AuthGuard`, `LoginPage`, `sessionSliding` 등 인증 관련 핵심 로직을 `shared-auth`로 통합.

### **[4단계] 앱별 적용 및 최적화 (Optimization)**
- `devfront`와 `orgfront`를 우선적으로 공용 레이아웃 기반으로 전환.
- `adminfront`는 비즈니스 로직(Feature)은 유지하되 기반 레이어만 교체.
- 빌드 테스트 및 트리쉐이킹(번들 최적화) 확인.

---

## 5. 기대 효과 (Expected Benefits)
- **관리 비용 절감**: 공통 UI 수정 시 3개 앱에 동시 반영.
- **개발 가속화**: 신규 프론트엔드 프로젝트 시작 시 인프라 세팅 시간 단축.
- **기술적 일관성**: 모든 프론트엔드가 동일한 기술 표준과 디자인 시스템을 공유.
