zioinfo-web/.claude/skills/homepage-cms-orchestrator/SKILL.md
DESKTOP-TKLFCPRython 06568073f2 feat(harness): homepage CMS harness for DB content management
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>
2026-05-31 18:02:16 +09:00

4.8 KiB

name description
homepage-cms-orchestrator 지오정보기술 홈페이지(zioinfo-web) 콘텐츠 DB 관리 오케스트레이터. 하드코딩된 FAQ·레퍼런스·파트너사·KPI통계·CEO인사말·조직도·핵심가치·솔루션 설명을 DB로 전환하고 관리자 UI를 구현한다. 다음 상황에서 반드시 사용: (1) '홈페이지 XXX를 DB로', '관리자에서 관리 가능하게', 'FAQ DB화', '레퍼런스 CRUD 추가' 요청; (2) 신규 콘텐츠 항목 DB 전환; (3) 관리자 페이지 추가; (4) 기존 구현 수정·보완; (5) '다시 실행', '업데이트', '수정', '보완' 요청. 현재 DB 관리 중: 뉴스, 채용공고, 회사연혁, 문의, 회원.

홈페이지 CMS 오케스트레이터

실행 모드: 파이프라인 (서브 에이전트) content-analystcontent-db-engineeradmin-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: 배포

# 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