# Sprint 001 — 세팅 + 인프라 + 자매 상태 ## 목표 모노레포 구조 세팅, Nest.js/Next.js 초기화, SSH로 4자매 상태 조회 API, 메인 대시보드 페이지 (자매 상태 카드 4개). ## 태스크 ### TASK-001: 모노레포 구조 세팅 - **담당:** 나랑이 - **상태:** pending - **의존성:** 없음 - **설명:** `frontend/` + `backend/` 디렉토리 구성 (단순 디렉토리 분리, npm workspaces 미사용) - **완료 기준:** - `frontend/` — Next.js 프로젝트 디렉토리 - `backend/` — Nest.js 프로젝트 디렉토리 - 루트 `.gitignore` (node_modules, .env, dist, .next 등) - 루트 `README.md` (프로젝트 소개, 실행 방법) - 루트 `.env.example` (DB 접속 정보, SSH 키 경로, Gitea 토큰 템플릿) ### TASK-002A: Backend 초기화 (Nest.js + Prisma + MariaDB) - **담당:** 나랑이 - **상태:** pending - **의존성:** TASK-001 - **설명:** Nest.js 프로젝트 생성, Prisma 설정, MariaDB 연결, 스키마 마이그레이션 - **DB 연결:** 10.10.10.146:33006, DB명 `hanarang_dashboard` - **스키마:** `.plans/design/db-schema.md` 참조. 5개 테이블 전체 정의하되, Sprint 001에서 API로 사용하는 건 **SisterConfig만**. 나머지(Project, Sprint, Task, ActivityLog)는 스키마만 생성. - **완료 기준:** - Nest.js 프로젝트 생성 + ESLint + Prettier + tsconfig - Jest 테스트 프레임워크 세팅 - Prisma 설치 + 전체 스키마 정의 + `prisma migrate dev` 성공 - SisterConfig 시드 스크립트 (4자매 초기 데이터) - `backend/.env.example` (DB URL) - `GET /health` → `{ "status": "ok" }` + health 엔드포인트 단위 테스트 1개 - 마이그레이션 파일 커밋 - `npm run build` 성공 - 포트: 3005 ### TASK-002B: SSH 모듈 + 자매 상태 API - **담당:** 나랑이 - **상태:** pending - **의존성:** TASK-002A - **설명:** node-ssh로 4자매 서버 접속, 상태 조회 API - **SSH 설정:** SisterConfig 테이블에서 IP/사용자 읽기 + `.env`에서 SSH 키 경로 주입 - **상태 조회:** `systemctl --user is-active openclaw-gateway` 실행 결과로 online/offline 판단 - **완료 기준:** - `node-ssh` 패키지 설치 - SSH 서비스 모듈 (연결 + 명령 실행) - `GET /api/sisters` → 4자매 상태 반환 (이름, IP, 상태, 역할, 마지막 활동) - SSH 연결 실패 시 graceful fallback (해당 자매 status="offline" 반환, 에러 throw 하지 않음) - SSH 모듈 mock 테스트 1개 - `npm run build` 성공 ### TASK-003: Frontend 초기화 (Next.js + styled-components + 대시보드) - **담당:** 나랑이 - **상태:** pending - **의존성:** TASK-001 (API 연동은 TASK-002B 완료 후, 초기에는 mock 데이터로 개발 가능) - **설명:** Next.js 프로젝트 생성, styled-components 설정, 다크 테마, 메인 대시보드 페이지 - **디자인:** `.plans/design/ui/dashboard-design.md` 참조 - **완료 기준:** - Next.js App Router + styled-components SSR (`StyledComponentsRegistry`) - ESLint + Prettier + tsconfig - 다크 테마 글로벌 스타일 (색상표는 dashboard-design.md 참조) - Sidebar 컴포넌트 (네비게이션) - 메인 대시보드 페이지 (`/`): - 자매 상태 카드 4개 (초기 mock → 이후 GET /api/sisters 호출) - glassmorphism 카드 스타일 - 상태별 색상 (온라인=#00E676, 오프라인=#FF1744, 작업중=#2979FF) - styled-components 규칙: return 아래에 적재 - `npm run build` 성공 - 포트: 3004 ## 완료 기준 (Sprint 전체) - `frontend/` + `backend/` 모두 `npm run dev` + `npm run build` 성공 - `GET /health` 응답 확인 + 단위 테스트 통과 - `GET /api/sisters` → 4자매 상태 반환 (SSH 연결 성공 or graceful fallback) - SSH 모듈 mock 테스트 통과 - 메인 대시보드 페이지에서 자매 상태 카드 4개 렌더링 - Prisma 마이그레이션 성공 (5개 테이블) + 파일 커밋 - SisterConfig 시드 데이터 - ESLint/Prettier/tsconfig/Jest 설정 완료