안녕하세요. 아이웨딩에서 스드메(스튜디오,드레스,메이크업) 스케줄 관리가 생겼고, 스케줄 관리를 서비스운용팀에서만
관리하기 힘들어 협력사와 힘을 합쳐 스케줄 관리를 하기로 하였다.
협력사는 로그인 및 사용이 불편하면 사용을 잘 안한다.
조건 1. '아이웨딩'과 다른 도메인
조건 2. 핸드폰 인증으로만 로그인하는 간편로그인
조건 3. PC버전으로 프로젝트 생성
모든 조건을 고려하고 추후에 협력사가 모든 스케줄을 관리하는 '아이웨딩B'라는 시스템이 도입되면 결국엔
'아이웨딩'과 분리하여 프로젝트를 진행을 해야한다.
처음 레포는 총3개로 시작을 하고 추후에 아이웨딩(웹뷰), 아이컬러(웹뷰), 아이웨딩B 점점 추가 할 예정이다.
모든 스택은 NextJS로 만들어지기 때문에 쉽게 추가가 가능할 거 같다.
cd Document
mkdir iweddingB
yarn workspace 라는 명령어를 통해 레포를 생성할 수 있지만 next create, nest create 등등 이용하여 프로젝트 설정하려면
그냥 packages 폴더에 만들고 생성하면 된다.
mkdir packages
cd packages
yarn create next-app --typescript
실행후 NextJS 프로젝트 생성
현재는 모노레포를 사용했지만 tsconfig, 디펜던시등 상속이 되어 있지 않기 때문에 설정해줘야한다.
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "ESNext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "ESNext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react"
},
"exclude": ["node_modules"],
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
}
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"jsx": "preserve",
"incremental": true,
"baseUrl": "./src",
"paths": {
"@styles/*": ["styles/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
extends 에 루트 tsconfig.base.json 설정하여 상속시켜준다.
{
"name": "iweddingb-workspace",
"version": "1.0.0",
"description": "iweddingB workspace",
"scripts": {
"iweddingb": "yarn workspace @iweddingb-workspace/iweddingb
},
"workspaces": [
"packages/*"
],
"license": "MIT",
"private": true,
"dependencies": {
"typescript": "4.9.5"
},
"devDependencies": {
"prettier": "^2.8.3"
}
}
- 스크립트에 yarn workspace 레포네임 설정하면 해당 레포의 package.json 스크립트를 실행한다
예) next프로젝트의 레포니까 yarn iweddingb dev -> next 로컬서버 실행- workspaces packages/* 설정해줌으로써 모노레포 설정이 된다.
- 디펜던시, dev디펜던시 설정함으로써 모든 레포의 공통 디펜던시이다.
{
"name": "@iweddingb-workspace/iweddingb", (중요)
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@types/node": "18.14.6",
"@types/react": "18.0.28",
"@types/react-dom": "18.0.11",
"eslint": "8.35.0",
"eslint-config-next": "13.2.3",
"next": "13.2.3",
"react": "18.2.0",
"react-dom": "18.2.0",
"typescript": "4.9.5" //제거
}
}
name을 맞춰줘야하고 추후에 다른 레포에서 불러올때도 해당 레포네임이 사용된다.
디펜던시에 typescript는 제거하여도 된다 왜냐하면 루트 package.json에 있기때문에.
peer디펜던시로 등록해놓아도 될 거 같네요
cd packages
mkdir shared
yarn init
{
"name": "@iweddingb-workspace/shared",
"version": "1.0.0",
"description": "iwedding shared",
"main": "src/index.ts",
"license": "MIT",
"private": true
}
src/user/interface.ts 파일
export interface User { name: string; age: number; hp: number; }
index.ts 파일
export * from "./user/interface";
"@iweddingb-workspace/shared": "*"
여기까지 됐으면 이거는 그냥 쉽게 할 수 있다.
일단 nestjs 공식문서보고 /packages/ 에서 설치
임의로 막넣어봤어요~
기획안이 넘어오고 모노레포 도입은 그냥 100% 주관적으로 진행한 작업이라 시간이 오래걸리면 안됐는데 큰 사건없이 잘 구성했고
추후에 AWS 배포하면서 막히는 부분이 없기를