
1. ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๋ฉ์ด๋ฆฌ์ฑ ๋ง๋ค๋ ๊ณผ๊ฑฐ ์ฝ๋์๋ ๋ฌ๋ฆฌ ์ต์ ์ฝ๋๋ค์ ์ ๋ถ ๋ชจ๋ํ๊ฐ ๋์ด์๋ค.
๋ชจ๋ํ์ ์ด์ ์ผ๋ก๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง ์ญ์ ์ ์ง๋ณด์์, ์ฌ์ฌ์ฉ์ฑ์ด ๊ฐ์ฅ ํฐ ์ด์ ์ด๋ค.
์ฝ๋๋ฅผ ํฐ ๋ฉ์ด๋ฆฌ์ฑ ๋ง๋ค์ด ๊ตด๋ฆฐ๋ค๋ฉด ํ ๋ถ๋ถ์ ์ ์ง ๋ณด์ํ๊ธฐ ์ํด ์ฝ๋ ์ ์ฒด๋ฅผ ์์ ํด์ผ ํ๊ณ , ์์กด์ฑ ํ์ ๋ํ ๋ณต์กํด์ง๋ค.
๋ํ ์ผ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ๊ณณ์ ์ฌํ์ฉํ๊ธฐ ์ด๋ ค์์ง๋ค.


์ฌ์ง์ถ์ฒ: https://d2.naver.com/helloworld/0923884
2. ๋ฉํฐ๋ ํฌ(multi repo) === ํด๋ฆฌ๋ ํฌ(poly repo)
๋ฉํฐ๋ ํฌ๋ ๋ง ๊ทธ๋๋ก ์ฌ๋ฌ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ํ๋ก์ ํธ๋ฅผ ์ด์ํ๋ ๋ฐฉ์์ด๋ค.
๊ฐ์ ๋ ์์ ์ธ ๋ ํฌ์งํ ๋ฆฌ๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ์ ๊ฐ ํ๋ณ ์์จ์ฑ์ด ๋ณด์ฅ๋๊ณ ๋น ๋ฅธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ ์ฅ์ ์ด ์์ง๋ง, ๋ฌธ์ ์ ๋ค๋ ๊ฐ์ง๊ณ ์๋ค.
๋ํ์ ์ผ๋ก
- ํ๋ก์ ํธ ์์ฑ ์์ ๋ฐ๋ณต์ ์ธ ์ ๋ฌด: ํ๋ก์ ํธ ์์ฑ ์๋ง๋ค ๋ ํฌ์งํ ๋ฆฌ ์์ฑ, ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ, CI/CD ๊ตฌ์ถ, ๋น๋ ํ ๋ฐฐํฌ ๋ฑ ๋ฐ๋ณต์ ์ธ ์ ๋ฌด๊ฐ ์ง์๋๋ค.
- ์ฝ๋ ์ปจ๋ฒค์ ํต์ผ์ ์ด๋ ค์: ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋๋ ๊ธฐ์ค์ ๋ฐ๋ผ ์ฝ๋ ์ปจ๋ฒค์ ์ ๋ง์ถ๊ธฐ๊ฐ ์ด๋ ค์์ง ์ ์๋ค.
- ๊ด๋ฆฌ ํฌ์ธํธ์ ์ฆ๊ฐ: ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋ง์์ง์ ๋ฐ๋ผ, ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ๋์ด๋ ์ ๋ฌด๊ฐ ๊ณผ์ค๋๋ค. ์๊ฐ์ด ์ง๋ ์๋ก ์ด๋ ๊ณง ํ๋ก์ ํธ์ ๋ ๊ฑฐ์ ํ์ ์ด ์ด๋ ค์์ง๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ค.
- ๋ค๋ฅธ ๋ ํฌ์งํ ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ์ด ์ด๋ ค์: ํ์ ๊ฐ ์ง์์ ์ผ๋ก ์ํตํ๊ณ , ํผ๋๋ฐฑํ์ง ์๋ ์ด์ ๋ณธ์ธ์ด ๋งก์ง ์์ ๋ค๋ฅธ ๋ ํฌ์งํ ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ์ด ์ํํ์ง ์์ ์ ์๋ค.
3. ๋ชจ๋ ธ๋ ํฌ(mono repo)
๋ชจ๋ ธ๋ ํฌ๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ ํ๋ก์ ํธ๋ฅผ, ์ ์ ์๋ ๊ด๊ณ๋ฅผ ํตํด์ ํ๋์ Repo์ ๋ด์ ๊ฒ์ด๋ค.
๋ฉํฐ๋ ํฌ์๋ ์๋ฐ๋๋ ๊ฐ๋ ์ผ๋ก, ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ ํธ ์ฝ๋๊ฐ ๋์ผํ ์ ์ฅ์์ ์ ์ฅ๋๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ต์ด๋ค.
๋จ์ํ ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ ํ๋์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ ธ๋ ํฌ๋ผ๊ณ ๋ถ๋ฅด๊ธฐ์๋ ๋ถ์กฑํ๊ณ , ํ๋ก์ ํธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ ํด์ผํ๋ค.
๋ชจ๋ ธ๋ ํฌ๋ ํ๋ก์ ํธ ์ฌ์ด์ ์์กด์ฑ์ด ์กด์ฌํ๊ฑฐ๋ ๊ฐ์ ์ ํ๊ตฐ ๋ฑ ์ ์๋ ๊ด๊ณ๋ค์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํด์ค๋ค.
๋ชจ๋ ธ๋ ํฌ์ ๋ํ์ ์ธ ์ฅ์ ์ผ๋ก๋
- ๋ ์ฌ์ด ํ๋ก์ ํธ ์์ฑ: ๋ฐ๋ณต๋๋ ๊ณผ์ ๋ค์ ๊ธฐ์กด DevOps๋ฅผ ์ด์ฉํ๋ฏ๋ก ์ ํ๋ก์ ํธ ์ค๋ฒํค๋ ๋ฐ์์ด ์๋ค.
- ๋ ์ฌ์ด ์์กด์ฑ ๊ด๋ฆฌ: ์์กด์ฑ ํจํค์ง๊ฐ ๊ฐ์ ์ ์ฅ์์ ์๊ธฐ์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.
- ๋จ์ผํ๋ ๊ด๋ฆฌ ํฌ์ธํธ: ๊ฐ๋ฐํ๊ฒฝ ๋ฐ DevOps์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ฒ์ ๋ฐ์ํ ์ ์๋ค.
- ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ์ฉ์ด: ์ปค๋ฐํ ๋๋ง๋ค ๋ชจ๋ ๊ฒ์ด ๊ฐ์ด ์๋ํ๊ธฐ์, ๋ค๋ฅธ ๋ ํฌ์งํ ๋ฆฌ์์์ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ์ด ์ฉ์ดํ๋ค.

