{"id":47787891,"url":"https://github.com/mannercode/nest-seed","last_synced_at":"2026-04-03T15:04:44.840Z","repository":{"id":256998370,"uuid":"849585972","full_name":"mannercode/nest-seed","owner":"mannercode","description":"NestJS Microservices (MSA) example with fully parallel Jest tests, Dockerized setup, NATS messaging, MongoDB \u0026 Redis, and automated E2E testing.","archived":false,"fork":false,"pushed_at":"2026-03-28T19:48:28.000Z","size":1324,"stargazers_count":21,"open_issues_count":0,"forks_count":6,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T21:25:07.082Z","etag":null,"topics":["ddd","design","jest","microservices","msa","nestjs","nodejs","plantuml","tdd","test","uml"],"latest_commit_sha":null,"homepage":"https://www.mannercode.com","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mannercode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-29T21:34:28.000Z","updated_at":"2026-03-28T19:48:32.000Z","dependencies_parsed_at":"2025-04-29T02:37:10.466Z","dependency_job_id":"0909d7c6-6bf9-4bab-af42-b723a162a314","html_url":"https://github.com/mannercode/nest-seed","commit_stats":null,"previous_names":["mannercode/nest-seed","mannercode/nest-msa","mannercode/nest-templates"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/mannercode/nest-seed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mannercode%2Fnest-seed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mannercode%2Fnest-seed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mannercode%2Fnest-seed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mannercode%2Fnest-seed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mannercode","download_url":"https://codeload.github.com/mannercode/nest-seed/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mannercode%2Fnest-seed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31359101,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T14:24:47.623Z","status":"ssl_error","status_checked_at":"2026-04-03T14:24:32.380Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddd","design","jest","microservices","msa","nestjs","nodejs","plantuml","tdd","test","uml"],"created_at":"2026-04-03T15:04:28.273Z","updated_at":"2026-04-03T15:04:44.712Z","avatar_url":"https://github.com/mannercode.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nest-seed\n\nNestJS 기반 모노레포. 영화 예매 도메인으로 모놀리식(mono)과 마이크로서비스(msa) 아키텍처 시드를 제공한다.\n\n## 프로젝트 구조\n\n```\nnest-seed/\n├── libs/                ← 공유 라이브러리 (npm 패키지)\n│   ├── common/              @mannercode/common      — Mongoose, Redis, JWT, S3, logging\n│   ├── microservices/        @mannercode/microservices — NATS RPC, Temporal workflows\n│   └── testing/             @mannercode/testing      — 테스트 컨텍스트, HTTP/RPC 클라이언트\n│\n├── seeds/                   ← 프로젝트 시드 (복사해서 새 프로젝트 시작)\n│   ├── mono/                모놀리식    — NestJS, MongoDB, Redis, BullMQ, EventEmitter2\n│   ├── msa/                 마이크로서비스 — NestJS, MongoDB, Redis, NATS, Temporal\n├── dev-infra/               ← 개발 인프라 (Docker Compose, 환경변수)\n│\n└── docs/                    ← 아키텍처·설계 문서\n```\n\n두 시드는 동일한 레이어드 아키텍처(SoLA)와 도메인 모델을 공유하며, 통신 및 오케스트레이션 전략이 다르다.\n\n## 시작하기\n\n### 사전 요구 사항\n\n- Node.js 24+\n- Docker \u0026 Docker Compose\n\n### 1. 의존성 설치\n\n```bash\nnpm ci\n```\n\n### 2. 패키지 빌드\n\n```bash\nnpm run build\n```\n\n### 3. 패키지 테스트\n\n```bash\nnpm test\n```\n\n### 4. 시드 실행\n\n```bash\ncd seeds/mono   # 또는 seeds/msa\nnpm ci\nnpm test\n```\n\n상세 설정은 [docs/development.md](docs/development.md) 참조.\n\n## 모노레포 스크립트\n\n| 스크립트                    | 설명                          |\n| --------------------------- | ----------------------------- |\n| `npm run build`             | 모든 패키지 빌드 (Turborepo)  |\n| `npm test`                  | 패키지 테스트 (커버리지 포함) |\n| `npm run lint`              | 전체 패키지 ESLint            |\n| `npm run format`            | Prettier 포맷팅               |\n| `npm run changeset:add`     | 체인지셋 생성                 |\n| `npm run changeset:version` | 체인지셋 적용 및 버전 범프    |\n| `npm run changeset:publish` | 빌드 후 npm 배포              |\n\n## 기술 스택\n\n| 분류                  | 기술                       |\n| --------------------- | -------------------------- |\n| **프레임워크**        | NestJS 11                  |\n| **언어**              | TypeScript 6               |\n| **데이터베이스**      | MongoDB (Mongoose)         |\n| **캐시**              | Redis                      |\n| **메시징**            | NATS (msa)                 |\n| **워크플로우**        | Temporal (msa)             |\n| **큐**                | BullMQ (mono)              |\n| **이벤트**            | EventEmitter2 (mono)       |\n| **오브젝트 스토리지** | MinIO (S3 호환)            |\n| **인증**              | JWT + Passport             |\n| **테스트**            | Jest (100% 커버리지)       |\n| **빌드**              | Turborepo + Webpack        |\n| **컨테이너**          | Docker (multi-stage build) |\n| **패키지 매니저**     | npm workspaces             |\n| **버전 관리**         | Changesets                 |\n\n## Mono vs MSA 비교\n\n| 항목           | mono                       | msa                                    |\n| -------------- | -------------------------- | -------------------------------------- |\n| 서비스         | 1 (단일 프로세스)          | 4 (Gateway, Apps, Cores, Infra)        |\n| 레이어 간 통신 | 직접 함수 호출             | NATS RPC                               |\n| 비동기 처리    | BullMQ 큐                  | Temporal 워크플로우 (Saga 패턴)        |\n| 이벤트         | EventEmitter2 (in-process) | NATS pub/sub                           |\n| 인프라         | MongoDB RS + Redis Cluster | + NATS Cluster + Temporal + PostgreSQL |\n| 포트           | 3000                       | 3000, 4000, 4001, 4002                 |\n\n## 문서\n\n- [패키지 아키텍처](docs/architecture.md) — 모노레포 구조, 패키지 의존 그래프, 모듈 상세\n- [설계 가이드](docs/design-guide.md) — SoLA 아키텍처, REST API 설계, 엔티티 설계\n- [프로젝트 컨벤션](seeds/CONVENTIONS.md) — 네이밍 규칙, 테스트 컨벤션\n- [개발 환경](docs/development.md) — 스크립트, 프로젝트 구조, ESLint 규칙\n- [설계 결정](docs/decisions.md) — NATS, Temporal 선택 근거\n- [도메인 용어](docs/glossary.md) — 영화 예매 도메인 용어 정리\n\n## 라이선스\n\n개별 패키지의 라이선스 정보를 참조.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmannercode%2Fnest-seed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmannercode%2Fnest-seed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmannercode%2Fnest-seed/lists"}