*Trunk-Based Development(TBD)**는 소프트웨어 개발 방식 중 하나로, 모든 개발자가 하나의 메인 브랜치(주로 main 또는 trunk)에 자주 변경 사항을 병합하는 방식을 의미합니다. 이를 통해 빠른 배포와 지속적인 통합(Continuous Integration, CI)을 촉진합니다.
1. Trunk-Based Development의 주요 특징
✅ 1) 짧은-lived feature branches (짧은 피처 브랜치)
- 일반적으로 하루나 이틀 내에 변경 사항을 trunk(주로 main) 브랜치에 병합합니다.
- 롱-리빙 브랜치(feature-branch를 길게 유지하는 방식)를 지양합니다.
✅ 2) 지속적인 병합 (Continuous Integration)
- 모든 개발자가 자주(일일 또는 수시간 단위) trunk에 병합(merge)하여, 최신 코드를 유지합니다.
- 병합 시 코드 리뷰와 자동화된 테스트를 통과해야 합니다.
✅ 3) Feature Flags (기능 플래그) 활용
- 아직 완성되지 않은 기능이라도 trunk에 병합할 수 있도록 Feature Flag(기능 플래그)나 Toggle을 활용하여 기능을 선택적으로 활성화/비활성화합니다.
✅ 4) Release Branch 최소화
- 전통적인 Git Flow처럼 개별 릴리즈 브랜치(release-*)를 길게 유지하지 않으며, 필요할 경우 trunk에서 바로 배포합니다.
- 중요한 Hotfix가 필요할 경우 trunk에서 직접 수정하거나, 단기적인 release 브랜치를 생성하여 반영 후 다시 trunk로 병합합니다.
2. Trunk-Based Development의 장점
✅ 빠른 배포 가능: 기능이 완성되면 즉시 배포 가능
✅ 충돌 최소화: 작은 단위로 자주 병합하여 충돌을 줄임
✅ 지속적인 코드 통합: 지속적인 CI/CD 환경과 궁합이 좋음
✅ 단순한 브랜치 관리: 브랜치가 단순하여 유지보수가 쉬움
3. Trunk-Based Development의 단점
❌ Feature Flag 관리 필요: 배포 전 기능을 숨기기 위해 Feature Flag 활용이 필수
❌ 테스트 자동화 필수: 지속적인 병합이 있기 때문에 강력한 테스트 자동화가 필요
❌ 대형 프로젝트에서는 도입이 어려울 수도 있음: 큰 조직에서는 팀별로 독립적인 개발이 어려울 수 있음
4. Trunk-Based Development을 적용하는 방법
1️⃣ 하루 또는 이틀 이내에 브랜치를 trunk에 병합
2️⃣ CI/CD 파이프라인을 자동화하여 빠른 피드백 제공
3️⃣ Feature Flag를 적극 활용하여 미완성 기능을 감춤
4️⃣ 자동화된 테스트(유닛 테스트, 통합 테스트)를 반드시 구축
5️⃣ 팀 내 코드 리뷰 프로세스를 빠르게 진행
결론
**Trunk-Based Development(TBD)**는 짧은-lived 브랜치를 유지하고 trunk(main 브랜치)에 자주 병합하는 방식으로, 빠른 개발과 배포가 필요한 프로젝트에 적합합니다.
특히 CI/CD 환경과 함께 사용하면 효과적이며, Feature Flag와 자동화된 테스트가 필수입니다.
Git Flow처럼 브랜치 관리가 복잡한 전략과 비교하면 단순하지만, 조직과 프로젝트 특성에 맞춰 선택해야 합니다.