์ฌ์ง์ถ์ฒ: https://d2.naver.com/helloworld/0923884
4. ๋ชจ๋ ธ๋ ํฌ(mono repo) ๊ตฌ์ฑ

์ต์๋จ root folder๋ก ๋ชจ๋ ธ๋ ํฌ๋ฅผ ๊ตฌ์ฑํ ์ฌ์ง์ด๋ค.
๋ชจ๋ ธ๋ ํฌ ๋ด ์ ์ฒด์ ์ผ๋ก ๊ด๋ฆฌ๋๋ Dependency ๋ฐ Workspace์ ๋ํ ์ ๋ณด๋ค์ root package.json์์ ํตํฉ๋ ์ฑ๋ก ๊ด๋ฆฌ๋๋ค.
์ฆ, ๊ณตํต์ ์ธ ์ค์ ์ ๊ฐ ์๋น์ค๋ณ๋ก ํ ํ์๊ฐ ์์ด์ง๋ค. ๋ฌผ๋ก , ๊ฐ๋ณ์ ์ธ ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ package.json์์ ์ถ๊ฐ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.

์ผ์ชฝ ์ฌ์ง๊ณผ ์ค๋ฅธ์ชฝ ์ฌ์ง์ ๋น๊ตํด๋ณด๋ฉด ๋์ผํ ์์กด์ฑ์ ๊ฐ์ง๋ ๋ชจ๋๋ค์ด ์ค๋ณต ์ ๊ฑฐ๋ ์ ์ด ๋น๊ต๋ ๊ฒ์ด๋ค.
๋์ผํ ์์กด์ฑ์ ๊ฐ์ง๋ ๋ชจ๋๋ค์ ์ต์๋จ ๊ณ์ธต์ผ๋ก Hoisting ํ์ฌ ํจ์จ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ๋ณ๊ฒฝ๋๋ค.
์ฝด๋ค ํ๋ก ํธ์๋ ํ์ ๋ชจ๋ ธ๋ ํฌ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ๋ค.
...
โโ services
โ ....
โ โโ service-a
โ โโ services-b
...
โโ libraries
โ ....
โ โโ libraries-a
โ โโ libraries-b
โโ package.json
์๋น์ค ๋ณ๋ก ๋ค๋ฅธ ํ๋ก์ ํธ๋ค์ด services ๋๋ ํ ๋ฆฌ ์์ ๋ชจ์ฌ์๊ณ , ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๊ธฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ libraries ๋๋ ํ ๋ฆฌ์ ๋ชจ์ฌ์๋ค.
// libraries/qanda-design-system
{
"name": "qanda-design-system",
"version": "1.0.1",
"dependencies": {
...
}
}
// services/project-a
{
"name": "projectA",
"dependencies": {
"qanda-design-system": "1.0.1"
}
}
์์ ๊ฐ์ด ํ๋ก์ ํธ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด libraries์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ services/project-a์ package.json์์ dependencies๋ก ํธ์ถํ๋ฉด ์ฐธ์กฐํ๊ฒ ๋๋ค.
...
โโ services
โ ....
โ โโ service-a
โ โ โโ .eslintrc
โ โโ services-b
โ โโ .eslintrc
...
โโ .eslintrc
๋ชจ๋ ธ๋ ํฌ๋ Lint ํ๊ฒฝ์์๋ ์ฅ์ ์ ๋ณด์ธ๋ค.
๋ฉํฐ๋ ํฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฆฐํธ ์ค์ ์ ๊ณตํต์ผ๋ก ๊ฐ์ ธ๊ฐ๊ฒ ๋๋๋ผ๋, ์ค์ ํ์ผ์ ๋ ํฌ์งํ ๋ฆฌ ๋ณ๋ก ๊ฐ๊ฐ ์กด์ฌํด์ผ ํ๋ค.
ํ์ง๋ง ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๋ฆฐํธ ์ค์ ์ root ๋๋ ํ ๋ฆฌ์ ํต์ผ์ํค๊ณ , ๊ฐ ํ๋ก์ ํธ ๋ณ๋ก ๋ฆฐํธ ์ค์ ์ด ์ถ๊ฐ๋ก ํ์ํ๋ค๋ฉด ๋ฆฐํธ ํ์ผ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ฐ๋ก ์ค์ ํ๋ฉด ๋ผ์ ์ฝ๋ ์ปจ๋ฒค์ ๊ด๋ฆฌ๊ฐ ํจ์ฌ ์์ํ๋ค.
5. References
ํ์ํฌ ํฅ์์ ์ํ ๋ชจ๋ ธ๋ ํฌ(Monorepo) ์์คํ ๊ตฌ์ถ
์ฝด๋ค ํ๋ก ํธ์๋ ํ์ด ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ ํํ ์ด์
blog.mathpresso.com
๋ชจ๋ ธ๋ ํฌ์ ๋ฌธํ์ ์์
Overview ์ฝด๋ค ํ๋ก ํธ์๋ ํ์์ ์ต๊ทผ ํจ์จ์ ์ธ ํ๋ก์ ํธ ๊ด๋ฆฌ๋ฅผ ์ํด "๋ชจ๋ ธ๋ ํฌ(monorepo)"๋ฅผ ๋์ ํ์ต๋๋ค. (๋ ํฌ ์ด๋ฆ๋ ๊ต์ฅํ Semantic ํ "qanda-frontend"์ ๋๋ค) ํ ๋ด์์ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ๋์ ํ์๋
yeoulcoding.me
https://d2.naver.com/helloworld/0923884
'๐ฅ Front-End > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] API (0) | 2022.07.19 |
---|---|
[Web] JWT (0) | 2022.07.19 |