11월 원티드에서 프리온보딩 프론트엔드 챌린지를 진행했다. 주제는 monorepo(모노레포)로 진행했다. 12/6,8,13,15일 4차례에 걸쳐 진행되었다. 최근 MSA 패턴에 모노레포를 활용하여 개발이 진행되는 추세다. 개발강의 내용과 게시물을 참조하여 정리하였다.
- 여러 개의 개별 프로젝트를 잘 정의된 관계를 통해서 하나의 Repo에 담은 것
- 애플리케이션을 서비스 모음으로 구성하는 아키텍처 스타일
장점 :
1. 여러개의 컴포넌트화(모듈화)된 서비스들로 분리한다는 것을 의미, 이러한 서비스들은 다른 서비스와 관계없이 재배포가 가능함의 의미. 이는 MSA를 통해 개발자는 언제든지 타 서비스와 관계없이 독립적인 개발과 재포를 할 수 있음
2. 장애허용(장애 복구)
어는 한 mirco-service가 실패하면, 다른 micro-service가 계속해서 기능 수행 가능. 이는 클라우드 기반의 PaaS(Platform as a Service) 기술을 통해 구현이 가능
3. 서로 다른 언어와 OS, 아키텍처 구성이 가능
4. 쉬운 통합과 자동배포
5. 빠른 생산성과 쉬운 운영
6. 높은 확장성/재사용성/효율성
http://www.iteyes.co.kr/index.php/msa-micro-service-architecture/
강의 중 의존성 관리는 npm이 아닌 yarn을 통해서 이루어졌다.
npm 사용한 사람으로서 yarn에 대해서 조금 알아봐야겠다는 생각이 들었다.
[출처] : https://heeyeonjeong.tistory.com/117
npm install --global yarn
yarn -v
현재 yarn 버전이 1로 설정된 것을 확인할 수 있다.
mkdir yarn-1-workspace
생성된 폴더(root 폴더)에 package.json 파일을 생성후 다음과 같이 입력
{
"private" : true,
"workspaces" : ["packages/*"]
}
mkdir packages
cd packages
mkdir common
mkdir server
server/package.json 생성 후 다음과 같이 내용을 작성한다.
{
"name": "@ljw/server",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
}
common/package.json 생성 후 다음과 같이 내용을 작성하다.
{
"name": "@ljw/common",
"version": "1.0.0",
"main" : "index.js",
"license": "MIT"
}
의존성 주입 (server에 common 종속)
yarn workspace @ljw/server add @ljw/common@1.0.0
(버전 명시를 해줘야 함)
server/package.json 파일에 의존성이 명시됨을 확인할 수 있다.
!
server/packages.json 파일에 scripts 부분을 작성하자.
common/index.js 파일 생성 후 다음과 같이 작성
module.exports = () => {
console.log("hello from common")
}
server/index.js 파일 생성 후 다음과 같이 작성
const foo = require("@ljw/common");
console.log("hello from server");
foo();
=> 상단 const foo = require("@ljw/common");
부분에 common/index.js 파일이 연결되어 있음을 확인 할 수 있다.
server/index.js 파일 실행
yarn workspace @ljw/server dev
이렇게 의존성을 주입하면 함수나 인터페이스의 변경사항이 있을때 실시간으로 에러를 감지할 수 있다. 이전에도 언급했들이 yarn-1을 사용할 경우 의존성 주입 시 버전을 명시해 주어야 하는 불편함이 있다.
버전을 잘못 명시할 경우 인스톨이 진행되지 않는다.
계속해서 yarn berry를 활용한 의존성 관리 내용을 기록할 예정이다.