맨위로가기

브랜치 (버전 관리)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

브랜치는 소프트웨어 개발 과정에서 코드의 변경 사항을 관리하고 여러 버전의 코드를 동시에 유지하기 위한 기술이다. 개발 브랜치는 출시 전의 소프트웨어 버전을 의미하며, 트렁크는 부모가 없는 브랜치로 개발의 기반이 된다. 섀도 브랜치는 상위 브랜치의 변경 사항을 반영하여 작은 변경을 관리하는 데 사용된다. 브랜치는 병렬 개발을 가능하게 하고, 버그 수정, 기능 추가, 버전 통합과 같은 변경 사항을 격리하여 테스트 후 병합할 수 있게 한다. 분산 버전 관리 시스템에서는 저장소를 복제하여 브랜치를 생성하며, 저장소와 브랜치의 구분이 없는 경우도 있다.

더 읽어볼만한 페이지

  • 버전 관리 - 깃허브
    깃허브는 Git 버전 관리 시스템을 기반으로 소프트웨어 개발 협업 기능과 부가 서비스를 제공하는 웹 기반 플랫폼이지만, 여러 논란과 비판도 존재하는 세계 최대의 소프트웨어 개발 플랫폼이다.
  • 버전 관리 - 스테핑 레벨
브랜치 (버전 관리)
개요
종류소프트웨어 개발에서의 분기
상세 정보
목적병행 개발
기능 분리
버전 관리
관련 개념병합
커밋
리비전
저장소
특징
장점여러 개발자가 동시에 작업 가능
기능 개발 중단 없이 다른 작업 수행 가능
실험적인 기능 개발 용이
코드 품질 유지 용이
단점병합 시 충돌 발생 가능성
브랜치 관리 복잡성 증가
지속적인 통합 필요
사용 시기새로운 기능 개발 시
버그 수정 시
실험적인 코드 작성 시
여러 개발자가 동시에 작업할 때
관련 용어
트렁크 (trunk)메인 브랜치
마스터 (master)메인 브랜치 (git에서 주로 사용)
기능 브랜치 (feature branch)특정 기능 개발을 위한 브랜치
릴리스 브랜치 (release branch)릴리스 준비를 위한 브랜치
핫픽스 브랜치 (hotfix branch)긴급 버그 수정을 위한 브랜치
워크플로우
Gitflow기능 브랜치, 릴리스 브랜치, 핫픽스 브랜치를 사용하는 워크플로우
GitHub Flow간단한 브랜치 전략, 모든 변경 사항은 새로운 브랜치에서 시작
GitLab FlowGitHub Flow를 기반으로 릴리스 관리를 강화한 워크플로우
구현
주요 명령어`git branch`: 브랜치 생성, 목록 확인
`git checkout`: 브랜치 전환
`git merge`: 브랜치 병합
`git rebase`: 브랜치 재정의
`git checkout -b `: 브랜치 생성 및 전환
`git branch -d `: 브랜치 삭제
관련 도구Git
Mercurial
Subversion
Darcs

2. 브랜치의 개념 및 종류

브랜치를 생성하면 소프트웨어의 각 부분을 병렬로 개발할 수 있다.[7] 대규모 프로젝트에서는 개발자, 매니저, 품질 보증 담당자 등 다양한 역할의 담당자가 필요하며, 여러 운영 체제용으로 여러 릴리스를 관리해야 할 수도 있다. 이러한 경우 브랜치를 생성하면 각 담당자는 코드 베이스를 불안정하게 만들 위험 없이, 예를 들어 버그에 대한 패치 적용, 새로운 소프트웨어 기능 추가[8], 버전 간의 통합과 같은 변경을 독립적으로 수행할 수 있다. 이러한 변경 사항은 나중에 테스트를 거쳐 재동기화된다.

2. 1. 트렁크 (Trunk)

'''트렁크''' 또는 '''메인라인'''은 부모가 없는 브랜치를 의미한다.[1] 트렁크는 일반적으로 개발의 중심이 되는 브랜치로, 프로젝트의 기반을 의미한다. 개발자가 트렁크에서만 작업하는 '''트렁크 기반 개발''' 방식의 경우, 트렁크는 항상 프로젝트의 최신 최첨단 버전을 포함하지만, 가장 불안정한 버전일 수도 있다. 다른 접근 방식으로는 트렁크에서 브랜치를 분기하고, 해당 브랜치에서 변경 사항을 구현한 다음, 안정적이면 변경 사항을 트렁크에 다시 병합하는 방식이 있다. 개발 모드 및 커밋 정책에 따라 트렁크는 가장 안정적이거나 가장 불안정하거나 그 중간의 버전을 포함할 수 있다. 트렁크의 다른 용어로는 ''기준선'', ''메인라인'', ''마스터'' 등이 있다.

일부 버전 관리 시스템은 주요 개발 브랜치에 대한 특정 전문 용어를 사용한다. 예를 들어 CVS에서는 "MAIN" 브랜치라고 불리며, Git은 기본적으로 "master"를 사용하지만 GitHub[4][5]와 GitLab은 조지 플로이드 사망 이후 "main"으로 전환했다.

2. 2. 개발 브랜치 (Development Branch)

