{"repo":"mannercode/nest-seed","free":true,"listed":false,"github":"https://github.com/mannercode/nest-seed","clone":"git clone https://github.com/mannercode/nest-seed.git","description":"NestJS monorepo seed: MSA-ready monolith with Temporal sagas, NATS, distributed locks, and real-infra tests (100% coverage, multi-replica race verification).","language":"TypeScript","stars":21,"topics":["nestjs","distributed-systems","mongodb","monorepo","nats","redis","saga","seed","temporal"],"license":"MIT","category":"databases-storage","readme_excerpt":"TODO 제일 중요한 것은 이 프로젝트를 어떻게 실행하느냐이다. 특징은 간략하게 소개하고 실행 방법을 알려주자. 1. 개발 모드에서는 asciinema 사용해서 npm run dev하고 curl localhost로 테스트 하는 방법 보여주고, jest로 특정 테스트 실행하는 방법 보여주고, vscode에서 test 버튼 누르면 그마저도 자동 실행되는 걸 보여주는 챕터가 있어야 한다. 2. 배포에서는 deploy/에서 실행하면 되는 걸 알려준다. api-docs가 검증 도구 겸 문서임을 언급한다. 물론 docker 컨테이너 빌드하고 실행해서 curl 하는 것도 알려줘야 한다. 3. 실행 방법을 알려줬으면 이제 테스트에 대해서 알려준다. 4. jest/unit test는 무엇이 있고 왜 했는지 설명한다. 5. tests/의 테스트에는 무엇이 있는지 설명한다. 6. 그 후에 나머지 항목들을 나열한다. nest-seed 이 시드는 학습을 염두에 뒀지만, 실제 프로덕션의 베이스이기도 하다 — 저자가 이걸로 실무 프로젝트를 진행한다. NestJS 백엔드( apps/api )가 본체이고, 모놀리스로 설계되어 있지만 필요할 때 특정 기능을 독립 서비스로 떼어내기 쉽도록 모듈 경계를 미리 그어 두었다. 경계의 실체는 두 가지다. SoLA 5계층은 같은 계층의 모듈끼리 직접 부르지 않게 하고, 컨트롤러는 NestJS 관례처럼 각 모듈 안에 두지 않고 Gateway 계층으로 분리한다. 그래서 모듈은 이웃 모듈과 HTTP 어느 쪽에도 묶이지 않는다 — 계층 규칙은 apps 문서가 설명한다. 서비스를 떼어낼 때 DB부터 풀지 않아도 되도록, 외래 키·조인처럼 경계를 넘는 DB 관계를 두지 않고 서비스가 ID로 관계를 관리한다. 관계형 DB의 핵심 가치가 쓰일 일이 없으니 MongoDB를 쓰고, 도메인 사이 정합성은 DB 제약이 아니라 서비스가 책임진다. 관리자 콘솔과 사용자 앱은 모노레포에 프런트엔드를 얹는 최소 데모다. 예제 도메인은 영화 예매다. 누구나 아는 도메인인 데다 좌석이라는 경합 자원이 있고, 코드는 모놀리스지만 배포는 기본 4개 컨테이너라서 이중 판매·부분 실패·진행 상황 전달 같은 분산 문제가 자연스럽게 발생한다. 영화·극장·상영·티켓 같은 모델 위에 상영 등록·예매·구매 같은 유스케이스를 올렸고, 코드의 패턴 이름이 모두 이 도메인 용어를 쓴다. 세 문제는 각각 이렇게 푼다. - 이중 판매 — 락이 아니라 원자 조건부 전이(상태를 필터에 박은 갱신)로 막는다 ( core/tickets ) - 부분 실패 — Temporal 사가가 실행 기록·재시도·보상(앞 단계 되돌리기)을 맡는다 ( application/showtime-creation ) - 진행 상황 전달 — NATS pub/sub가 다른 컨테이너에 붙은 SSE 클라이언트까지 이벤트를 나른다 ( application/showtime-creation ) 이 해법들이 실제로 동작하는지는 mock 없는 실제 인프라 테스트(커버리지 100% 게이트)와 분산 레이스 하네스, CI 반복이 검증한다. ","default_branch":null,"files":null,"tree":[],"storefront":"/r/mannercode","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/mannercode/nest-seed/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}