모노레포 구조
이 문서로 해결할 질문
- 패키지별 역할과 의존 방향은 무엇인가요?
- 루트에서 자주 쓰는 명령은 무엇인가요?
디렉터리 구조
mealio/
├── client/ # @mealio/client — Next.js
├── server/
│ ├── producer/ # @mealio/producer — NestJS API
│ ├── consumer/ # @mealio/consumer — Kafka 워커
│ └── shared/ # @mealio/shared — 공용 라이브러리
├── docs/ # mealio-docs — Docusaurus
├── docker/ # Compose·Dockerfile
├── observability/ # Grafana provisioning 등
└── package.json # 루트 워크스페이스 스크립트
패키지 의존 방향
client는producer를 HTTP로 호출합니다.producer와consumer는@mealio/shared를 import합니다.producer와consumer는 직접 import하지 않으며, Kafka 계약으로만 통신합니다.
워크스페이스
pnpm-workspace.yaml:
packages:
- client
- docs
- server/shared
- server/producer
- server/consumer
루트 스크립트
| 명령 | 설명 |
|---|---|
pnpm run start:client | Next.js dev |
pnpm run start:producer | NestJS API dev |
pnpm run start:consumer | Consumer dev |
pnpm run start:docs | Docusaurus dev |
pnpm run db:prisma:migrate:dev | Prisma 마이그레이션 |
pnpm run ci | install + build + lint + test |
shared 패키지 범위
| 제공 | 경로 예 |
|---|---|
| Prisma client | @mealio/shared/prisma-client |
| Mongoose schemas | server/shared/.../database/mongoose/ |
| Kafka 상수 | server/shared/.../kafka-topics.ts |
| Redis 키 | server/shared/.../cache-keys.ts |
| 이벤트 타입 | server/shared/.../types/events/ |
CI
pnpm run ci는 client·producer·consumer의 lint·test와 shared·앱 빌드를 실행합니다.
GitHub Actions 워크플로는 .github/workflows/에 정의되어 있습니다.