1. 같은 파일을 두 명이 동시에 수정하면 어떻게 되나?
개발자 A는 로그인 기능을 만들고 있고, 개발자 B는 같은 파일에서 회원가입 기능을 만들고 있습니다. 둘 다 main 브랜치에서 직접 작업하면 서로의 코드가 뒤섞여 심각한 문제가 생길 수 있습니다.
또한 미완성인 A의 코드가 main에 올라가면 사용자에게 오류가 노출됩니다. 브랜치를 사용하면 이런 문제를 깔끔하게 해결할 수 있습니다.
2. 브랜치가 해결하는 문제
**브랜치(Branch)**는 기존 코드와 독립된 작업 공간을 만드는 기능입니다.
A는 feature/login 브랜치에서, B는 feature/signup 브랜치에서 독립적으로 개발합니다. 서로의 작업이 main에 영향을 주지 않습니다. 각자 완성되면 main으로 합칩니다. 문제가 생기면 해당 브랜치만 삭제하면 됩니다.
나뭇가지 비유가 직관적입니다. main이라는 큰 줄기에서 가지를 뻗어 나가 작업하고, 완성되면 줄기와 다시 합칩니다.
3. 브랜치 만들고 이동하는 방법
현재 브랜치 목록을 확인합니다. *는 현재 위치한 브랜치입니다.
git branch
새 브랜치를 만듭니다.
git branch feature/login
새 브랜치로 이동합니다.
git checkout feature/login
만들기와 이동을 한 번에 처리하는 단축 명령어입니다.
git checkout -b feature/login
최신 Git 버전에서는 switch 명령어를 권장합니다.
git switch -c feature/login
브랜치를 이동한 뒤 코드를 수정하고 커밋하면 해당 브랜치에만 기록됩니다. main 브랜치는 영향을 받지 않습니다.
4. 작업 후 브랜치 합치기 – merge
기능 개발이 완료되면 main 브랜치로 합칩니다.
먼저 main 브랜치로 이동합니다.
git checkout main
feature/login 브랜치를 main에 합칩니다.
git merge feature/login
합병이 완료되면 불필요한 브랜치를 삭제합니다.
git branch -d feature/login
원격 저장소의 브랜치도 삭제합니다.
git push origin –delete feature/login
5. 충돌(Conflict) 발생 시 해결하는 법
두 브랜치에서 같은 파일의 같은 줄을 다르게 수정했다면 merge 시 충돌이 발생합니다. Git이 자동으로 합칠 수 없어 개발자가 직접 해결해야 합니다.
충돌이 발생한 파일을 열면 아래와 같은 표시가 있습니다.
<<<<<<< HEAD 내가 수정한 내용
상대방이 수정한 내용
feature/login
두 내용을 보고 최종적으로 어떻게 할지 결정합니다. <<<, ===, >>> 표시를 모두 지우고 원하는 내용만 남깁니다. 수정 후 git add와 git commit으로 충돌 해결을 완료합니다.
6. GitHub Pull Request로 협업하기
팀 프로젝트에서는 브랜치를 직접 main에 merge하는 대신 **Pull Request(PR)**를 사용합니다.
브랜치를 GitHub에 push합니다.
git push origin feature/login
GitHub 저장소에 접속하면 비교 & 풀 리퀘스트(Compare & pull request) 버튼이 나타납니다. 클릭해서 변경 내용 설명을 작성하고 PR을 생성합니다.
팀원이 코드를 검토(Code Review)하고 승인하면 Merge pull request 버튼으로 main에 합칩니다.
PR을 통한 협업은 코드 품질을 높이고 실수를 사전에 방지하는 효과가 있습니다.
7. 브랜치 네이밍 관례
팀마다 다르지만 일반적으로 사용하는 브랜치 이름 형식이 있습니다.
새 기능을 개발할 때는 feature/기능이름 형식을 사용합니다. 버그를 수정할 때는 fix/버그설명 형식을 사용합니다. 긴급 수정이 필요할 때는 hotfix/설명 형식을 사용합니다. 릴리즈 준비 중인 브랜치는 release/버전번호 형식을 사용합니다.
명확한 이름을 사용하면 팀원이 어떤 작업인지 한눈에 파악할 수 있습니다.
8. 정리 및 다음 단계
오늘 배운 핵심을 정리합니다.
- 브랜치는 독립된 작업 공간을 만들어 팀원 간 코드 충돌을 방지합니다.
git checkout -b 브랜치명으로 브랜치를 만들고 이동합니다.git merge로 브랜치를 합치고 충돌 발생 시 수동으로 해결합니다.- 팀 협업에서는 직접 merge 대신 Pull Request를 통한 코드 리뷰를 권장합니다.
다음 글에서는 CI/CD가 무엇인지, 자동 빌드와 배포 파이프라인의 개념을 알아보겠습니다.