Monorepo Arhitecture
Last updated
Last updated
์ํคํ ์ฒ๋ ๋ชจ๋๊ฐ ์ดํดํด์ผ ํ๋ ์ปค๋ค๋ ๊ทธ๋ฆผ์ด๋ค.
๊ตฌ์กฐ์ ๋ํ ์ดํด: ๊ณ์ธต, ์ด๋ค ์ฝ๋๊ฐ ์ด๋ ์๋์ง, ๋ชจ๋ ธ๋ ํฌ ๊ตฌ์กฐ์ ๋ํ ์ดํด
๋ฐ์ ๋ฐฉํฅ์ ๋ํ ์ดํด: ์์ผ๋ก ์ด๋ป๊ฒ ๊ตฌ์กฐ๊ฐ ๋ฐ์ ํ๊ณ ์ฝ๋๋ฅผ ์์งํ ๊ฒ์ธ์ง์ ๋ํ ์ดํด
ํ์ ๋ฐฉํฅ์ ๋ํ ์ดํด: ํ ์ง๊ตฐ๋ FE์ ์ด๋ป๊ฒ ์ผํ ์ ์๋์ง ํ์ ํ ์ ์์ด์ผ ํ๋ค.
์ฒ์์ผ๋ก ํ ๊ฒ์ ์ฅ๊ธฐ์ ์ธ ๋ชฉํ๋ ์๋๋๋ผ๋, ์ฐ๋ฆฌ๊ฐ ์ผ์ฐจ์ ์ผ๋ก ๋ฌ์ฑํ ์ฅ๊ธฐ์ ์ธ ๋ชฉํ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ
๊ณตํต์ ์ฝ๋ ๋ฐฐ์น์ ๋ ์ด์์/์ํ/๋น์ฆ๋์ค ๋ฑ์ ์ฝ๋๋ฅผ ํ์ฉํ๋ ๋ชจ๋ ธ๋ ํฌ์ ๊ตฌ์กฐ ์ ์
๋ชจ๋ ธ๋ ํฌ ํ๊ฒฝ ๊ตฌ์ถ
ํ์ฌ ์ฝ๋๋ฅผ ์จ์ ํ ๋ชจ๋ ธ๋ ํฌ๋ก ์ฎ๊ธฐ๊ธฐ
์ ์์ ์ผ๋ก QA ์งํ ํ ๋ฐฐํฌ
๊ณตํต ์ฝ๋ ๋ถ๋ฆฌ
๊ณตํต ์ฝ๋ ์ ์ฉ ๋ฐ QA ๋ฐฐํฌ
๊ณตํต ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ฒด๊ณ ์๋ฆฝ ๋ฐ ์ ์ฉ
์ํคํ ์ฒ๋ ๋ง๋ค๊ณ ๊ณ ์ธํ๊ธฐ ์ฝ์ง๋ง, ์ค๋ ํ ์ค์ ๊ฐ๋ฐ์ด ์งํ๋๊ฒ ๋ง๋๋ ๊ฒ์ ์ด๋ ต๋ค.
ํ๋น์ฑ์ ๋ถ์ฌํ๊ธฐ ์ํด ์ค ์ ์ฉํ๊ธฐ ์ํ phase๋ฅผ ๋๋๊ณ , ์ต๋ํ ๊ทธ๋ฆผ์ผ๋ก ์ค๋
์์ ๊ฒ๋ถํฐ ์์ํ์ฌ ์คํจ ํ๋ฅ ์ด ๋ฎ์ ์ฑ๊ณตํ ์ ์๋ ๊ฒ๋ค์ ๋ํด์ ์ต๋ํ ๋ง์ด ์๊ธฐ
์ ๋ขฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ฐฉ๋ฒ
ํจ๊ป ๋ค๋ฅธ ์์ ์ ๊ฐ์ด ํ์ง ์๊ธฐ
๋ถ๋ฆฌ๋ ๋ถ๋ฆฌ๋๋ก, ์ ์ฉ์ ์ ์ฉ๋ง
์ ์ฅ์ ์ ์ฒด์ ํด๋ ๊ตฌ์กฐ ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ๋ณ ํด๋ ๊ตฌ์กฐ
๊ฐ ํ๋ก์ ํธ ๋ณ ์ธํ๋ผ ๊ตฌ์ถ, ์์ ๋ด๋น์
์ ์ฒด ๊ณตํต์ ์ฝ๋๋ฅผ ๋๋๋ ๊ธฐ์ค, ์ฌ๋ฆฌ๊ธฐ ์ํ ์น์ธ ํ๋ก์ธ์ค
๋ธ๋์น ์ ๋ต์ ๋ฐ๋ฅธ ๊ฐ๋ฐ, ์ด์ ํ๊ฒฝ
ํ๋ก์ ํธ ๋ณ ์นด์ดํฐ ํํธ
๋ชจ๋ ธ๋ ํฌ ์ ํ์ ํตํด ๋ ๋ณตํฉ์ ์ธ ์ํฉ์ ๋์ํ ์ ์๋ ๊ตฌ์กฐ๋ก ๋์๊ฐ๋ค.
์ฌ๋ฌ ๋๋ฉ์ธ์ ํ๋ก๋ํธ๋ฅผ ์ฝ๋ ์ ์ฅ์ ํ๋๋ก ํฉ๋ณํ๋ฉด์ ํ์์ด ํ๋์ ๋ฐฉํฅ์ฑ์ ์ธ์ง๊ฐ๋ฅ
์ผ๊ด์ ์ธ ํ์ ํ ๊ธฐ๋ฐ์ ๋๋ฉ์ธ ๋ถ๋ฆฌ ๋ฑ์ ํตํด ์ ๋ฌด ๋ฐฉ์์ด ์ผ์ํ ๋ ์ ์์
์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฝ๋๋ค์ด ๋ถ๋ฆฌ๋์ด ์์ง ์์ผ๋ฏ๋ก ์ด๋์ ๋ ๊ท๊ฒฉํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์
ํ๋ก์ ํธ ๋จ์๋ก ์ค์ ๋ CI/CD, ์๋ํ, ํ์ดํ๋ผ์ธ ๋ฑ ์ผ์ํ ๊ฐ๋ฅ
์ฝ๋ ์ ์ฒด ๋จ์์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง, ์ธํ๋ผ, ์ค์ ์ํฉ ๋ฑ์ ํ๋์ ํ์ ๊ฐ๋ฅ
Phase1์ ๋ชจ๋ ธ๋ ํฌ์ ๊ทธ๋๋ก ํ์ ๋ ๋ฒจ์ ์ฝ๋๋ฅผ ์ด์ํ๋ ๊ฒ์ด ํค ํฌ์ธํธ
Lint๋ฑ์ ์ค์ํ ์ํด
Phase2๋ ์ด์๋ ๊ฐ ํ๋ก์ ํธ ๋ ๋ฒจ์ ๊ณตํต ์ฝ๋๋ฅผ ๋ฝ์๋ด๋ ๊ฒ
์ด ๋ ํ๋ก์ ํธ๋ณ ์ฝ๋์ ์ฉ๋์ด ๋งค์ฐ ์ค์ด๋ ๋ค.
Phase3๋ ๊ณตํต ์ฝ๋๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌํ ์์ผ ์ด์ํ๋ ๊ฒ
๊ณตํต ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ๊ธฐ ์ํ ํ๋ก์ธ์ค ๋ฐ ํ์ดํ๋ผ์ธ์ด ๊ตฌ์ถ๋์ด์ผ ํ๋ค.
Library Layer: ์์ผ๋ก ๋ณํ ๊ฐ๋ฅ์ฑ์ด ๊ฑฐ์ ์๊ณ ๋ฒ์ ๋์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ ๋๋ ๊ฒ๋ค
Common Layer: ๊ณตํต์ผ๋ก ๋ง๋ค์ด์ง ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ๋ ๋ ์ด์ด
์์ง Product๋ค์ ์ฌ๋ฌ๊ตฐ๋ฐ ์ฐ์ด์ง๋ง ์ฐ์ด๋ ๊ฒ๋ค์ด ์กฐ๊ธ staging์ด ๋๊ฒ
๊ฑฐ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์๊ณ ์ฌ์ฌ์ฉ์ด ๋์ ๊ฒ
๊ฐ ํ๋ก์ ํธ๋ ๋น์ฆ๋์ค ์ปดํฌ๋ํธ๋ฅผ ๋ค๊ณ ์์ผ๋ฉฐ, ํ๋ก์ ํธ๋ณ๋ก ๊ณตํต ์ปดํฌ๋ํธ ๋ํ ํฌํจํ๋ค.
๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๋น์ทํด์ง๋ API ์คํ๊ณผ ๋น์ทํ ๋ก์ง์ด ์๊ธฐ๊ฒ ๋จ
API ์ฝ๋๋ฅผ ๋ฐ์ ํ์ด์ง ๋จ์๋ก ์๋ฒ ์ํ๋ฅผ ๊ด๋ฆฌํ์ฌ, ์ ์ญ ์ํ์ ๋ค๋ฅธ ์ํ ๊ด๋ฆฌ ์ณฌ๊ฒ๊ฐ ํ์ํด์ง
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Common Layer์ API๋ฅผ ๋์์ฃผ๋ ํฌํผ ์ฝ๋๋ค์ ์ถ๊ฐํ๊ฒ ๋๋ค.
๋ชจ๋ ธ๋ ํฌ์์ ์ํฌ์คํ์ด์ค ํ๋กํ ์ฝ์ด๋ผ๊ณ ์ํฌ์คํ์ด์ค ๋จ์๋ก ๋ชจ๋์ ๋ง๋ค์ด์ ๊ณต์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๋ค.
Model Layer: API Code๋ค์ ๊ณตํต์ ์ธ ๋ถ๋ถ (๋ชจ๋ธ ๊ฐ, ๋น์ฆ๋์ค ์ฝ๋๋ค์ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ์ ๋ฑ)
Server State Management Tools: Server State Managment ์์ญ์ ์ฝ๋ ์ ๊ฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋น์ฆ๋์ค ์ฝ๋๋ค์ด 100% ๋ฌธ์ ์๊ณ ๋ชจ๋ ธ๋ ํฌ ๋ฐ๊นฅ์ผ๋ก ๋นผ๋ ๋ ์์ ์ผ๋ก ์ด์ ์๋ ๋ ๋ฒจ์ด์ด์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฑ์ฌ๋จ
Apps์ ๋ ๋ฒจ์ด ์๋ ๋ณ๋ API ๋ ๋ฒจ์ ๋ง๋ค์ด์ Library๋ฅผ ์ฐ๊ฒฐํ๊ณ App์ ์บก์ํํ์ฌ ์ฝ๋๋ค์ ์ํฅ์ ๋ฐ์ง ์๊ฒ๋ ํ๊ณ App์ ๋ํ Server State Managment๋ก ๋น์ฆ๋์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ
์นด์ดํฐ ํํธ๊ฐ ํ์ ๋์ด ์์ผ๋ฏ๋ก API์ ์๋ต ๊ตฌ์กฐ์ฒด๋ ๋น์ทํด์ง๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฒ ์ํ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ํ์ํด์ง
๊ณตํต API ๋ชจ๋, Interface ํ์ฅ๋ฑ์ ์ฌ์ฉํ๊ฒ ๋จ
์ ์ฒด ํ๋ก์ ํธ ๊ณตํต ์๋ฌ์ฒ๋ฆฌ ํ์
์ด๋ฅผ ์ํ API๋ฅผ ์ํ ์ ๋จ์ ๋ ์ด์ด ํน์ Common ๋ ์ด์ด์ ๊ณตํต์ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ์ ๋ต ๋ฑ์ด ํ์ํ๋ค.
Polyrepo๋ ํ๋ก์ ํธ ๋จ์์ ์ํฅ๋๋ง ํ์ ํ๋ฉด ๋๋ค.
Monorepo๋ ๊ณตํต ์์ ๋ฑ์ ์์ญ์ด ์ถ๊ฐ๋๋ฏ๋ก ๋ ๋ณต์กํ ํ๋ก์ธ์ค๊ฐ ์๊ธธ ์ ์๋ค.
์คํ๋ ค ํ๋ก๋ํธ๋ ์์๋ฐ ์ ์ฉํ๋ฉด ์ํฅ๋ฒ์ ํ์ ์ผ๋ก ์ธํด ๋ฆฌ์์ค๊ฐ ํจ์จ์ ์ผ๋ก ์ฐ์ด์ง ๋ชปํ ์ ์๋ค.
Polyrepo: ํ๋์ ์ฝ๋๊ฐ ๊ณง ์ด์ํ๋ ํ๋ก๋ํธ์ด๋ฏ๋ก ์๋ํ์ ํ์์ฑ์ด ์ ์ ์ ์์
Monorepo: ์ฝ๋๋ฆฌ๋ทฐ์ด ๋งค์นญ, ๋ฆฌ๋ทฐ์ ์๋ ํฉ๋ณ, ํฉ๋ณ์ ์๋ ๋ฐฐํฌ ๋ฑ์ ์๋ํ ํ์์ฑ ์กด์ฌ
๋ง์ ํ๋ก๋ํธ๋ฅผ ์ด์ํ๋ฉด์ ๋์ ๋ง์ถฐ ๊ฐ ํ๋ก๋ํธ๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ์ํ์ฑ๊ณผ ๋์์ ์ด์์ ์ด๋ ค์์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ
Monorepo๋ก ๋ณํํ๋ฉด์ ํ์คํ ๋ฆฌ์ ์ค์์ฑ์ "๋งค์ฐ" ์ปค์ง๋ค.
ํ๋์ ์์ ์ด ์๋ง์ ํ๋ก๋ํธ์ ์ํฅ์ ๋ผ์น ์ ์์,
์ด์ ์ ์ด๋ค ์ ํ์ด ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ์ฅ๊ธฐ์ ์ผ๋ก ๋ถ๋ฌ์ฌ์ง ๋ชจ๋ฅด๋ฏ๋ก ํ์คํ ๋ฆฌ๋ฅผ ํตํด ์ด์ ์ ์ ํ์ ๋ํด์ ์ดํดํ ์ ์๋๋ก ์ ๊ณต์ด ๋์ด์ผ ํ๋ค.
๋๊ธฐ์ ์์ ๋ฌธ์ํ๋ฅผ ํ๋ ์ด์ ์ ๋์ผ, ๋ฌธ์๋ฅผ ์ ์์ฑํด์ผํจ