Flow란?
직역하여 흐름이라는 의미입니다. git+flow는 'git에서 제공하는 브랜칭 기능을 활용한 변경 이력 관리 전략'입니다.
이 외에도 다음과 같은 전략이 있으므로 적용하고자 하는 팀 사이즈에 따라 아래 전략들도 고려해주세요.
- github flow: git flow보다 훨씬 단순한 전략
- gitlab flow: git보다는 단순하고 github flow보다는 복잡한 전략
Git Flow란?
브랜치를 나누는 방법에 대한 분류 중 하나입니다. Git Flow에서의 특징은 브랜치를 5종류로 나뉩니다.
- main(master): 서비스을 직접 배포하는 역할을 하는 브랜치입니다.
- feature(기능): 각 기능 별 개발 브랜치입니다.
- develop(개발): feature에서 개발된 내용을 가지고 있는 브랜치입니다.
- release(배포): 배포를 하기 전 내용을 QA(품질 검사)하기 위한 브랜치입니다.
- hotfix(빨리 고치기): main 브랜치로 배포를 하고 나서 버그가 생겼을 때 빨리 고치기 위한 브랜치입니다.
main, develop은 필수 브랜치이지만 나머지 브랜치는 유지 보수를 목적으로 하는 선택적인 브랜치입니다. 본인 프로젝트와 스타일에 따라 커스터마이징하여 브랜치를 이용하시면 됩니다.
이해를 돕기 위하여 각 브랜치에 대한 설명을 이미지로 하겠습니다.
위의 이미지처럼 git flow를 이용할 수 있습니다.
feature 브랜치는 주로 'feat/{기능_이름}'으로 명명합니다. e.g. feat/community, feat/authentication
위와 같이 브랜치 명, 커밋 구조 등의 규칙을 정하는 것을 팀 컨벤션(관례)라고 부릅니다.
컨벤션은 팀마다 정하기 나름입니다. 저희 팀에서 정의한 컨벤션을 공유합니다.
그렇다면 여기서 의문이 생길 수 있습니다.
왜 굳이 브랜치는 분류하는 것인가?
왜 브랜치를 분류할까요?
브랜치를 분류하는 이유를 "유지 보수를 하기 위함"이라고 이야기하는 개발자가 많지만 이는 너무 애매모호한 답변입니다. 브랜치를 분류하는 이유를 정확히 답하면 협업 중 수정된 코드의 충돌을 방지하기 위함입니다.
가정을 하나 하겠습니다. 프로젝트 진행 중 작업을 시작하기 전부터 존재하던 파일을 작업자 puleugo와 musk가 수정하였습니다.
두가지 수정사항이 존재하는 경우에는 두 작업자의 코드 중 한가지만을 수용해야합니다. 만약 puleugo의 수정 코드를 수용한다면, musk가 작업한 코드 중 일부가 사라지므로 musk가 작업한 코드에서 에러가 발생할 수 있습니다. 이렇게 서로 다른 두가지 작업이 다른 수정 사항이 존재하여 충돌이 발생하는 것을 깃 병합 충돌(git merge conflict)이라고 부릅니다.
우리는 작업하면서 병합 충돌을 피해야합니다. 에러 발생 가능성 뿐만 아니라 불필요한 작업이 추가로 발생하고 개발자가 코드에만 집중하기 힘들어집니다. git은 여러명의 개발자가 함께 작업하기 위한 도구이기 때문에 병합 충돌을 전혀 발생하지 않는 것은 말이 안됩니다. git flow는 각자 담당하는 작업 단위로 브랜치를 분할하여 중복되는 변경사항을 줄이는 전략입니다.
아래는 git convention을 사용하여 팀원간 협업하는 예시입니다.
develop, main의 공유되는 부분을 개발자가 직접 수정하지 않기 때문에 수정된 코드에서 충돌이 일어나지 않습니다. 두 명 이상의 개발자와 함께 새로운 기능을 개발할 때 유용합니다.
그렇기 때문에 우리는 하위 브랜치에 코드를 작성하고 상위 브랜치로 merge합니다. 이러한 특징을 'A successful Git branching model'에서는 분리되어 있지만 중앙에 집중되어 있다고 표현합니다.
함께보면 좋은 글 https://puleugo.tistory.com/165
레퍼런스
A successful Git branching model | https://nvie.com/posts/a-successful-git-branching-model/
Git Flow 개념 이해하기 | https://ux.stories.pe.kr/183
'CS' 카테고리의 다른 글
데이터베이스 Lock이란 (0) | 2023.03.15 |
---|---|
트랜잭션 격리 수준 (0) | 2023.03.07 |
[PostgreSQL] 데이터베이스 트랜잭션이란? (0) | 2023.03.06 |
우리는 왜 JWT를 사용하는가? / JWT 사용 이유 (0) | 2023.02.20 |
[ 개발바닥 2사로 ] 면접 스터디를 시작하며.. (10) | 2023.02.15 |
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com