이번 과제를 통해 monorepo에 대해 공부하게 되었다.
이번 글에서는 학습 과정에서 이해하게 된 monorepo의 개념과,
멀티레포와의 비교를 통해 monorepo가 어떤 상황에서 적합한지 정리해보고자 한다.
monorepo란 여러 개의 독립적인 프로젝트, 라이브러리, 디자인 시스템 등을
하나의 통합된 저장소(Repository)에서 관리하는 개발 방식이다.
monorepo의 장단점을 이해하기 위해,
monorepo와 상반되는 구조인 멀티레포(Multi-Repository) 방식과 비교해보자.
멀티레포란 Repository를 각 도메인 또는 기능 단위로 분리하여
각각 독립적으로 생성하고 운영하는 방식을 말한다.
우선 Hello, GSM은 admin 과 client 가 각각 작동한다.
하지만 Hello, GSM 이라는 하나의 서비스이기 때문에 공통 UI등 공유하는 코드가 많다. 따라서 코드를 효율적으로 사용하고 관리하기 위하여 모노레포를 사용했다고 생각한다.
Hello, GSM 프로젝트는 루트에 apps와 packages로 구성되어있습니다.
apps 폴더에는 client 와 admin 으로 구성되어 있고, 사용자가 명확하게 나누어져있기 때문에 각 앱 단위로 나눈 것 같습니다.
packages 폴더에는 api, type 등 client 와 admin 모두 사용하는 공통 코드들이 들어있습니다.
루트에 있는 pnpm-workspace.yaml 파일에
packages:
- "apps/*"
- "packages/*"
로 명시되어있는걸로 보아 모노레포로 공유하고 있습니다.