πŸ“š λͺ¨λ…Έλ ˆν¬ & λ©€ν‹°λ ˆν¬

λ°•μ˜μ€Β·2023λ…„ 3μ›” 21일
0

λͺ¨λ…Έλ ˆν¬ (monorepo)

  • 버전 관리 μ‹œμŠ€ν…œμ—μ„œ 두 개 μ΄μƒμ˜ ν”„λ‘œμ νŠΈ μ½”λ“œκ°€ λ™μΌν•œ μ €μž₯μ†Œμ— μ €μž₯λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ „λž΅
  • λͺ¨λ…Έλ ˆν¬λ‘œ μš΄μ˜μ€‘μΈ νšŒμ‚¬λ“€ : Google, Meta(Facebook), MicroSoft, Uber, Airbnb, Twitter λ“±..

πŸ‘‰ λͺ¨λ…Έλ ˆν¬λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

  • κ±°λŒ€ μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•  λ•Œ, μ†ŒμŠ€ μ½”λ“œκ°€ λͺ¨λ“ˆν™” 없이 ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈλ‘œ κ΅¬μ„±λœλ‹€λ©΄, μ½”λ“œκ°€ μ„œλ‘œ μ§μ ‘μ μœΌλ‘œ μ˜μ‘΄ν•˜λ©° 단 ν•˜λ‚˜μ˜ λ²„μ „μœΌλ‘œ κ΄€λ¦¬λ˜λ©΄μ„œ 관심 뢄리(separation of concerns)κ°€ μ–΄λ €μ›Œμ§€κ³ , 섀계, λ¦¬νŒ©ν„°λ§, 배포 λ“±μ˜ μž‘μ—…μ„ 맀번 κ±°λŒ€ν•œ λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λ―€λ‘œ κ°œλ°œμƒ λ§Žμ€ μ œμ•½κ³Ό λΉ„νš¨μœ¨μ μ΄κ²Œ λœλ‹€.
  • λͺ¨λ…Έλ ˆν¬λŠ” ν•˜λ‚˜μ˜ κΈ°λ•Œλ¬Έμ— λ”μš± 효율적으둜 관리할 수 μžˆλ‹€.

πŸ‘‰ λͺ¨λ…Έλ ˆν¬μ˜ νŠΉμ§•

  1. 각 ν”„λ‘œμ νŠΈλŠ” μžμœ¨μ„±μ΄ λ†’μœΌλ©° 독립적인 개발, 린트, ν…ŒμŠ€νŠΈ, λΉŒλ“œ, κ²Œμ‹œ, 배포 νŒŒμ΄ν”„λΌμΈμ΄ 쑴재
  2. λ©€ν‹°λ ˆν¬μ—μ„œμ²˜λŸΌ λΆ„λ¦¬λœ λͺ¨λ“ˆλ“€μ€ λͺ¨λ…Έλ ˆν¬μ•ˆμ—μ„œ μ—¬μ „νžˆ λ…μž ν”„λ‘œμ νŠΈλ‘œ μ‘΄μž¬ν•˜μ§€λ§Œ μ €μž₯μ†ŒλŠ” 같은 곳을 μ‚¬μš©ν•œλ‹€.
  3. λͺ¨λ“ˆμ„ 적절히 λΆ„λ¦¬ν•˜μ—¬ 관심 뢄리λ₯Ό μ΄λ£¨λ©΄μ„œ, λ™μ‹œμ— λΆ„λ¦¬λœ λͺ¨λ“ˆμ„ μ‰½κ²Œ μ°Έμ‘°ν•˜κ³  ν…ŒμŠ€νŠΈ, λΉŒλ“œ, 배포 과정도 μ‰½κ²Œ ν•œ λ²ˆμ— ν•  수 μžˆλ‹€.
  4. λ‹¨μˆœνžˆ μ—¬λŸ¬ ν”„λ‘œμ νŠΈκ°€ ν•˜λ‚˜μ˜ 레포λ₯Ό μ‚¬μš©ν•œλ‹€κ³  ν•΄μ„œ λͺ¨λ…Έλ ˆν¬μΈ 것 μ•„λ‹˜!! -> λͺ¨λ…Έλ ˆν¬μ—μ„œλŠ” ν”„λ‘œμ νŠΈ 사이에 μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•˜κ±°λ‚˜ 같은 μ œν’ˆκ΅°μ΄κ±°λ‚˜ ν•˜λŠ” μ •μ˜λœ 관계가 μ‘΄μž¬ν•¨.
  5. ν…ŒμŠ€νŠΈ 및 λΉŒλ“œ λ²”μœ„ μ΅œμ†Œν™”
    • μ†ŒμŠ€ λ³€κ²½ μ‹œ λͺ¨λ“  ν”„λ‘œμ νŠΈλ₯Ό λ‹€μ‹œ λΉŒλ“œν•˜κ±°λ‚˜ λ‹€μ‹œ ν…ŒμŠ€νŠΈν•˜μ§€ μ•ŠλŠ”λ‹€. λŒ€μ‹  λ³€κ²½ μ‚¬ν•­μ˜ 영ν–₯을 λ°›λŠ” ν”„λ‘œμ νŠΈλ§Œ λ‹€μ‹œ ν…ŒμŠ€νŠΈν•˜κ³  λΉŒλ“œν•œλ‹€.

