# [[Feature Branch Workflow]] ## πŸ“Œ Brief Summary Feature Branch WorkflowλŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€λ‚˜ 버그 μˆ˜μ •κ³Ό 같은 λͺ¨λ“  단일 μž‘μ—…μ„ 메인(`main`) λΈŒλžœμΉ˜μ—μ„œ νŒŒμƒλœ 독립적인 단기(short-lived) λΈŒλžœμΉ˜μ—μ„œ μˆ˜ν–‰ν•˜λŠ” 버전 관리 μ „λž΅μž…λ‹ˆλ‹€ [1, 2]. 이 μ ‘κ·Ό 방식은 메인 브랜치의 μ½”λ“œκ°€ 항상 배포 κ°€λŠ₯ν•˜κ³  μ•ˆμ •μ μΈ μƒνƒœλ₯Ό μœ μ§€ν•˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€ [1-3]. μ½”λ“œλ₯Ό λ³‘ν•©ν•˜κΈ° μ „μ—λŠ” λ°˜λ“œμ‹œ Pull Request(PR)와 λ™λ£Œμ˜ μ½”λ“œ 리뷰, 그리고 μžλ™ν™”λœ ν…ŒμŠ€νŠΈλ₯Ό κ±°μΉ˜λ„λ‘ μš”κ΅¬ν•˜μ—¬ μΆ©λŒμ„ λ°©μ§€ν•˜κ³  μ½”λ“œ ν’ˆμ§ˆμ„ μœ μ§€ν•˜λŠ” 데 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€ [4, 5]. ## πŸ“– Core Content * **브랜치 운영 및 μ—­ν• :** * `main` λΈŒλžœμΉ˜λŠ” 항상 μ•ˆμ •μ μ΄κ³  배포 κ°€λŠ₯ν•œ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•˜λ©°, κ°œλ°œμžκ°€ `main`에 직접 μ»€λ°‹ν•˜λŠ” 것은 μ—„κ²©νžˆ κΈˆμ§€λ©λ‹ˆλ‹€ [1-3, 6]. * μƒˆλ‘œμš΄ μž‘μ—…(κΈ°λŠ₯, 버그 μˆ˜μ • λ“±)을 μ‹œμž‘ν•  λ•Œλ§ˆλ‹€ `main`μ—μ„œ νŒŒμƒλœ μ „μš© κΈ°λŠ₯ 브랜치(Feature Branch)λ₯Ό μƒμ„±ν•˜μ—¬ μž‘μ—…μ„ λΆ„λ¦¬ν•©λ‹ˆλ‹€ [1, 2]. * 각 κΈ°λŠ₯ λΈŒλžœμΉ˜λŠ” 수λͺ…이 μ§§μ•„μ•Ό ν•˜λ©°, ν•˜λ‚˜μ˜ λΈŒλžœμΉ˜μ—μ„œλŠ” 였직 ν•˜λ‚˜μ˜ 논리적 λ³€κ²½ 사항(Atomic Commits)만 κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€ [4, 5, 7]. * **병합 ν”„λ‘œμ„ΈμŠ€μ™€ ν’ˆμ§ˆ 관리:** * κΈ°λŠ₯ 개발이 μ™„λ£Œλ˜λ©΄ `main` 브랜치λ₯Ό ν–₯ν•΄ Pull Request(PR)λ₯Ό 생성해야 ν•©λ‹ˆλ‹€ [4, 5]. * μ½”λ“œλ₯Ό λ³‘ν•©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ΅œμ†Œ 1λͺ…μ˜ λ™λ£Œ 리뷰(Peer Review) 승인과 CI(Continuous Integration) ν…ŒμŠ€νŠΈ 톡과가 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [4, 5, 8, 9]. * 병합 μ‹œμ—λŠ” 전체 컀밋 이λ ₯을 κΉ”λ”ν•˜κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ "μŠ€μΏΌμ‹œ λ¨Έμ§€(Squash and merge)" μ „λž΅μ„ 주둜 μ‚¬μš©ν•˜λ©°, 병합 ν›„μ—λŠ” ν•΄λ‹Ή κΈ°λŠ₯ 브랜치λ₯Ό μžλ™μœΌλ‘œ μ‚­μ œν•©λ‹ˆλ‹€ [5, 6, 8, 9]. * **λͺ…λͺ… κ·œμΉ™ 및 좔적성(Traceability):** * 브랜치 이름은 μˆ˜ν–‰ν•  μž‘μ—…μ„ λͺ…ν™•ν•˜κ²Œ 식별할 수 μžˆλ„λ‘ `feature/` λ˜λŠ” `bugfix/`κ³Ό 같이 μ§§κ³  λͺ©μ μ΄ λ“œλŸ¬λ‚˜λŠ” ν˜•μ‹μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2, 4, 7]. * 이슈 트래컀(JIRA, GitHub Issues λ“±)λ₯Ό μ‚¬μš©ν•  경우, `feature/PROJ-123-user-auth`처럼 ν‹°μΌ“ IDλ₯Ό 브랜치 이름과 컀밋 λ©”μ‹œμ§€μ— ν¬ν•¨μ‹œμΌœ μ½”λ“œ λ³€κ²½ 사항과 λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­ κ°„μ˜ μ–‘λ°©ν–₯ 좔적이 κ°€λŠ₯ν•˜κ²Œ ν•΄μ•Ό ν•©λ‹ˆλ‹€ [10-12]. ## βš–οΈ Trade-offs & Caveats * **λΆ€μž‘μš© 및 μ œμ•½ 사항 (Trade-offs):** * `main` λΈŒλžœμΉ˜μ— 직접 μ»€λ°‹ν•˜λŠ” 방식에 λΉ„ν•΄μ„œλŠ” PR을 μƒμ„±ν•˜κ³  리뷰λ₯Ό κΈ°λ‹€λ €μ•Ό ν•˜λŠ” μ΅œμ†Œν•œμ˜ ν”„λ‘œμ„ΈμŠ€ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [3, 13, 14]. * **λ°˜λŒ€ κΈ‰λΆ€ 및 μ•ˆν‹° νŒ¨ν„΄ (Caveats & Anti-patterns):** * **수λͺ…이 κΈ΄ 브랜치(Long-lived branches):** 브랜치λ₯Ό 수 μ£Ό λ™μ•ˆ μ—΄μ–΄λ‘λŠ” 것은 이 μ›Œν¬ν”Œλ‘œμš°μ˜ κ°€μž₯ 큰 μ•ˆν‹° νŒ¨ν„΄μ΄λ©°, μ‹¬κ°ν•œ λ¨Έμ§€ μΆ©λŒμ„ μœ λ°œν•©λ‹ˆλ‹€ [13, 15, 16]. * **동기화 μ‹€νŒ¨:** λŒ€κ·œλͺ¨ μΆ©λŒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ κ°œλ°œμžλŠ” 맀일 μž‘μ—… μ‹œμž‘ μ „κ³Ό μž‘μ—… 도쀑에 μˆ˜μ‹œλ‘œ `main` 브랜치의 μ΅œμ‹  λ³€κ²½ 사항을 μžμ‹ μ˜ 브랜치둜 가져와(Pull/Rebase) μ μ§„μ μœΌλ‘œ μΆ©λŒμ„ ν•΄κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€ [5, 14, 15]. * **κ±°λŒ€ν•œ PR:** ν•œ λ²ˆμ— λ„ˆλ¬΄ λ§Žμ€ 변경을 ν¬ν•¨ν•˜λŠ” κ±°λŒ€ν•œ 컀밋과 PR은 λΉ λ₯Έ ν”Όλ“œλ°±μ„ λ°©ν•΄ν•˜λ―€λ‘œ, PR 크기λ₯Ό 가급적 μž‘κ²Œ(예: 200쀄 μ΄ν•˜) μœ μ§€ν•˜λŠ” 규율이 ν•„μš”ν•©λ‹ˆλ‹€ [8, 17]. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜/기반 기술] - [[Trunk-Based Development]] - μ—°κ²° 이유: Feature Branch Workflow보닀 λΉ λ₯Έ μ½”λ“œ 톡합을 λͺ©ν‘œλ‘œ ν•  λ•Œ λ„μž…ν•  수 μžˆλŠ” λŒ€μ•ˆμ  브랜칭 μ „λž΅μž…λ‹ˆλ‹€ [18, 19]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μˆ™λ ¨λœ νŒ€μ΄ κΈ°λŠ₯ ν”Œλž˜κ·Έ(Feature Flags)λ₯Ό ν™œμš©ν•˜μ—¬ 메인 λΈŒλžœμΉ˜μ— 직접 μž‘μ€ 변경을 μ§€μ†μ μœΌλ‘œ μ»€λ°‹ν•˜λŠ” 방식과 Feature Branch Workflow의 속도 및 μ•ˆμ •μ„± 차이λ₯Ό 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [19]. - [[Git Flow]] - μ—°κ²° 이유: μ†Œκ·œλͺ¨ νŒ€μ— μ ν•©ν•œ Feature Branch Workflow와 λŒ€μ‘°λ˜λŠ”, 훨씬 무겁고 λ³΅μž‘ν•œ 기쑴의 λŒ€κ·œλͺ¨ 브랜칭 μ „λž΅μž…λ‹ˆλ‹€ [14, 18]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ˜ˆμ •λœ 릴리슀 일정이 μžˆκ±°λ‚˜ 규λͺ¨κ°€ 큰 ν”„λ‘œμ νŠΈμ—μ„œ μ™œ `develop` 및 `release` λΈŒλžœμΉ˜κ°€ μΆ”κ°€λ‘œ μš”κ΅¬λ˜λŠ”μ§€, 그리고 μž‘μ€ νŒ€μ—κ²ŒλŠ” μ™œ 이것이 μ˜€λ²„ν—€λ“œκ°€ λ˜λŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€ [18, 20]. #### [κ΅¬ν˜„/ν™œμš© 도ꡬ] - [[Pull Request (PR)]] - μ—°κ²° 이유: Feature Branch Workflowμ—μ„œ 격리된 μ½”λ“œλ₯Ό `main`으둜 λ³‘ν•©ν•˜κΈ° μ „ λ°˜λ“œμ‹œ 거쳐야 ν•˜λŠ” 핡심 κ²Œμ΄νŠΈμ›¨μ΄μž…λ‹ˆλ‹€ [4, 5, 7]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ½”λ“œ 리뷰λ₯Ό μŠ΅κ΄€ν™”ν•˜κ³ , 단독 병합을 λ°©μ§€ν•˜λ©°, CI 도ꡬ와 κ²°ν•©ν•˜μ—¬ μ–΄λ–»κ²Œ μ½”λ“œ ν’ˆμ§ˆμ„ λ°©μ–΄ν•˜λŠ”μ§€ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [5, 7, 21]. - [[Conventional Commits]] - μ—°κ²° 이유: ν”Όμ²˜ λΈŒλžœμΉ˜μ—μ„œ μˆ˜ν–‰ν•˜λŠ” 컀밋 λ©”μ‹œμ§€μ˜ λͺ…ν™•μ„±κ³Ό 일관성을 보μž₯ν•˜κΈ° μœ„ν•œ 업계 ν‘œμ€€ κ·œμΉ™μž…λ‹ˆλ‹€ [4, 21]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: `feat:`, `fix:`, `chore:` λ“±μ˜ 접두사λ₯Ό μ‚¬μš©ν•˜μ—¬ μ»€λ°‹μ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν•˜κ³ , 브랜치의 μž‘μ—… 내역을 λΉ λ₯΄κ³  μ‰½κ²Œ νŒŒμ•…ν•˜λŠ” 방법을 배울 수 μžˆμŠ΅λ‹ˆλ‹€ [21, 22]. ### Deeper Research Questions - Feature Branch Workflowμ—μ„œ 브랜치 수λͺ…이 κΈΈμ–΄μ§ˆ λ•Œ ν•„μ—°μ μœΌλ‘œ λ°œμƒν•˜λŠ” λ¨Έμ§€ μΆ©λŒμ„ μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•œ ꡬ체적인 브랜치 동기화(Sync) μ „λž΅μ€ 무엇인가? - νŒ€μ˜ 규λͺ¨κ°€ 3-5λͺ…μ—μ„œ 10λͺ… μ΄μƒμ˜ λ‹€μˆ˜ νŒ€μœΌλ‘œ 컀질 λ•Œ, Feature Branch WorkflowλŠ” μ–΄λ–»κ²Œ ν™•μž₯λ˜κ±°λ‚˜ λ‹€λ₯Έ μ „λž΅(예: Git Flow, GitLab Flow)으둜 μ „ν™˜λ˜μ–΄μ•Ό ν•˜λŠ”κ°€? - Pull Request의 μ½”λ“œ 크기가 κ³Όλ„ν•˜κ²Œ μ»€μ§€λŠ” 것을 λ°©μ§€ν•˜κ³ , 이λ₯Ό "μ›μžμ  컀밋(Atomic Commits)" λ‹¨μœ„λ‘œ μœ μ§€ν•˜κ²Œ λ§Œλ“œλŠ” 싀무적인 κ°€μ΄λ“œλΌμΈμ€ 무엇인가? - CI/CD νŒŒμ΄ν”„λΌμΈμ—μ„œ Feature Branch Workflowλ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄, PR 생성 μ‹œ 병λͺ©μ„ μΌμœΌν‚€μ§€ μ•ŠμœΌλ©΄μ„œ ν•„μˆ˜μ μœΌλ‘œ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” μžλ™ν™”λœ 검사(lint, test λ“±)의 적정선은 어디인가? - κ°œλ°œμžκ°€ 브랜치λͺ…κ³Ό 컀밋 λ©”μ‹œμ§€μ— ν‹°μΌ“ ID(JIRA λ“±)λ₯Ό λˆ„λ½ν•˜μ§€ μ•Šλ„λ‘ Git Hooksλ‚˜ ν”Œλž«νΌ(GitHub, GitLab) 섀정을 톡해 μ–΄λ–»κ²Œ κ°•μ œν•  수 μžˆλŠ”κ°€? ### Practical Application Contexts - **Implementation:** μ†Œκ·œλͺ¨ νŒ€(2~5λͺ…) ν”„λ‘œμ νŠΈ μ‹œμž‘ μ‹œ, 리포지토리 μ„€μ •μ—μ„œ `main` λΈŒλžœμΉ˜μ— 직접 ν‘Έμ‹œν•˜μ§€ λͺ»ν•˜λ„둝 보호(Branch Protection)λ₯Ό κ±Έκ³ , λͺ¨λ“  μž‘μ—…μ„ `feature/` λ˜λŠ” `bugfix/`둜 λͺ…λͺ…λœ λΈŒλžœμΉ˜μ—μ„œ μ‹œμž‘ν•˜λ„λ‘ μ„ΈνŒ…ν•©λ‹ˆλ‹€ [2]. - **System Design:** 버전 관리 μ‹œμŠ€ν…œ(GitHub)κ³Ό 이슈 트래컀(JIRA, Linear)λ₯Ό μ—°λ™ν•˜λ„λ‘ μ„€κ³„ν•˜μ—¬, κ°œλ°œμžκ°€ `feature/PROJ-123` ν˜•νƒœμ˜ 브랜치λͺ…μœΌλ‘œ μ½”λ“œλ₯Ό 올리면 이슈 νŠΈλž˜μ»€μ— PR μƒνƒœμ™€ 컀밋 내역이 μžλ™μœΌλ‘œ μΆ”μ λ˜κ²Œ λ§Œλ“­λ‹ˆλ‹€ [11, 23, 24]. - **Operation / Maintenance:** κ΄€λ¦¬μ˜ νš¨μœ¨μ„±μ„ μœ„ν•΄, 메인 브랜치둜 PR이 μ„±κ³΅μ μœΌλ‘œ λ³‘ν•©λœ μ΄ν›„μ—λŠ” ν•΄λ‹Ή ν”Όμ²˜ λΈŒλžœμΉ˜κ°€ μžλ™μœΌλ‘œ μ‚­μ œ(Auto-delete merged branches)λ˜λ„λ‘ μ €μž₯μ†Œ 섀정을 μœ μ§€ν•©λ‹ˆλ‹€ [6-8]. - **Learning Path:** 처음 νŒ€ ν”„λ‘œμ νŠΈλ₯Ό κ²½ν—˜ν•˜λŠ” 초보 κ°œλ°œμžλ“€μ€ 둜컬 ν™˜κ²½μ—μ„œμ˜ 단독 μž‘μ—…μ„ λ„˜μ–΄, κΈ°λŠ₯λ³„λ‘œ 브랜치λ₯Ό λΆ„λ¦¬ν•˜κ³  PR을 톡해 λ™λ£Œμ˜ 리뷰λ₯Ό λ°›λŠ” 과정을 톡해 μ˜¬λ°”λ₯Έ ν˜‘μ—…μ˜ 기초λ₯Ό λ‹€μ§‘λ‹ˆλ‹€ [18, 25]. - **My Project Relevance:** ν˜„μž¬ μ§„ν–‰ 쀑인 ν”„λ‘œμ νŠΈμ—μ„œ κΈ°λŠ₯ 병합 μ‹œ μ½”λ“œ 좩돌이 μž¦κ±°λ‚˜ 배포 λΈŒλžœμΉ˜κ°€ 자주 κ³ μž₯λ‚œλ‹€λ©΄, 이 μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ±„νƒν•˜μ—¬ μ½”λ“œκ°€ μ•ˆμ •μ„±μ„ ν™•λ³΄ν•œ μƒνƒœμ—μ„œλ§Œ 메인 λΈŒλžœμΉ˜μ— ν•©λ₯˜ν•˜λ„둝 κ·œμΉ™μ„ 정립할 수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2, 14]. ### Adjacent Topics - [[Continuous Integration (CI)]] - ν™•μž₯ λ°©ν–₯: ν”Όμ²˜ 브랜치의 PR이 생성될 λ•Œλ§ˆλ‹€ ν•΄λ‹Ή μ½”λ“œκ°€ μ•ˆμ •μ μΈμ§€ μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κ³  λΉŒλ“œν•˜μ—¬ 병합 κ°€λŠ₯ μ—¬λΆ€λ₯Ό μ‹œμŠ€ν…œμ μœΌλ‘œ κ²€μ¦ν•˜λŠ” νŒŒμ΄ν”„λΌμΈ ꡬ좕 λ°©λ²•μœΌλ‘œ 이해λ₯Ό ν™•μž₯ν•©λ‹ˆλ‹€. - [[GitHub Flow]] - ν™•μž₯ λ°©ν–₯: Feature Branch Workflow와 맀우 μœ μ‚¬ν•˜μ§€λ§Œ, GitHub ν™˜κ²½κ³Ό 지속적 배포(Continuous Deployment)에 더 μ΅œμ ν™”λœ λ‹¨μˆœν•œ ν˜•νƒœμ˜ μ›Œν¬ν”Œλ‘œμš°λ‘œ κ°œλ…μ„ ν™•μž₯ν•˜μ—¬ 비ꡐ해 λ΄…λ‹ˆλ‹€. --- *Last updated: 2026-04-30*