--- name: manager-ui description: > GUARDiA 관리자 시스템 React UI를 구현하는 스킬. 네이버 클라우드 콘솔(NCloud Console) 디자인 패턴을 참조하여 대시보드, CMDB, 배포 관리, 사용자 관리 등 관리자 화면을 구축한다. 트리거: 관리자 UI 구현, 페이지/컴포넌트 작성, 화면 설계, 'M-0X 화면', 네이버 클라우드 스타일 적용 요청 시. --- # GUARDiA Manager UI 구현 스킬 ## 기술 스택 ```json { "framework": "React 18 + TypeScript + Vite", "styling": "CSS Modules (Tailwind 선택 가능)", "routing": "react-router-dom v6", "state": "useState/useContext (Redux 금지 — 과함)", "http": "axios 또는 fetch API", "charts": "recharts (경량)", "icons": "lucide-react" } ``` ## 네이버 클라우드 콘솔 디자인 패턴 자세한 컴포넌트 패턴은 `references/ncloud-patterns.md` 참조. ### 필수 레이아웃 구조 ``` ┌─────────────────────────────────────────────────────────┐ │ GNB (Global Navigation Bar) — 60px 고정 │ │ [GUARDiA Manager] [서비스 검색] ─────── [알림] [계정] │ ├──────────────┬──────────────────────────────────────────┤ │ │ │ │ 사이드바 │ 콘텐츠 영역 │ │ (220px) │ ┌─ 브레드크럼 ──────────────────────┐ │ │ │ │ Home > 서버 > 서버 목록 │ │ │ ▸ 대시보드 │ └─────────────────────────────────────┘ │ │ ▾ 인프라 │ ┌─ 페이지 타이틀 + 액션 버튼 ─────────┐ │ │ 서버 관리 │ │ 서버 목록 [+서버 추가] │ │ │ CMDB │ └─────────────────────────────────────┘ │ │ ▾ 배포 │ ┌─ 콘텐츠 ────────────────────────────┐ │ │ 배포 이력 │ │ 테이블 / 카드 / 폼 │ │ │ ▾ 보안 │ └─────────────────────────────────────┘ │ │ API Keys │ │ │ 감사 로그 │ │ │ ▾ 시스템 │ │ │ 설정 │ │ │ LLM 관리 │ │ └──────────────┴──────────────────────────────────────────┘ ``` ### 색상 시스템 (GUARDiA 브랜드 + NCloud 패턴) ```css :root { /* GUARDiA 브랜드 (NCloud의 #03C75A 대신 적용) */ --brand-primary: #1a3a6b; --brand-accent: #4f6ef7; --brand-light: #e8ecff; /* NCloud 콘솔 참조 레이아웃 색상 */ --gnb-bg: #1a1d2e; /* 상단 바 */ --sidebar-bg: #f5f7fa; /* 사이드바 */ --sidebar-hover: #eaeef5; --content-bg: #f0f2f5; /* 콘텐츠 배경 */ --card-bg: #ffffff; --border: #e2e8f0; /* 상태 색상 (NCloud 리소스 상태 배지와 동일) */ --status-running: #00c853; /* 실행중 */ --status-stopped: #9e9e9e; /* 중지 */ --status-error: #f44336; /* 오류 */ --status-pending: #ff9800; /* 진행중 */ /* 텍스트 */ --text-primary: #1e293b; --text-secondary: #64748b; --text-muted: #94a3b8; } ``` ### 리소스 상태 배지 (NCloud 스타일) ```tsx // StatusBadge.tsx — NCloud 콘솔의 상태 표시와 동일한 패턴 type Status = 'running' | 'stopped' | 'error' | 'pending' | 'creating'; const STATUS_MAP = { running: { label: '실행중', color: 'var(--status-running)', dot: true }, stopped: { label: '중지', color: 'var(--status-stopped)', dot: true }, error: { label: '오류', color: 'var(--status-error)', dot: true }, pending: { label: '진행중', color: 'var(--status-pending)', dot: true }, creating: { label: '생성중', color: 'var(--status-pending)', dot: true }, }; ``` ### 데이터 테이블 (NCloud 리소스 목록 스타일) NCloud 콘솔의 리소스 목록과 동일한 패턴: - 체크박스 선택 (벌크 액션) - 상단 검색 + 필터 - 컬럼 헤더 정렬 - 페이지네이션 또는 무한 스크롤 - 행 클릭 → 상세 슬라이드 패널 (모달 아님) 자세한 컴포넌트 코드: `references/ncloud-patterns.md` 참조 ## 프로젝트 구조 ``` frontend/ ├── src/ │ ├── App.tsx │ ├── main.tsx │ ├── layouts/ │ │ ├── AppLayout.tsx ← GNB + 사이드바 + 콘텐츠 │ │ └── AuthLayout.tsx ← 로그인 페이지 레이아웃 │ ├── pages/ │ │ ├── Dashboard.tsx ← M-01 통합 대시보드 │ │ ├── Users.tsx ← M-02 사용자 관리 │ │ ├── Servers.tsx ← M-03 서버 자산 목록 │ │ ├── ServerDetail.tsx ← M-03 서버 상세 │ │ ├── Deployments.tsx ← M-04 배포 이력 │ │ ├── ApiKeys.tsx ← M-05 API Key 관리 │ │ ├── AuditLog.tsx ← M-05 감사 로그 │ │ ├── LLMManager.tsx ← M-06 LLM 관리 │ │ └── SystemConfig.tsx ← M-07 시스템 설정 │ ├── components/ │ │ ├── layout/ │ │ │ ├── GNB.tsx │ │ │ ├── Sidebar.tsx │ │ │ └── Breadcrumb.tsx │ │ ├── common/ │ │ │ ├── DataTable.tsx ← NCloud 스타일 테이블 │ │ │ ├── StatusBadge.tsx ← 상태 배지 │ │ │ ├── ResourceCard.tsx ← 서버/서비스 카드 │ │ │ ├── SlidePanel.tsx ← 우측 슬라이드 패널 │ │ │ ├── StatCard.tsx ← 통계 카드 │ │ │ └── EmptyState.tsx │ │ └── dashboard/ │ │ ├── SRStatusChart.tsx │ │ ├── ServerStatusGrid.tsx │ │ └── DeployTimeline.tsx │ ├── hooks/ │ │ ├── useAuth.ts ← JWT 인증 훅 │ │ ├── useGuardiaApi.ts ← GUARDiA ITSM API 훅 │ │ └── useManagerApi.ts ← Manager Backend API 훅 │ └── api/ │ ├── guardiaClient.ts ← GUARDiA ITSM axios 인스턴스 │ ├── managerClient.ts ← Manager Backend axios 인스턴스 │ └── types.ts ← TypeScript 타입 정의 ├── index.html ├── vite.config.ts └── package.json ``` ## M-01 대시보드 구현 가이드 NCloud 콘솔의 "서비스 요약" 화면을 참조한 통합 대시보드: ``` ┌── 상태 카드 행 ──────────────────────────────────────────────┐ │ [SR 현황] [인시던트] [서버 수] [SLA 달성률] │ │ 총 24건 긴급 2건 12대 98.7% │ │ 진행중 8 ↗ 중 1건 실행중 10 ▲ 0.3% │ └──────────────────────────────────────────────────────────────┘ ┌── SR 추이 차트 ────────┐ ┌── 서버 상태 그리드 ───────────────┐ │ 7일 SR 생성/완료 추이 │ │ web-01 ● web-02 ● db-01 ● │ │ [꺾은선 그래프] │ │ was-01 ● was-02 ● ksb-01 ● │ └────────────────────────┘ └──────────────────────────────────┘ ┌── 최근 배포 이력 ──────────────────────────────────────────────┐ │ [시간] [저장소] [커밋] [상태] [담당자] │ │ 5분 전 zio/zioinfo-web abc1234 ✅ 성공 CI Bot │ └──────────────────────────────────────────────────────────────┘ ``` ## 환경변수 설정 ```env # frontend/.env VITE_GUARDIA_API=http://zioinfo.co.kr:8001 VITE_MANAGER_API=http://localhost:8002 VITE_GITEA_API=http://zioinfo.co.kr:3000/api/v1 VITE_APP_TITLE=GUARDiA Manager ```