πŸ‘‰ λͺ¨λ…Έλ ˆν¬κ°€ ν•΄κ²°ν•˜λŠ” λ©€ν‹°λ ˆν¬μ˜ 문제

  • 더 μ‰¬μš΄ ν”„λ‘œμ νŠΈ 생성
  • 더 μ‰¬μš΄ μ˜μ‘΄μ„± 관리
  • λ‹¨μΌν™”λœ 관리 포인트 : κ°œλ°œν™˜κ²½ 및 DevOps에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό ν•œ λ²ˆμ— λ°˜μ˜ν•  수 μžˆλ‹€.
  • μΌκ΄€λœ 개발자 κ²½ν—˜ 제곡 : μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μΌκ΄€λ˜κ²Œ κ΅¬μΆ•ν•˜κ³  ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.
  • ν”„λ‘œμ νŠΈλ“€μ— 걸친 μ›μžμ  컀밋 : λ³€κ²½ μ‚¬ν•­μ˜ 영ν–₯을 λ°›λŠ” μ‘°μ§μ—μ„œ μ‰½κ²Œ λ³€ν™”λ₯Ό 확인가λŠ₯.
  • μ„œλ‘œ μ˜μ‘΄ν•˜λŠ” μ €μž₯μ†Œλ“€μ˜ λ¦¬νŒ©ν„°λ§ λΉ„μš© κ°μ†Œ

λͺ¨λ…Έλ ˆν¬κ°€ μ μ ˆν•œ 상황

πŸ€·πŸ»β€β™€οΈ 항상 λͺ¨λ…Έλ ˆν¬κ°€ 훨씬 쒋은 것은 μ•„λ‹˜!! 상황에 따라 ν”Œμ μ— 따라~

  • μœ μ‚¬ν•œ μ œν’ˆμ˜ 집합
  • μ—¬λŸ¬ ν”„λ‘œμ νŠΈμ˜ λ³€ν™”λ₯Ό ν•œλˆˆμ— νŒŒμ•…ν•΄μ•Ό ν•  λ•Œ
  • 호슀트 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν”ŒλŸ¬κ·ΈμΈ λ“±μœΌλ‘œ ν™•μž₯ν•  λ•Œ
  • 곡톡 κΈ°λŠ₯을 μž¬μ‚¬μš©ν•˜λŠ” κ΄€λ ¨λœ ν”„λ‘œμ νŠΈμ˜ 집합
  • μœ μ‚¬ν•œ DevOps둜 κ΅¬μ„±λœ ν”„λ‘œμ νŠΈμ˜ 집합
  • λͺ¨λ…Έλ ˆν¬ ꡬ좕을 λ„μ™€μ£ΌλŠ” 도ꡬ
    - Lerna, Yarn, npm, pnpm, Nx 등이 많이 μ‚¬μš©λ¨.

λ©€ν‹°λ ˆν¬(multirepo)

= 폴리레포(polyrepo)

  • ν˜„μž¬ λŒ€λΆ€λΆ„μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜λŠ” ν‘œμ€€μ μΈ 방법
  • νŒ€μ˜ μžμœ¨μ„±μ΄λΌλŠ” 큰 이유 λ•Œλ¬Έμ— 이 방식을 μ„ ν˜Έν•˜κΈ°λ„ ν•œλ‹€.
  • κ·Έ νŒ€μ˜ μžμœ¨μ„± λ•Œλ¬Έμ— ν˜‘μ—…ν•˜κΈ°μ—λŠ” λΆˆνŽΈν•˜λ‹€.

πŸ‘‰ λ©€ν‹°λ ˆν¬μ˜ 단점

  • 번거둜운 ν”„λ‘œμ νŠΈ 생성
    - μƒˆλ‘œμš΄ 곡유 νŒ¨ν‚€μ§€λ₯Ό 생성할 λ•Œλ§ˆλ‹€ μ €μž₯μ†Œ 생성 > 컀미터 μΆ”κ°€ > 개발 ν™˜κ²½ ꡬ좕 > CI/CD ꡬ좕 > λΉŒλ“œ > νŒ¨ν‚€μ§€ μ €μž₯μ†Œμ— publish의 번거둜운 과정을 거쳐야 ν•œλ‹€.
  • 쀑볡 μ½”λ“œμ˜ κ°€λŠ₯μ„±
  • 관리 포인트 증가
    - λŠ˜μ–΄λ‚œ ν”„λ‘œμ νŠΈ μ €μž₯μ†Œμ˜ 수만큼 관리 ν¬μΈνŠΈκ°€ λŠ˜μ–΄λ‚œλ‹€. 린트, ν…ŒμŠ€νŠΈ, 개발 λͺ¨λ“œ μ‹€ν–‰, λΉŒλ“œ, κ²Œμ‹œ, 배포 λ“±μ˜ 과정을 μ €μž₯μ†Œμ˜ 수만큼 반볡
  • 일관성 μ—†λŠ” 개발자 κ²½ν—˜(DX)
  • λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ λ³€κ²½ 사항 νŒŒμ•… : 맀번 νŒŒμ•…ν–μ•Ό 됨.
  • ꡐ차 μ €μž₯μ†Œμ˜ λ¦¬νŒ©ν„°λ§ λΉ„μš©

λͺ¨λ…Έλ ˆν¬ μ°Έκ³ 
μ‚¬μš©λŸ‰ μ°Έκ³ 

0개의 λŒ“κΈ€