협업을 나가서 초기셋팅을 우리가 한 게 아니고 초기세팅이 된 상태에서 클론을 받은 거라 프로젝트의 폴더 구성이 궁금해서 찾아보게 되었다!!
- Monorepo는 여러 프로젝트의 소스 코드를 관리하는 데에
하나의 저장소(repository)
만 사용하는 것을 의미한다.
example) Monorepo를 이용하면 웹 앱 프로젝트, 모바일 앱 프로젝트, 서버 프로젝트가 한 저장소에 있게 됨!
통합적인 test, build, release 작업
한 저장소에서 관리되기 때문에 한 번의 커맨드로 여러 패키지의 스크립트(test, build, release)를 실행할 수 있다.
코드의 통일성 증가
분산된 이슈의 통합
대주제에 해당하는 하나의 저장소에서 이슈를 처리하기 때문에 여러 저장소에서 이슈를 올리면서 논의가 분산되는 것을 막을 수 있다.
개별적 모듈 버전 관리
Monorepo로 관리되어도 내부의 프로젝트들은 각각 개별적인 모듈이기 때문에 각각 버전 관리를 할 수 있다.
쉬운 코드 공유
이건 실제로 기업협업을 하면서 겪는 중,,, 이전에 했던 코드를 보며 이해하는 데 편리하다!
이러한 장점들 덕에, 현재 유명한 기업에서 많이 쓰이는 중이다...!!
- lerna는 Git과 NPM을 사용하여 Mono-Repo 관리와 Workflow를 최적화는 도구이다.
- lerna는 다중의 패키지가 있는 Monorepo 구조로 된 자바스크립트 프로젝트의 test, build, release 같은 작업을 최적화 시켜주는 툴
- lerna는 위에 언급했던 것처럼 여러 저장소의 의존성을 묶어주는 역할과 각 패키지별 버전 업데이트를 도와준다.
lerna.json 파일을 들어가보면 이렇게 생겼다.
참고블로그
- lerna의 특징은 Mono-Repo를 구성하고 배포하는 데 중점에 둔 기능으로 볼 수 있다.
다중 패키지의 종속성 관리 및 모듈의 중복성 제거
lerna를 사용하여 node module을 설치할 경우 자체적으로 패키지들의 모듈을 설치하며, 그 과정에서 종속성을 관리하여 중복된 모듈을 하나로 통합한다.
다중 패키지의 단일 버전 및 독립적 버전 관리
Mono-Repo의 구성을 따르면 여러 개의 Package로 구성된다. 이런 Package는 어떤 상황에서 하나의 버전 정책을 가져갈 수 있지만, 또 어떤 경우에는 서로 독립적인 버전 정책을 가져가야 하는 경우가 있는데 lerna는 이러한 기능을 지원하여 버전 정책을 정할 수 있다.
변경된 패키지를 일괄적으로 GIt Remote Repository에 Push
여러 Package가 수정되었다면 Package 별로 Git Remote Repository에 commit과 push를 할 필요가 없다. lerna를 사용하면 단 한 번의 commit과 push로 Remote Repository에 반영할 수 있다.
변경된 패키지를 일괄적으로 NPM Repository에 Publish
NPM Repository에 node module을 배포하기 위해서 publish 명령을 사용한다. Mono-Repo에서 각 Package를 NPM Repository에 배포하기 위해서 하나하나 publish를 입력할 필요가 없다. 단 한 번의 publish로 변경 사항이 있는 Package만 배포가 될 것이다.
오 혜수님 대박 ReactNative랑 React에서 만든 소스 코드를 한 곳에서 관리할 수 있는거죠?? 다음 프로젝트에 도전 :)