# SAM 시스템 개요

> **최종 갱신**: 2026-02-27
> **상태**: Phase 1-B 작성

---

## 1. 프로젝트 개요

**SAM** (Smart Automation Management) — 블라인드/스크린 제조업체용 ERP/MES 통합 시스템

| 항목 | 내용 |
|------|------|
| 서비스명 | SAM |
| 회사명 | (주)코드브릿지엑스 |
| 아키텍처 | Multi-tenant (tenant_id 기반 데이터 격리) |
| DB | MySQL 8.0 (단일 DB `samdb`, 통계 `sam_stat`) |
| 레거시 | 5130.co.kr (PHP 7.3) → SAM으로 마이그레이션 중 |

---

## 2. 어플리케이션 구조

```
SAM/
├── api/       Laravel 12 REST API (PHP 8.4)
├── mng/       Laravel 12 관리자 패널 (PHP 8.4, HTMX + DaisyUI)
├── react/     Next.js 15 사용자 프론트엔드 (React 19)
├── design/    디자인 시스템 (Vite, Storybook)
├── 5130/      레거시 시스템 (PHP 7.3)
├── sales/     영업자 사이트 (추후 개발)
├── docs/      기술 문서
├── planning/  기획 문서
└── docker/    Docker 설정
```

### 앱별 역할

| 앱 | 역할 | 기술 스택 | Git 저장소 |
|----|------|----------|-----------|
| **api** | REST API 서버, 공용/API 전용 DB 마이그레이션 관리 | Laravel 12, PHP 8.4, Sanctum, Swagger | 독립 |
| **mng** | 관리자 패널 (admin.sam.kr 포함) | Laravel 12, PHP 8.4, HTMX, DaisyUI, Vite 7 | 독립 |
| **react** | 사용자 프론트엔드 | Next.js 15, React 19, Tailwind v4, Zustand | 독립 |
| **design** | 디자인 시스템/컴포넌트 | Vite | 독립 |

### 앱 간 관계

```
react (dev.sam.kr)  ──API 호출──→  api (api.sam.kr)  ←──DB 공유──→  mng (mng.sam.kr)
                                         │
                                    MySQL (samdb)
                                         │
                                   5130 (chandj DB)
```

- **api**: 공용 테이블 및 API 전용 테이블의 마이그레이션 관리.
- **mng**: 자체 모델 보유 (185개), MNG 전용 테이블(예: `pmis_*`)의 마이그레이션 자체 관리. api와 동일 DB 사용.
- **react**: Server Actions로 api 호출. DB 직접 접근 없음.

---

## 3. 기술 스택 상세

### api/ (REST API)

| 항목 | 상세 |
|------|------|
| Framework | Laravel 12 |
| PHP | 8.4+ |
| 인증 | Sanctum (Access 120분, Refresh 7일) |
| 권한 | Spatie Permission (RBAC) |
| API 문서 | L5-Swagger (OpenAPI) |
| 큐 | Database Driver |
| 캐시 | Database Driver |
| 규모 | 모델 205, 서비스 179, 컨트롤러 131, FormRequest 271 |
| 마이그레이션 | 458개 (메인 437 + 통계 21) |
| API 도메인 | 18개 라우트 파일, ~876 엔드포인트 |

### react/ (프론트엔드)

| 항목 | 상세 |
|------|------|
| Framework | Next.js 15 (App Router, Turbopack) |
| React | 19 |
| 스타일 | Tailwind CSS v4 |
| UI | shadcn/ui (Radix 기반) 55개 컴포넌트 |
| 상태관리 | Zustand 5 (13 stores) |
| 폼 | React Hook Form + Zod |
| i18n | next-intl (ko, en, ja) |
| 차트 | Recharts |
| PDF | jspdf + Puppeteer |
| 규모 | 페이지 249, 컴포넌트 612, Server Actions 91 |

### mng/ (관리자 패널)

| 항목 | 상세 |
|------|------|
| Framework | Laravel 12 (Blade + HTMX) |
| PHP | 8.4+ |
| 프론트 | HTMX 2 + DaisyUI 5 + Tailwind 3 |
| 빌드 | Vite 7 |
| PDF | TCPDF + FPDI |
| Excel | PhpSpreadsheet |
| 규모 | 컨트롤러 171, 블레이드 436, 모델 185, 서비스 98 |

---

## 4. 핵심 아키텍처 패턴

### Multi-tenancy
- 모든 테넌트 데이터는 `tenant_id`로 격리
- `BelongsToTenant` 트레이트/스코프 필수
- 글로벌 테이블 (users, plans 등)은 예외

### Service-First
- 비즈니스 로직은 반드시 Service 클래스에
- Controller는 라우팅 + FormRequest 검증만 담당
- `ApiResponse::handle()` 통일 응답 포맷

### API 인증
- 글로벌: API Key (모든 요청)
- 사용자: Sanctum Bearer Token
- 내부: HMAC (mng ↔ api 내부 통신)

### FormRequest
- Controller에서 직접 검증 금지
- 모든 입력 검증은 FormRequest 클래스에서

---

## 5. 환경 구성

| 환경 | 도메인 | 위치 | 비고 |
|------|--------|------|------|
| **로컬** | *.sam.kr | Docker (macOS) | 개발용 |
| **개발** | codebridge-x.com | 114.203.209.83 | react만 |
| **스테이지+운영** | TBD | 211.117.60.189 | api, mng, react |

### 로컬 도메인

| 도메인 | 서비스 | 포트 |
|--------|--------|------|
| `dev.sam.kr` | react (Next.js) | 3000 |
| `api.sam.kr` | api (Laravel) | 9000 (FastCGI) |
| `mng.sam.kr` | mng (Laravel) | 9000 (FastCGI) |
| `admin.sam.kr` | mng (동일) | 9000 (FastCGI) |
| `design.sam.kr` | design (Vite) | 3002 |
| `5130.sam.kr` | 5130 (레거시) | 9000 (FastCGI) |

---

## 관련 문서

- **DB 스키마**: [database/README.md](database/README.md)
- **API 구조**: [api-structure.md](api-structure.md)
- **React 구조**: [react-structure.md](react-structure.md)
- **MNG 구조**: [mng-structure.md](mng-structure.md)
- **Docker 설정**: [docker-setup.md](docker-setup.md)
- **보안 정책**: [security-policy.md](security-policy.md)