Feature Branch — 는 Git의 브랜칭 기법으로, 각 새 기능이 메인 코드에서 분리된 별도의 브랜치에서 개발됩니다. 이를 통해 여러 개발자가 프로젝트의 안정적인 버전을 손상시킬 위험 없이 다양한 작업을 동시에 수행할 수 있습니다. Atlassian, 2024에 따르면, Feature Branch는 Git Flow의 핵심 요소이며 대부분의 상업용 프로젝트에서 사용됩니다.
핵심 포인트
feature/기능-이름.Feature Branch(기능 브랜치)는 특정 기능을 개발하기 위해 develop에서 생성되는 Git의 임시 브랜치입니다. 장기간 유지되는 main 및 develop 브랜치와 달리, feature 브랜치는 제한된 시간 — 몇 시간에서 몇 주 — 동안만 존재합니다.
feature branch의 주요 목적은 하나의 작업과 관련된 변경 사항을 나머지 코드에서 격리하는 것입니다. 개발자는 자신의 브랜치에서 실험하고, 여러 커밋을 만들고, 코드를 손상시킬 수도 있으며, 팀의 다른 구성원의 작업에 영향을 미치지 않습니다.
개발이 완료되면 feature 브랜치는 필수 코드 리뷰와 함께 Pull Request를 통해 develop으로 다시 병합됩니다. 병합 후, 저장소를 깨끗하게 유지하기 위해 브랜치는 일반적으로 삭제됩니다.
Vincent Driessen, 2010에 따르면, feature 브랜치를 사용한 Git Flow 모델은 다양한 유형의 브랜치 간 책임의 명확한 분리 덕분에 업계 표준이 되었습니다.
워크플로는 개발자가 각 새 기능에 대해 수행하는 일련의 단계로 구성됩니다. 이 프로세스는 병합 충돌을 최소화하고 코드 품질 관리를 보장합니다.
develop과의 정기적인 동기화는 매우 중요합니다. feature 브랜치가 develop의 변경 사항을 병합하지 않고 오래 살수록 최종 병합에서 충돌 가능성이 높아집니다.
| 동기화 빈도 | 충돌 위험 | 개발 편의성 |
|---|---|---|
| 매일 | 낮음 | 빈번한 rebase 또는 merge 필요 |
| 매주 | 중간 | 편안한 속도, 중간 정도 충돌 |
| 매월 | 높음 | 복잡한 병합 충돌 해결 위험 |
| 하지 않음 | 심각 | 데이터 손실 없이 병합이 불가능할 수 있음 |
브랜치 명명은 팀 규율의 중요한 부분입니다. 통일된 명명 표준을 통해 어떤 작업이 진행 중이고 누가 수행하고 있는지 빠르게 식별할 수 있습니다.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.JIRA, Trello 또는 다른 시스템의 작업 ID를 사용하는 것이 모범 사례입니다. 코드를 작업에 자동으로 연결하고 git log를 통한 브랜치 검색을 단순화합니다.
Pull Request(또는 GitLab의 Merge Request)는 feature 브랜치를 develop에 병합하기 위한 요청입니다. PR은 단순한 기술 작업이 아니라, 코드 품질을 향상시키고 팀 내 지식을 전파하는 팀 코드 리뷰 프로세스입니다.
좋은 PR에는 작업에 대한 간략한 설명이 포함된 제목, 티켓 링크 및 변경 사항 설명이 포함됩니다. 개발자는 정확히 무엇이 수행되었는지, 어떤 파일이 변경되었는지, 프로젝트의 다른 부분에 잠재적 위험이 있는지 명시해야 합니다.
팀은 PR에서 코드를 검토하고, 댓글을 남기고, 변경을 요청하고(change requests), 병합을 승인합니다(approve). 승인 후 merge 또는 squash merge가 수행됩니다.
모바일 개발의 PR 리뷰 평균 시간은 4~24시간입니다. Danger 라이브러리는 PR 내에서 직접 린터와 테스트를 실행하여 일부 검사를 자동화합니다.
PR 승인 후, feature 브랜치는 다양한 방식으로 develop에 병합될 수 있습니다. 병합 전략의 선택은 커밋 기록과 변경 사항 롤백 가능성에 영향을 미칩니다.
자주 릴리스하는 모바일 프로젝트의 경우 일반적으로 squash merge가 사용됩니다. develop에서 깔끔한 기록을 제공하며, 개발 세부 사항은 PR 설명과 트래커 작업에 남습니다.
경험 많은 개발자도 feature 브랜치 작업 시 실수를 합니다. 일반적인 문제를 알면 시간과 데이터 손실을 방지할 수 있습니다.
이러한 문제를 피하는 가장 좋은 방법은 프로젝트 시작 시 작업 규칙에 동의하고 CI/CD 파이프라인에서 자동화된 검사를 사용하는 것입니다.
실용적인 시나리오를 고려해 보겠습니다. 개발자가 모바일 앱에서 새 인증 기능을 시작합니다. feature 브랜치를 만들고, 코드 작업을 수행하고, Pull Request로 작업을 완료합니다.
# develop 업데이트 및 feature 브랜치 생성
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# 기능 작업: 커밋
git add src/ui/login/
git commit -m "Add login screen layout"
# 서버에 feature 브랜치 푸시
git push origin feature/add-login-screen
# develop과 동기화(rebase)
git fetch origin develop
git rebase origin/develop
# PR 승인 후: 로컬 develop 업데이트 및 브랜치 삭제
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
git branch -d 명령어는 변경 사항이 완전히 병합된 후에만 브랜치를 삭제합니다. 브랜치가 병합되지 않은 경우, Git은 강제 삭제를 위해 git branch -D를 사용하도록 제안합니다 — 이 플래그는 주의해서 사용하십시오.
PR을 생성하기 전에 각 feature 브랜치에 대해 CI/CD 파이프라인을 실행해야 합니다. 이를 통해 코드가 다른 개발자의 리뷰에 들어가기 전에 초기 단계에서 문제를 발견할 수 있습니다.
# feature 브랜치 확인을 위한 GitHub Actions
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
파이프라인은 코드가 컴파일되고, 테스트가 통과하며, 코드 스타일이 팀 표준을 충족하는지 확인합니다. 모든 검사를 통과한 후에만 Pull Request를 생성할 수 있습니다.
자주 묻는 질문
네, 표준적인 관행입니다. 각 개발자는 자신의 feature 브랜치에서 작업할 수 있으며, 모두 develop과 독립적으로 동기화됩니다. 주요 규칙은 코드에서 교차 작업 의존성을 피하기 위해 작업당 하나의 브랜치입니다.
feature 브랜치에서 git rebase origin/develop을 실행하세요. 충돌이 발생하면 하나씩 해결합니다 — 커밋이 develop의 최신 상태 위에 다시 작성됩니다. Rebase 후 원격 브랜치를 업데이트하려면 git push --force가 필요합니다.
작업이 취소된 경우, feature 브랜치를 간단히 삭제하면 됩니다. 로컬 브랜치에는 git branch -d feature/name, 원격 브랜치에는 git push origin --delete feature/name을 사용하세요. 커밋되지 않은 모든 변경 사항은 손실됩니다.
본질적으로 동일합니다. 팀에 따라 다른 접두사를 사용합니다: feature/, task/, feat/. Git 메커니즘에는 차이가 없습니다 — 모두 격리된 개발을 위해 develop에서 생성된 임시 브랜치입니다.
네, 필수적인 관행입니다. 병합 후 브랜치는 참조 목록을 어지럽히고 혼란을 야기할 수 있습니다. 대부분의 플랫폼(GitHub, GitLab)은 PR 병합 직후 브랜치 삭제를 제안하며, 로컬 브랜치는 git branch -d 명령어로 삭제됩니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.