3. 프로젝트 아키텍처 및 디렉토리 역할
최상위 디렉토리 구조
계층별 책임 분리
packages/common/ — 공유 키트 (내부 전용, npm 배포 안함)
pnpm workspace에서 !packages/common으로 명시적 제외되며, 각 패키지의 tsup.config에서 noExternal: /^@common$/로 처리되어 빌드 시 번들에 포함됩니다.
packages/core/ — @julong/mono-rele2-core
packages/utils/ — @julong/mono-rele2-utils
apps/site/ — Rspress 문서 사이트
package-docs-plugin이 packages/*/README.md를 탐색하여 /packages/<name> 라우트에 동적 페이지를 생성하고, /packages 개요 페이지에 패키지 목록 테이블을 자동 렌더링합니다.
전체 데이터 흐름
tsconfig path alias: @common → ../common/index.ts (각 패키지의 tsconfig.json에서 설정)
아키텍처 다이어그램
패키지 및 의존 구조
packages/common은 워크스페이스에서 제외되며 npm에 배포되지 않고, 빌드 시 각 패키지에 인라인 번들됩니다.
패키지 내부 구조 (utils 예시)
하나의 tools 정의가 세 가지로 소비됩니다: MCP 서버(stdio), CLI 실행기, 문서/스킬 생성.
빌드 및 문서 생성 흐름
릴리스 파이프라인 (.github/workflows/release.yml)
관심사 분리 원칙
- 도구 정의는 각 패키지의
src/tools/에서 담당 — 비즈니스 로직은 여기에만 위치 - MCP 서버/CLI 공통 로직은
packages/common/kit/에서 담당 — 서버 생성, CLI 파싱, 에러 처리 등 - 설정 파일은
packages/common/build/에서 공유 — tsup 설정, README 생성 스크립트 - 각 패키지의
src/server.ts는 도구 객체를createMcpServer()에 전달하는 역할만 수행 (매우 얇은 레이어) - 각 패키지의
src/cli.ts는 도구 객체를runCli()에 전달하는 역할만 수행 (매우 얇은 레이어)
신규 기능 추가 위치
- 새 MCP 서버 패키지:
packages/<name>/디렉토리 생성,src/tools/*.ts에 도구 정의 - 기존 패키지에 새 도구 추가: 해당 패키지의
src/tools/하위에 파일 추가 (또는 기존 파일에 추가) - 공통 기능 추가:
packages/common/kit/에 모듈 추가 - 빌드 설정 변경:
packages/common/build/tsup.config.mjs수정