Agents: - content-analyst: scan static content, design JPA entities - content-db-engineer: implement Entity/Repo/Controller/Hook - admin-ui-builder: implement AdminXxx.jsx + sidebar + routes Skills: - homepage-cms-orchestrator: E2E pipeline orchestrator - content-db-engineer: Spring Boot + React implementation guide - admin-ui-builder: AdminHistory.jsx pattern reference CLAUDE.md: homepage project context + harness pointer Next DB targets: Reference, FAQ, Partner, KpiStat, CeoGreeting, OrgDept Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
147 lines
4.8 KiB
Markdown
147 lines
4.8 KiB
Markdown
---
|
|
name: homepage-cms-orchestrator
|
|
description: "지오정보기술 홈페이지(zioinfo-web) 콘텐츠 DB 관리 오케스트레이터. 하드코딩된 FAQ·레퍼런스·파트너사·KPI통계·CEO인사말·조직도·핵심가치·솔루션 설명을 DB로 전환하고 관리자 UI를 구현한다. 다음 상황에서 반드시 사용: (1) '홈페이지 XXX를 DB로', '관리자에서 관리 가능하게', 'FAQ DB화', '레퍼런스 CRUD 추가' 요청; (2) 신규 콘텐츠 항목 DB 전환; (3) 관리자 페이지 추가; (4) 기존 구현 수정·보완; (5) '다시 실행', '업데이트', '수정', '보완' 요청. 현재 DB 관리 중: 뉴스, 채용공고, 회사연혁, 문의, 회원."
|
|
---
|
|
|
|
# 홈페이지 CMS 오케스트레이터
|
|
|
|
**실행 모드:** 파이프라인 (서브 에이전트)
|
|
`content-analyst` → `content-db-engineer` → `admin-ui-builder` 순차 실행
|
|
|
|
---
|
|
|
|
## Phase 0: 컨텍스트 확인
|
|
|
|
요청 분류:
|
|
- **신규 DB 전환**: "XXX를 DB로 관리해줘" → Phase 1-3 전체 실행
|
|
- **관리자 UI만**: "관리자 페이지 추가해줘" → Phase 3만
|
|
- **기존 수정**: "XXX 수정해줘" → 해당 Phase만
|
|
|
|
현재 DB 관리 중인 항목 (건너뜀):
|
|
- 뉴스/공지 (`/api/admin/news`)
|
|
- 채용공고 (`/api/admin/recruit`)
|
|
- 회사연혁 (`/api/admin/history`)
|
|
- 문의 (`/api/admin/inquiries`)
|
|
- 회원 (`/api/admin/members`)
|
|
|
|
---
|
|
|
|
## Phase 1: 분석 (content-analyst)
|
|
|
|
대상 항목 파악:
|
|
```
|
|
frontend/src/pages/{Page}.jsx 읽기
|
|
→ 하드코딩 배열/객체 식별
|
|
→ DB화 우선순위 산정
|
|
→ JPA 엔티티 설계안 작성
|
|
```
|
|
|
|
**HIGH 우선순위 구현 목록:**
|
|
|
|
| 항목 | 파일 | 엔티티명 | 테이블명 | API |
|
|
|------|------|---------|---------|-----|
|
|
| 구축 레퍼런스 | Business.jsx | `Reference` | tb_reference | /api/references |
|
|
| FAQ | Support.jsx | `Faq` | tb_faq | /api/faqs |
|
|
| 파트너사 | Business.jsx | `Partner` | tb_partner | /api/partners |
|
|
| KPI 통계 | Home.jsx | `KpiStat` | tb_kpi_stat | /api/stats |
|
|
|
|
**MEDIUM 우선순위:**
|
|
|
|
| 항목 | 파일 | 엔티티명 | 테이블명 | API |
|
|
|------|------|---------|---------|-----|
|
|
| CEO 인사말 | Company.jsx | `CeoGreeting` | tb_ceo_greeting | /api/ceo-greeting |
|
|
| 핵심 가치 | Company.jsx | `CoreValue` | tb_core_value | /api/core-values |
|
|
| 조직도 부서 | Company.jsx | `OrgDept` | tb_org_dept | /api/org-depts |
|
|
| 솔루션 기능 | SolutionPage.jsx | `SolutionFeature` | tb_solution_feature | /api/solutions/{type}/features |
|
|
|
|
---
|
|
|
|
## Phase 2: 구현 (content-db-engineer)
|
|
|
|
`content-db-engineer` 스킬 참조하여:
|
|
|
|
```
|
|
1. Entity 파일 생성
|
|
2. Repository 인터페이스 생성
|
|
3. ApiController에 GET 엔드포인트 추가
|
|
4. AdminController에 CRUD 추가
|
|
5. DataInitializer에 initXxx() 추가 (기존 하드코딩 데이터 시딩)
|
|
6. 프론트 페이지에 useXxx() 훅 추가, 정적 배열 제거
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 3: 관리자 UI (admin-ui-builder)
|
|
|
|
`admin-ui-builder` 스킬 참조하여:
|
|
|
|
```
|
|
1. AdminXxx.jsx 생성 (AdminHistory.jsx 패턴)
|
|
2. AdminLayout.jsx NAV 배열에 메뉴 추가
|
|
3. App.jsx lazy import + Route 추가
|
|
4. 빌드 검증 (vite build)
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 4: 배포
|
|
|
|
```bash
|
|
# 1. 로컬 빌드 검증
|
|
cd workspace/zioinfo-web/frontend
|
|
node_modules/.bin/vite.cmd build --outDir C:\Temp\zioinfo-build
|
|
|
|
# 2. 서버 배포 (deploy_history.py 패턴)
|
|
python C:\GUARDiA\deploy_history.py
|
|
```
|
|
|
|
---
|
|
|
|
## 관리자 URL 목록
|
|
|
|
| 항목 | 관리자 URL |
|
|
|------|----------|
|
|
| 뉴스/공지 (기존) | /admin/news |
|
|
| 채용공고 (기존) | /admin/recruit |
|
|
| 회사연혁 (기존) | /admin/history |
|
|
| 문의 (기존) | /admin/inquiries |
|
|
| 레퍼런스 (신규) | /admin/references |
|
|
| FAQ (신규) | /admin/faqs |
|
|
| 파트너사 (신규) | /admin/partners |
|
|
| KPI 통계 (신규) | /admin/stats |
|
|
| CEO 인사말 (신규) | /admin/ceo-greeting |
|
|
| 핵심 가치 (신규) | /admin/core-values |
|
|
| 조직도 (신규) | /admin/org |
|
|
|
|
---
|
|
|
|
## 테스트 시나리오
|
|
|
|
**정상 흐름:**
|
|
1. `GET /api/faqs` → FAQ 목록 JSON 반환
|
|
2. 관리자 로그인 → `/admin/faqs` 페이지 접근
|
|
3. FAQ 추가 모달 → 저장 → 목록 갱신
|
|
4. 홈페이지 `/support/*` → API에서 FAQ 동적 로드
|
|
|
|
**에러 흐름:**
|
|
1. API 실패 → 프론트 폴백(FALLBACK 배열) 표시
|
|
2. 인증 없이 POST → 401 반환
|
|
3. 존재하지 않는 ID DELETE → 404 반환
|
|
|
|
---
|
|
|
|
## 테스트 시나리오 (should-trigger)
|
|
|
|
- "FAQ를 DB로 관리하고 싶어"
|
|
- "레퍼런스 관리자에서 추가/삭제 가능하게"
|
|
- "파트너사 목록 DB화해줘"
|
|
- "CEO 인사말 수정할 수 있게 해줘"
|
|
- "홈페이지 통계 수치 관리자에서 바꾸고 싶어"
|
|
|
|
## 테스트 시나리오 (should-NOT-trigger)
|
|
|
|
- "뉴스 작성해줘" → `/admin/news` (기존 구현)
|
|
- "채용공고 수정" → `/admin/recruit` (기존 구현)
|
|
- "홈페이지 디자인 수정" → 직접 CSS 편집
|
|
- "ITSM에 새 기능 추가" → guardia-orchestrator
|