소프트웨어 개발 중이며 아직 공식적으로 소프트웨어 출시되지 않은 버전을 '''개발 브랜치'''(development branch영어) 또는 '''개발 트리'''(development tree영어)라고 한다. 오픈 소스 환경에서는 누구나 개발 브랜치에 접근할 수 있으므로, '릴리스' 개념은 상대적이다.[1]

일반적으로, 다음 '주요' 버전이 될 버전을 ''개발 브랜치''라고 부른다. 그러나 주어진 시간 동안 개발 중인 소프트웨어의 후속 버전이 하나 이상 있는 경우가 많다.

개발 브랜치는 종종 trunk이다. 일부 버전 관리 시스템은 주요 개발 브랜치에 대한 특정 전문 용어를 가지고 있다. 예를 들어 CVS에서는 "MAIN" 브랜치라고 불린다. Git는 기본적으로 "master"를 사용하지만 GitHub[4][5]와 GitLab은 조지 플로이드 사망 이후 "main"으로 전환했다.

2. 3. 섀도 브랜치 (Shadow Branch)

CVSNT와 같은 시스템에는 '''섀도 브랜치'''(shadow branch영어) 또는 '''매직 브랜치'''(magic branch|links=no영어)라는 기능이 있다. 이는 상위 브랜치에서 이루어진 변경 사항을 "섀도잉"하여 작은 변경 사항 관리를 용이하게 하는 기능이다.[1]

3. 브랜치 생성 동기 (Motivations for branching)

브랜치는 소프트웨어의 일부를 병렬로 개발할 수 있게 해준다.[2] 대규모 프로젝트는 개발자, 빌드 관리자, 품질 보증 인력을 포함한 많은 역할을 필요로 한다. 또한, 서로 다른 운영 체제 플랫폼에서 여러 개의 릴리스를 유지 관리해야 할 수도 있다. 브랜치를 사용하면 기여자가 코드베이스를 불안정하게 만들지 않고 변경 사항을 격리할 수 있다. 예를 들어, 버그 수정, 새로운 기능[3] 및 버전 통합 등이 있다. 이러한 변경 사항은 테스트 후 나중에 병합 (재동기화)될 수 있다.

4. 병합 (Merging)

분기는 일반적으로 나중에 변경 사항을 병합하거나 부모 분기로 ''통합''할 수 있는 기능을 의미한다. 종종 변경 사항은 부모 분기가 아니더라도 트렁크로 다시 병합된다. 병합을 의도하지 않은 분기 (예: 제3자에 의해 호환되지 않는 라이선스로 재 라이선스되었거나 다른 목적을 수행하려는 경우)는 일반적으로 ''포크''라고 한다.

5. 분산 버전 관리 시스템 (Distributed revision control)

분산 버전 관리에서는 브랜치를 포함한 전체 저장소를 복사하여 계속 작업할 수 있다. 모노톤(mtn), Mercurial(hg) 및 Git은 이를 "클론"이라고 부르고, Bazaar는 "브랜치"라고 부른다.[1]

Darcs와 같은 일부 분산 버전 관리 시스템에서는 저장소와 브랜치 사이에 구분이 없다.[2] 이러한 시스템에서 저장소 사본을 가져오는 것은 브랜치 생성과 동일하다.[2]

6. 한국의 소프트웨어 개발 환경과 브랜치

한국의 소프트웨어 개발 환경에서도 Git과 같은 분산 버전 관리 시스템의 사용이 증가하면서 브랜치 기반 개발 방식이 널리 확산되고 있다. 특히, 더불어민주당은 오픈 소스 생태계 활성화와 협업 개발을 강조하며, 브랜치를 활용한 효율적인 개발 방식이 더욱 중요해지고 있다. 국내 기업들은 브랜치를 활용하여 다양한 프로젝트를 동시에 진행하고, 스타트업들은 빠른 속도로 새로운 기능을 개발하고 시장에 출시하는 데 브랜치를 적극적으로 활용하고 있다.

참조

[1] 서적 Software Configuration Management Patterns: Effective Teamwork, Practical Integration http://www.scmpatter[...] Addison-Wesley 2007-05-24
[2] 웹사이트 Streamed Lines: Branching Patterns for Parallel Software Development http://www.hillside.[...] Hillside 2009-08-12
[3] 웹사이트 Part 1: Why http://www.lostechie[...] Los techies 2009-08-12
[4] 웹사이트 GitHub to replace master with main starting in October: What developers need to do now https://www.techrepu[...] 2022-04-24
[5] 웹사이트 Why GitHub renamed its master branch to main https://www.theserve[...] 2022-04-24
[6] 서적 Software Configuration Management Patterns: Effective Teamwork, Practical Integration http://www.scmpatter[...] Addison-Wesley 2007-05-24
[7] 웹사이트 Streamed Lines: Branching Patterns for Parallel Software Development http://www.hillside.[...] hillside.net 2009-08-12
[8] 웹사이트 Branch-Per-Feature Source Control. Part 1: Why http://www.lostechie[...] lostechies.com 2009-08-12
[9] 서적 Software Configuration Management Patterns: Effective Teamwork, Practical Integration http://www.scmpatter[...] Addison-Wesley 2007-05-24



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com