zaemoru 디자인 시스템 기반 GSMSV 프론트엔드. 백엔드(../GSM-SV/backend)와 별도 레포로 분리됨.
Next.js 16 App Router · React 19 · TypeScript · Tailwind CSS v4 · @zaemoru/react (Lit 기반 Web Components 래퍼)
@zaemoru/tokens/index.css는app/globals.css에서 한 번만 import@zaemoru/react는 Web Components 등록을 트리거하므로 클라이언트 컴포넌트("use client")에서만 import. 등록은app/providers.tsx에서 수행- 기본 UI 는 zaemoru 컴포넌트(
Button,TextField,Card등)를 우선 사용. 자체 styled 컴포넌트로 덮어쓰지 않음 - 레이아웃·간격은 Tailwind 유틸리티로 작성
- shadcn/ui 컴포넌트는 도입하지 않음 (zaemoru로 대체)
app/라우트components/화면 단위 컴포넌트lib/api.ts백엔드 호출 함수,lib/types.ts공용 타입,lib/utils.tscn()등 유틸
NEXT_PUBLIC_API_URL (기본 http://localhost:8000) 로 FastAPI 호출. Next rewrite 로 /api/* 를 백엔드로 프록시 — same-origin httpOnly 쿠키 기반 인증.
- 인증: JWT (access 30분 / refresh 7일) httpOnly 쿠키
- 자동 갱신: 401 응답 시
lib/api.ts가/api/v1/auth/refresh로 1회 재시도 - 보호 라우트:
proxy.ts미들웨어가access_token쿠키 부재 시/login리다이렉트 - 백엔드 레포:
../GSM-SV(별도 레포)
커밋: type: 한국어 설명 (feat/fix/update/add/docs/style/refactor/test/perf/merge), 마침표 없음, Co-Authored-By 포함
브랜치: develop 분기 → feature → PR → develop → main. main 직접 push 금지
- 인증 (login/signup/verify/reset-password) —
@zaemoru/reactTextField,Button,Agreement - 대시보드 셸 (sidebar/topbar) —
Header,SideNavigation,MainMenu - VM 인스턴스 목록·상세 (탭) —
Table,Tab,Card,Badge - VM 신청 위저드 —
ProgressStepper,Select,RadioButton,BottomCta - 알림·토스트 —
Toast,Snackbar - 어드민 승인 페이지 —
Table,Dialog - FAQ/Docs —
Accordion,SideNavigation
각 단계는 별도 PR. 백엔드 API 시그니처는 ../GSM-SV/backend 의 main.py 라우터에서 확인.