백엔드/NestJs

[nestjs] nx 모노레포??

STUFIT 2023. 6. 25. 20:13
반응형

이번에 회사에서 기존의 업무에서 다른 업무를 인수인계 받게 되었다.

내가 새로 할 업무에서는 프레임워크로 nestjs를 사용하고 있는데, 기존에 내가 알던 방식이 아닌 모노레포 방식을 채용하여 운영중에 있었다.

그러면 monoRepo란 대체 뭘까??

1. 모노레포 도입배경

현재 내가 인수인계 받을 업무는 운영관리자로서 우리 회사 서비스를 전반적으로 관리하는 백오피스이다. 그렇기 때문에 운영관리자는 여러가지 서비스에 대한 DB를 직접적으로 접속하고 다룰 수 있어서 처음 운영관리자를 설계할 때에는 각각 서비스 마다의 관리자 repo를 만들어서 관리를 했다고 한다.

하지만 이렇게 각각 repo를 구성하는것이 아마 비효율적이라고 생각했는지 기존의 리더분께서 모노레포로 구성하자고 제안을 하셔서 지금의 모노레포 형식으로 아키텍쳐를 바꿨다고 하였다.

2. 모노레포??

모노레포는 하나의 repo에 여러개의 서브 프로젝트가 존재하는 방식을 말한다. 이렇게 하면 굳이 각각의 서비스 레포지토리를 만들어서 관리하면 비용적인 측면에서 낭비가 되는데 모노레포를 하면 하나의 레포에서 관리가 되니 비용도 절감된다. 또한, 누가 어느 코드를 기여하고 있는지 결정하는데 기여한다. 

3. nestjs 에서 nx 모노레포 구축

기존의 nestjs 에서는 nest g mo {name}, nest g s {name} 등으로 모듈,서비스 등을 만들었는데, 이 부분까지는 똑같다. 하지만 npm 명령어 대신 nx 명령어를 사용하며, 공통 라이브러리 관리가 있는데 이 부분에 대해서는 뒤에 설명하겠다.

먼저, 설치부터 하자면

// 1. nx 레포 설치
npx create-nx-workspace@latest

// 2. 앱 설치
nx serve my-application

// 3. 라이브러리 설치
nx generate @nrwl/nest:library my-lib

 1번을 설치하게 되면 기본적인 모노레포 구조가 설정된다. 여기서 2번을 예로들면, nx serve gateway, nx serve coreService, nx servce manageService 이렇게 명령어를 치면 3가지 앱이 생성되며, 이것들은 각각의 레포라고 생각하면 된다.

3번 라이브러리의 역할은, 2번의 각각의 앱들은 서로 독립적이기 때문에 inject 할 수 없다. 그렇기 때문에 3가지 앱에서 공통적으로 사용하고 싶은 메소드 등이 있는 경우에는 3번의 라이브러리 설치를 통해 폴더를 만든 후 해당 라이브러리에서 코드를 만들어서 import 해줄 수 있다.

 

반응형