# [[Git Workflow]] ## πŸ“Œ Brief Summary Git Workflow(κΉƒ μ›Œν¬ν”Œλ‘œμš°)λŠ” νŒ€ ν™˜κ²½μ—μ„œ μ½”λ“œ λ³€κ²½ 사항을 κ΄€λ¦¬ν•˜κ³  ν˜‘μ—…ν•˜κΈ° μœ„ν•œ 체계적이고 κ΅¬μ‘°ν™”λœ μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€ [1, 2]. μ΄λŠ” κΈ°λŠ₯ 브랜치(Feature-branch), 트렁크 기반(Trunk-based), Git Flow λ“± λ‹€μ–‘ν•œ μ „λž΅μ„ ν¬κ΄„ν•˜λ©°, μΆ©λŒμ„ λ°©μ§€ν•˜κ³  `main` 브랜치의 배포 κ°€λŠ₯ μƒνƒœλ₯Ό 보μž₯ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€ [2-4]. μΌκ΄€λœ 브랜치 λͺ…λͺ… κ·œμΉ™, 컀밋 λ©”μ‹œμ§€ κ·œμ•½, ν’€ λ¦¬ν€˜μŠ€νŠΈ(PR)와 리뷰 절차λ₯Ό λ„μž…ν•¨μœΌλ‘œμ¨ 잠재적인 ν˜Όλˆμ„ 예츑 κ°€λŠ₯ν•œ 릴리슀 νλ¦„μœΌλ‘œ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 5, 6]. ## πŸ“– Core Content * **μ£Όμš” 브랜칭 μ „λž΅ (Main Branching Strategies):** * **Feature-Branch Workflow (κΈ°λŠ₯ 브랜치 μ›Œν¬ν”Œλ‘œμš°):** μ£Ό 브랜치(`main`)λ₯Ό 항상 μ•ˆμ •μ μ΄κ³  배포 κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€ν•˜λ©°, μƒˆλ‘œμš΄ μž‘μ—…μ΄λ‚˜ 버그 μˆ˜μ •λ§ˆλ‹€ 짧은 수λͺ…μ˜ κΈ°λŠ₯ 브랜치(예: `feature/login`)λ₯Ό μƒμ„±ν•˜μ—¬ μž‘μ—…ν•©λ‹ˆλ‹€ [3, 4, 7]. μ†Œκ·œλͺ¨ νŒ€μ— 맀우 μ ν•©ν•˜λ©°, μ˜€λ²„ν—€λ“œ 없이 μ½”λ“œλ₯Ό μ•ˆμ „ν•˜κ²Œ 톡합할 수 μžˆμŠ΅λ‹ˆλ‹€ [4, 8]. * **Trunk-Based Development (트렁크 기반 개발):** κ°•λ ₯ν•œ CI(지속적 톡합) ν™˜κ²½μ„ κ°–μΆ˜ κ²½ν—˜ λ§Žμ€ νŒ€μ— μ ν•©ν•œ λ°©μ‹μœΌλ‘œ, μ•„μ£Ό 짧은 수λͺ…μ˜ 브랜치λ₯Ό μ‚¬μš©ν•΄ 자주 `main`에 μ½”λ“œλ₯Ό λ³‘ν•©ν•˜μ—¬ 톡합 속도λ₯Ό λ†’μž…λ‹ˆλ‹€ [8, 9]. * **Git Flow:** `develop` 및 `release` λ“± λ‹€μˆ˜μ˜ 브랜치λ₯Ό μš΄μ˜ν•˜λ©° μŠ€μΌ€μ€„λœ 릴리슀λ₯Ό κ΄€λ¦¬ν•˜λŠ” λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ— μ ν•©ν•˜μ§€λ§Œ, μ†Œκ·œλͺ¨ νŒ€μ—κ²ŒλŠ” λ„ˆλ¬΄ λ³΅μž‘ν•˜κ³  무거울 수 μžˆμŠ΅λ‹ˆλ‹€ [8, 10]. * **GitHub Flow:** κΈ°λŠ₯을 κΈ°λŠ₯ λΈŒλžœμΉ˜μ—μ„œ μž‘μ—…ν•œ λ’€ ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό 톡해 리뷰받고 λ³‘ν•©ν•˜μ—¬, `main`μ—μ„œ λ°”λ‘œ λ°°ν¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [11, 12]. * **λͺ…λͺ… κ·œμΉ™ 및 좔적성 (Naming Conventions & Traceability):** * **브랜치 이름:** 브랜치 λͺ©μ μ„ λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ `feature/`, `bugfix/`와 같은 접두사λ₯Ό μ‚¬μš©ν•˜λ©°, ν‹°μΌ“ IDλ₯Ό ν•¨κ»˜ 포함(예: `feature/PROJ-123-user-auth`)ν•˜μ—¬ 이슈 νŠΈλž˜μ»€μ™€μ˜ 좔적성을 확보해야 ν•©λ‹ˆλ‹€ [13-15]. * **컀밋 λ©”μ‹œμ§€:** `type(scope): description` ν˜•νƒœλ₯Ό λ”°λ₯΄λŠ” "Conventional Commits" κ·œμ•½μ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [6, 16]. 예λ₯Ό λ“€μ–΄ μƒˆλ‘œμš΄ κΈ°λŠ₯은 `feat:`, 버그 μˆ˜μ •μ€ `fix:`, λ¬Έμ„œ μˆ˜μ •μ€ `docs:` λ“±μœΌλ‘œ μ‹œμž‘ν•˜μ—¬ λ³€κ²½μ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν•©λ‹ˆλ‹€ [6, 16]. * **ν’€ λ¦¬ν€˜μŠ€νŠΈμ™€ 병합 (Pull Requests & Merging):** * `main` λΈŒλžœμΉ˜μ— 직접 ν‘Έμ‹œ(Push)ν•˜λŠ” 것을 κΈˆμ§€ν•˜κ³ , λ°˜λ“œμ‹œ ν’€ λ¦¬ν€˜μŠ€νŠΈ(PR)λ₯Ό μƒμ„±ν•˜μ—¬ μ΅œμ†Œ 1λͺ… μ΄μƒμ˜ λ™λ£Œμ—κ²Œ μ½”λ“œ 리뷰λ₯Ό λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€ [13, 17]. * μ½”λ“œ 리뷰 속도와 ν’ˆμ§ˆμ„ μœ„ν•΄ PR은 μž‘κ³  논리적인 단일 λ³€κ²½ 사항(Atomic Commits) λ‹¨μœ„λ‘œ μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€ [16, 18]. * 병합 μ‹œμ—λŠ” μŠ€μΏΌμ‹œ 병합(Squash merge)을 μ‚¬μš©ν•˜μ—¬ 컀밋 νžˆμŠ€ν† λ¦¬λ₯Ό κΉ”λ”ν•˜κ²Œ μœ μ§€ν•˜κ³ , 병합이 μ™„λ£Œλœ κΈ°λŠ₯ λΈŒλžœμΉ˜λŠ” μžλ™μœΌλ‘œ μ‚­μ œν•˜μ—¬ 리포지토리λ₯Ό μ •λ¦¬ν•©λ‹ˆλ‹€ [17-19]. ## βš–οΈ Trade-offs & Caveats * **ꡬ쑰의 λ³΅μž‘μ„± vs. νŒ€μ˜ 규λͺ¨:** Git FlowλŠ” λŒ€κ·œλͺ¨μ˜ λ³΅μž‘ν•œ 릴리슀 κ³„νšμ„ μ•ˆμ „ν•˜κ²Œ 관리할 수 μžˆμ§€λ§Œ, ν”„λ‘œμ„ΈμŠ€ μ˜€λ²„ν—€λ“œκ°€ 크고 병합 지연을 μ΄ˆλž˜ν•©λ‹ˆλ‹€ [8, 20]. 반면, Feature-Branch μ›Œν¬ν”Œλ‘œμš°λ‚˜ Trunk-Based 방식은 μ†Œκ·œλͺ¨ νŒ€μ΄ λΉ λ₯΄κ³  κ°€λ³κ²Œ 움직일 수 μžˆλ„λ‘ λ•μ§€λ§Œ, 규λͺ¨κ°€ μ»€μ§€κ±°λ‚˜ μ—„κ²©ν•œ 릴리슀 버전 관리가 ν•„μš”ν•œ 경우 ν•œκ³„μ— λΆ€λ”ͺ힐 수 μžˆμ–΄ μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ§„ν™”(Migration)μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€ [8, 10]. * **κΈ°λŠ₯ 브랜치의 수λͺ…κ³Ό 좩돌:** κΈ°λŠ₯ 브랜치 λ°©μ‹μ˜ κ°€μž₯ 큰 λΆ€μž‘μš©μ€ 브랜치의 수λͺ…이 κΈΈμ–΄μ§ˆ 경우 메인 λΈŒλžœμΉ˜μ™€μ˜ 차이가 컀져 μ‹¬κ°ν•œ 병합 좩돌(Merge Conflict)이 λ°œμƒν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€ [20, 21]. 이λ₯Ό ν”Όν•˜κΈ° μœ„ν•΄ κ°œλ°œμžλŠ” 자주 `main` 브랜치λ₯Ό ν’€(Pull) λ°›κ±°λ‚˜ 리베이슀(Rebase)ν•˜μ—¬ μ΅œμ‹  μƒνƒœλ₯Ό λ™κΈ°ν™”ν•˜λŠ” 뢀가적인 μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€ [19, 20]. * **μ™„μ „ν•œ μΆ”μ μ„±μ˜ λŒ€κ°€:** λͺ¨λ“  λΈŒλžœμΉ˜μ™€ 컀밋에 ν‹°μΌ“ ID λΆ€μ—¬λ₯Ό κ°•μ œν•˜λ©΄ 버그 μΆ”μ μ΄λ‚˜ 리뷰에 μžˆμ–΄ μ»¨ν…μŠ€νŠΈ ν™•λ³΄μ—λŠ” νƒμ›”ν•˜λ‚˜ [5, 22], μ•„μ£Ό λ‹¨μˆœν•˜κ³  μ‚¬μ†Œν•œ μ½”λ“œ μˆ˜μ • μž‘μ—…μ—λ„ λ°˜λ“œμ‹œ 티켓을 μƒμ„±ν•˜κ³  절차λ₯Ό λ°Ÿμ•„μ•Ό ν•˜λŠ” 속도 μ €ν•˜μ˜ 단점이 λ°œμƒν•©λ‹ˆλ‹€ [23]. * **Trunk-Based μ „ν™˜μ˜ μ „μ œ 쑰건:** Trunk-Based Development둜 μ „ν™˜ν•˜μ—¬ λΉ λ₯Έ ν†΅ν•©μ˜ 이점을 μ–»κ³ μž ν•œλ‹€λ©΄, μ½”λ“œμ˜ λΆˆμ•ˆμ •μ„±μ„ 감좔기 μœ„ν•œ κΈ°λŠ₯ ν† κΈ€(Feature flags) 기법과 병합 μ „ 결함을 μž‘μ•„λ‚Ό κ°•λ ₯ν•œ ν…ŒμŠ€νŠΈ μžλ™ν™”(CI)κ°€ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λœλ‹€λŠ” μ œμ•½ 사항이 μžˆμŠ΅λ‹ˆλ‹€ [12]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A (μ•„ν‚€ν…μ²˜/기반 기술)] - `[[Trunk-Based Development]]` - μ—°κ²° 이유: Git Workflowλ₯Ό κ΅¬μ„±ν•˜λŠ” 핡심 μ „λž΅ 쀑 ν•˜λ‚˜λ‘œ, λΉ λ₯Έ 톡합을 λͺ©μ μœΌλ‘œ ν•˜λŠ” λ°©λ²•λ‘ μž…λ‹ˆλ‹€ [2]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 짧은 수λͺ…μ˜ 브랜치, λΉˆλ²ˆν•œ 병합, κΈ°λŠ₯ ν”Œλž˜κ·Έ(Feature Flags) ν™œμš©μ΄ ν”„λ‘œμ νŠΈ 배포 속도에 μ–΄λ–»κ²Œ κΈ°μ—¬ν•˜λŠ”μ§€ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [9, 12]. - `[[Git Flow]]` - μ—°κ²° 이유: ꡬ쑰가 λ³΅μž‘ν•œ λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ 릴리슀λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ 전톡적 브랜칭 λͺ¨λΈμž…λ‹ˆλ‹€ [2, 10]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: `develop`, `release`, `hotfix` λ“± 닀쀑 브랜치 μ „λž΅μ΄ μ™œ μ˜€λ²„ν—€λ“œλ₯Ό μœ λ°œν•˜λ©΄μ„œλ„ μ—”ν„°ν”„λΌμ΄μ¦ˆ ν™˜κ²½μ—μ„œ μ‚¬μš©λ˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8, 10]. #### [관계 μœ ν˜• B (κ΅¬ν˜„/ν™œμš© 도ꡬ)] - `[[Conventional Commits]]` - μ—°κ²° 이유: νŒ€μ˜ μΌκ΄€λœ μ½”λ“œλ² μ΄μŠ€ νžˆμŠ€ν† λ¦¬ 관리λ₯Ό μœ„ν•΄ Git 컀밋 λ©”μ‹œμ§€ μž‘μ„±μ— μ μš©λ˜λŠ” 업계 ν‘œμ€€ κ·œμΉ™μž…λ‹ˆλ‹€ [6, 16]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: `feat:`, `fix:`, `chore:`와 같은 접두사가 λ¦¬λ·°μ–΄μ˜ μ½”λ“œ 이해도λ₯Ό μ–΄λ–»κ²Œ 높이고 μžλ™ν™”λœ λ¦΄λ¦¬μŠ€μ— κΈ°μ—¬ν•˜λŠ”μ§€ 배울 수 μžˆμŠ΅λ‹ˆλ‹€ [6, 16]. - `[[Pull Requests (PR)]]` - μ—°κ²° 이유: 브랜치의 μ½”λ“œλ₯Ό `main`으둜 λ³‘ν•©ν•˜κΈ° μ „, ν˜‘μ—… νŒ€μ›λ“€μ΄ μ½”λ“œλ₯Ό κ²€ν† ν•˜λŠ” 핡심 κ΄€λ¬Έμž…λ‹ˆλ‹€ [13, 16]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 브랜치 보호 μ„€μ •, λ™λ£Œ 리뷰 μš”κ΅¬(1 review required), 지속적 톡합(CI) 체크가 μ‹œμŠ€ν…œ μ•ˆμ •μ„± μœ μ§€μ— μ–΄λ–»κ²Œ ν•„μˆ˜μ μœΌλ‘œ μž‘μš©ν•˜λŠ”μ§€ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [16, 17]. - `[[Ticket IDs (Traceability)]]` - μ—°κ²° 이유: μ½”λ“œμ˜ λ³€κ²½ 사항이 μ–΄λ–€ λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­(예: Jira ν‹°μΌ“)에 μ˜ν•΄ λ°œμƒν–ˆλŠ”μ§€λ₯Ό μ—°κ²°ν•˜λŠ” 도ꡬ적 μž₯μΉ˜μž…λ‹ˆλ‹€ [5, 22]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: `PROJ-123` ν˜•νƒœμ˜ ν‹°μΌ“ 번호λ₯Ό λΈŒλžœμΉ˜μ™€ 컀밋에 μ‚½μž…ν•¨μœΌλ‘œμ¨ λ¦¬λ·°μ–΄μ—κ²Œ λ§₯락을 μ œκ³΅ν•˜κ³ , λ¬Έμ„œν™” 및 μž‘μ—… 좔적(Traceability)을 μ–΄λ–»κ²Œ λ‹¬μ„±ν•˜λŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€ [5, 22]. ### Deeper Research Questions - μ†Œκ·œλͺ¨ νŒ€μ΄ μ„±μž₯ν•˜μ—¬ λ³΅μž‘μ„±μ΄ 증가할 λ•Œ, Feature Branch Workflowμ—μ„œ Git Flow둜 μ•ˆμ „ν•˜κ²Œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λ €λ©΄ μ–΄λ–€ μ ˆμ°¨μ™€ νŒ€ λ‚΄ ꡐ윑이 ν•„μš”ν•œκ°€? - Trunk-Based Developmentλ₯Ό 효과적으둜 λ„μž…ν•˜κΈ° μœ„ν•΄ CI/CD(지속적 톡합/배포) νŒŒμ΄ν”„λΌμΈμ—μ„œ λ°˜λ“œμ‹œ ꡬ성해야 ν•˜λŠ” μžλ™ν™” ν…ŒμŠ€νŠΈ 쑰건은 무엇인가? - Conventional Commits μ‹œμŠ€ν…œκ³Ό μ—°λ™ν•˜μ—¬ μžλ™ 릴리슀 λ…ΈνŠΈλ₯Ό μž‘μ„±ν•˜κ³  μ‹œλ§¨ν‹± 버저닝(Semantic Versioning)을 κ΅¬ν˜„ν•˜λŠ” 기술적 μ›λ¦¬λŠ” μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”κ°€? - λ‹€μˆ˜μ˜ μž‘μ—…μžκ°€ κ²ΉμΉ˜λŠ” μ˜μ—­μ„ μˆ˜μ •ν•  λ•Œ λ°œμƒν•˜λŠ” Merge Conflictλ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄, 'Atomic Commits'와 '자주 λ³‘ν•©ν•˜κΈ°' 원칙은 μ‹€λ¬΄μ—μ„œ μ–΄λ–»κ²Œ ꡬ체적으둜 μ μš©λ˜μ–΄μ•Ό ν•˜λŠ”κ°€? - μ½”λ“œ 리뷰의 병λͺ© ν˜„μƒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ PR의 규λͺ¨λ₯Ό μž‘κ²Œ(예: 200쀄 μ΄ν•˜) μœ μ§€ν•˜λ©΄μ„œλ„ 논리적인 κΈ°λŠ₯ λ‹¨μœ„λ₯Ό ν›Όμ†ν•˜μ§€ μ•ŠλŠ” μ½”λ“œ λΆ„ν•  기법은 무엇인가? ### Practical Application Contexts - **Implementation:** μƒˆλ‘œμš΄ μž‘μ—…μ„ μ‹œμž‘ν•  λ•Œ 무쑰건 `git checkout -b feature/ν‹°μΌ“ID-μž‘μ—…λͺ…`으둜 독립적인 브랜치λ₯Ό 파고, μ™„λ£Œ ν›„ `feat:` λ“±μ˜ κ·œμΉ™μ„ λ”°λ₯Έ 컀밋 λ©”μ‹œμ§€λ₯Ό μž‘μ„±ν•œ λ’€ `main` λΈŒλžœμΉ˜μ— PR을 μƒμ„±ν•©λ‹ˆλ‹€ [6, 7, 13, 22]. - **System Design:** GitHub와 같은 ν˜ΈμŠ€νŒ… ν”Œλž«νΌμ—μ„œ `main` 브랜치 보호(Branch Protection) μ˜΅μ…˜μ„ ν™œμ„±ν™”ν•˜μ—¬ 직접 ν‘Έμ‹œλ₯Ό 막고, CI λΉŒλ“œ 톡과와 μ΅œμ†Œ 1인의 승인이 μžˆμ–΄μ•Ό λ³‘ν•©λ˜λ„λ‘ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•©λ‹ˆλ‹€ [17]. - **Operation / Maintenance:** λΈŒλžœμΉ˜κ°€ 병합될 λ•Œλ§ˆλ‹€ μŠ€μΏΌμ‹œ 병합(Squash and merge)을 κ°•μ œν•˜μ—¬ 컀밋 νžˆμŠ€ν† λ¦¬λ₯Ό 단일 ν•­λͺ©μœΌλ‘œ μ••μΆ•ν•˜κ³ , 병합 ν›„ 남은 브랜치λ₯Ό μžλ™ μ‚­μ œ(Auto-delete) μ„€μ •ν•˜μ—¬ μ €μž₯μ†Œλ₯Ό κΉ”λ”ν•˜κ²Œ μš΄μ˜ν•©λ‹ˆλ‹€ [17-19]. - **Learning Path:** Git에 μž…λ¬Έν•˜λŠ” μ†Œκ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ 경우, λ³΅μž‘ν•œ `develop` 브랜치 없이 `main` 브랜치 ν•˜λ‚˜μ™€ κΈ°λŠ₯ λΈŒλžœμΉ˜λ“€λ‘œλ§Œ κ΅¬μ„±λœ κ°€λ²Όμš΄ μ›Œν¬ν”Œλ‘œμš°(Feature-Branch Workflow)λ₯Ό λ¨Όμ € ν•™μŠ΅ν•˜κ³  μ²΄ν™”ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [4, 8]. - **My Project Relevance:** ν˜„μž¬ μ§„ν–‰ν•˜λŠ” 3인 규λͺ¨μ˜ ν”„λ‘œμ νŠΈ λ“±μ—μ„œλŠ” Git Flow의 무거운 절차λ₯Ό ν”Όν•˜κ³ , 항상 배포 κ°€λŠ₯ν•œ μ•ˆμ •μ μΈ `main` 브랜치λ₯Ό κΈ°μ€€μœΌλ‘œ 짧은 κΈ°λŠ₯ 브랜치λ₯Ό μƒμ„±ν•˜μ—¬ λΉ λ₯Έ 리뷰와 ν”Όλ“œλ°±μ„ μ£Όκ³ λ°›λŠ” 방식을 즉각 λ„μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4, 8]. ### Adjacent Topics - `[[CI/CD (Continuous Integration/Continuous Deployment)]]` - ν™•μž₯ λ°©ν–₯: PR을 μƒμ„±ν•˜κ±°λ‚˜ 병합할 λ•Œ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κ³  λΉŒλ“œ, λ°°ν¬ν•˜λŠ” 인프라 νŒŒμ΄ν”„λΌμΈ ꡬ성 λ°©λ²•λ‘ μœΌλ‘œ ν™•μž₯ν•˜μ—¬ 쑰사. - `[[Semantic Versioning (SemVer)]]` - ν™•μž₯ λ°©ν–₯: Git νƒœκ·Έ(Tag)와 Conventional Commitsλ₯Ό ν™œμš©ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄μ˜ 버전을 체계적이고 일관성 있게 λΆ€μ—¬ν•˜λŠ” λ°©λ²•μœΌλ‘œ ν™•μž₯. --- *Last updated: 2026-04-30*