[원티드 11월 프리온보딩 프론트엔드 챌린지]- Monorepo

Jayden ·2022년 12월 16일
0

11월 원티드에서 프리온보딩 프론트엔드 챌린지를 진행했다. 주제는 monorepo(모노레포)로 진행했다. 12/6,8,13,15일 4차례에 걸쳐 진행되었다. 최근 MSA 패턴에 모노레포를 활용하여 개발이 진행되는 추세다. 개발강의 내용과 게시물을 참조하여 정리하였다.

1. Monorepo

  • 여러 개의 개별 프로젝트를 잘 정의된 관계를 통해서 하나의 Repo에 담은 것

2. MSA(MicroService Architecture)

  • 애플리케이션을 서비스 모음으로 구성하는 아키텍처 스타일

장점 :

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/

Monolithic Architecture vs MSA

3. yarn classic vs yarn berry

강의 중 의존성 관리는 npm이 아닌 yarn을 통해서 이루어졌다.
npm 사용한 사람으로서 yarn에 대해서 조금 알아봐야겠다는 생각이 들었다.

yarn

  • 왼쪽이 npm, 오른쪽이 yarn 방식
  • npm과 yarn의 단점: node_modules은 용량이 커서 gitignore에 포함하지 않게 되는데, 협업시 git pull 하여 작업을 진행할 경우 npm 또는 yarn 명령어를 사용하여 node_modules 파일을 재설치 해야 하는 불편함이 있다.
  • 기타 보안이슈
  • 성능 저하 문제 발생

yarn berry

  • PnP(Plug n Play) 전략
    : node_module에 패키지 정보가 저장되지 않고, .yarn 폴더가 생성되며 .yarn/cache 폴더에 해당 패키지의 의존성 정보가 저장되고 .pnp.js 파일에 의해 의존성을 찾을 수 있는 정보가 기록된다.
  • Zero Install
    : .yarn 폴더 자체를 원격 저장소에 업로드하여 추가 yarn or npm 설치 필용없이 프로젝트 실행 가능

[출처] : https://heeyeonjeong.tistory.com/117

4. yarn 설치

npm install --global yarn

yarn -v

현재 yarn 버전이 1로 설정된 것을 확인할 수 있다.

5. 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를 활용한 의존성 관리 내용을 기록할 예정이다.

profile
프론트엔드 개발자

0개의 댓글