diff --git a/docs/vendor-development-guide.md b/docs/vendor-development-guide.md new file mode 100644 index 000000000..393ea481d --- /dev/null +++ b/docs/vendor-development-guide.md @@ -0,0 +1,150 @@ +# Frontend 개발 가이드 (외부 업체용) + +이 프로젝트의 프론트엔드는 개발 완료 후 **인터넷이 차단된 환경(폐쇄망)** 에 반영됩니다. 반영 과정에서 빌드 실패나 버전 불일치가 생기지 않도록, 개발 중 아래 규칙을 지켜 주세요. + +> 문의: **[담당자 이름 / 연락처 기입]** + +--- + +## 1. 개발 환경 + +| 항목 | 버전 | 비고 | +|---|---|---| +| Node.js | `22.23.4` | 루트 `.nvmrc` 참고. 다른 버전으로 빌드하지 마세요. | +| 패키지 매니저 | `pnpm 10.12.1` | `npm`, `yarn`은 사용 불가 (루트 `preinstall`에서 차단됨) | + +```bash +nvm use # .nvmrc 기준 Node 선택 +corepack enable +pnpm install +``` + +- `pnpm-lock.yaml`은 저장소에 포함하지 않습니다(`.gitignore` 대상). 커밋 대상이 아니므로 `git status`에 나타나도 올리지 마세요. +- Node, pnpm 버전을 임의로 올리지 마세요. 버전 변경은 담당자와 협의 후 진행합니다. + +--- + +## 2. 의존성(패키지) 규칙 + +폐쇄망에서는 npm 공식 저장소가 아닌 사내 저장소를 거쳐 패키지를 받습니다. 아래에 해당하는 패키지는 설치가 실패할 수 있습니다. + +### 반드시 지킬 것 +- 패키지는 **작업 중인 앱의 `package.json`**(`apps/<앱>/package.json`)에만 추가하세요. 다른 앱이나 루트 `package.json`은 수정하지 않습니다. +- 새 패키지는 `pnpm add -E <패키지>`로 **정확한 버전**을 지정해 추가하는 것을 권장합니다. 폐쇄망에 반영할 때 담당자가 `package.json`을 기준으로 버전을 확정하므로, `latest`나 넓은 범위(`*`)는 피하세요. + +### 사용하면 안 되는 형태 +| 금지 | 이유 | +|---|---| +| git 주소·tarball URL 의존성 (`github:...`, `https://...tgz`) | 폐쇄망에서 받을 수 없음 | +| 설치 중(`postinstall`) 인터넷에서 바이너리를 내려받는 패키지 (예: Puppeteer, Playwright 브라우저 다운로드 등) | 설치 단계에서 실패 | +| 빌드 시 외부 사이트에서 폰트·리소스를 받는 방식 (예: `next/font/google`) | 빌드 실패 | + +### 새 패키지를 추가할 때 +PR 설명에 **패키지명, 버전, 추가 이유, 라이선스**를 적어 주세요. 네이티브 모듈(C/C++ 빌드가 필요한 패키지)은 반입 전에 별도 확인이 필요하므로 **미리 담당자에게 알려 주세요.** + +--- + +## 3. 외부 인터넷 접근 금지 + +운영 환경은 외부 인터넷에 연결되지 않습니다. 화면이 동작하는 데 필요한 모든 리소스는 **프로젝트 안에 포함**되어야 합니다. + +- 폰트: `next/font/local` 또는 `public/`에 포함. Google Fonts, CDN 폰트 사용 금지 +- 스크립트·스타일: CDN `