[NestJS] monorepo nestJS 구조

2022. 5. 24. 09:50node.js

최근 nestJS를 쓰는데 하나의 레포지토리(저장소)에서 여러 프로젝트에 접근하는 방식을 수집 및 정리하려 합니다.

사실 회사에서는 msa로 구조를 바꾸면서 사수분이 express + typescript + typedi + routing-controllers 대략 이런 조합으로 apps/libs를 나눠서 컨벤션을 만드셨는데 nest에서도 비슷하게 제공해주고 있었습니다.

 

따로 빌드되는 이점이 크다고 하셨는데.. 자바 스프링 진영에서 사용되는 구조에서 오는 이점을 활용하려고 하신듯합니다!

nestJS를 쓰면 자유도를 크게 안주고 팀원끼리 구조를 맞출 수 있으니! 한 번 정리해보고자 합니다😄

 

단일 repository의 장점

- 시스템이 어떻게 연관되어 있는 지 쉽게 이해

- 유틸리티 함수같이 코드 공유에 대한 장점

 

주의할 점

- 코드 베이스가 지저분 해지는 것을 피해야함.

 

# yarn
yarn add global @nestjs/cli

# npm
npm i -g @nestjs/cli

Nest CLI로 모노레포를 이미 지원하고 있으므로 CLI로 진행

 

 

설치 후, Nest CLI 로  NestJS 프로젝트 생성

> nest  new monorepo-nestjs

 

 

모듈 구성은 apps / libs 로 나눠서 분리.

| apps

하나의 server로 보고 독립적으로 배포가능한 컴포넌트들을 추가.

apps 안에  community-service / auth-service / admin-service 같이 독립된 서버로 배포 가능.

 

| libs

apps에서 의존해서 공통으로 사용될 라이브러리.

 


nest-cli로 프로젝트 생성

(monorepo-service라는 이름으로 생성)

nest new monorepo-nestjs

 

기본적으로 nest에서 제공해주는 app.module.ts / app.controller.ts / app.service.ts 같은 구조로 생성이 됩니다!

여기서 구조 변경을 해봅시다!

 

 

프로젝트 root로 가서 app의 api라는 모듈 단위 생성  (문서 참고)

nest generate app api

app이나 application

동일하게 lib도 생성해보자

nest new generate lib repository

cli  실행후 lib로 디렉토리를 생성할 지 묻는데 yes 입력하면 된다. libs로 분리해서 사용할 목적이므로

library구조는 앞서 생성한 application 구조와 조금 다르게 생성됨.

apps 밑에 바로 libs가 생성되고, index.ts / module / service 가 기본적으로 생성된다. library관련 공식문서 참고

nestjs공식 문서 참조

하면 nest-cli.json에도 생성되는 걸 확인할 수 있다.

 

처음에 nest cli로 생성한 프로젝트 제거

nest-cli.json 에서 프로젝트 이름으로 생성된 (monorepo-nestjs)를 지워준다.

마찬가지로 applicatoin 명령어로 생성하면서 처음에 생성됬던 monorepo-nestjs가 apps로 들어갔는데 apps/ monorepo-nestjs도 삭제해준다 (이미 지운 후라 이미지 참조하지 못함..)

 

실행 명령어 수정

package.json

// 기존 start
"start" :"nest start"

// 생성된 api모듈 선택후 strat
"start": "nest start api",

 

 

 

[참조]

https://jojoldu.tistory.com/594#recentComments

 

1. NestJS & TypeORM 환경에서 Monorepo 구성하기 - 기본 환경 구성 및 명령어

지난 시간에 yarn workspace 를 활용한 Monorepo를 소개 드렸는데요. 이번 시간에는 NodeJS의 대표적인 MVC/DI 프레임워크인 NestJS 를 활용한 모노레포 구성을 진행해보겠습니다. 가끔 NestJS를 Spring 프레임

jojoldu.tistory.com

 

https://docs.nestjs.com/cli/libraries

https://docs.nestjs.com/cli/monorepo

 

'node.js' 카테고리의 다른 글

[node.js] 모듈화  (0) 2019.12.08