패스트캠퍼스 핀테크 서비스 백엔드 개발자 3기 Day2,3 - Git (branch)

유재학·2022년 9월 16일
0

Day1에서는 Git을 사용하기 위한 기본 지식을 배웠다.
Day2, Day3에서는 협업을 위해 알아야 할 지식과 활용법을 배웠다.

브랜치(Branch)란?

  • 소프트웨어를 개발할 때, 여러명의 개발자들이 하나의 소스코드를 공유하고 다루게 된다. 여러명의 개발자가 각자 다른 영역을 개발하기 때문에 다른 버전의 소스코드가 많이 생성 될 수 밖에 없는데 이 때 동시에 여러 개발자가 작업하더라도 코드가 충돌하지 않고, 완성 가능성이 희박하더라도 도전적인 개발을 할 수 있도록 해주는 것이 바로 브랜치(branch)이다.

  • 사용자에게 제공되는 버전은 master(main) 브랜치에 두고 목적에 맞게 브랜치를 생성하여 독립적인 작업 공간을 가지고 다양한 개발을 할 수 있다.

  • 다양한 브랜치에서 기능이 완성되면 merge를 통해 master(main)브랜치에 반영할 수 있다.

브랜치 관련 명령어(Branch Command)

$ git branch : 사용 가능한 로컬 브랜치를 보여준다.
$ git branch -r : 사용 가능한 원격 브랜치를 보여준다.
$ git branch -a : 사용 가능한 모든 브랜치를 보여준다.
$ git branch name : 브랜치를 생성한다.
$ git switch A : A 브랜치로 브랜치를 변경한다
$ git merge A : A브랜치를 현재 브랜치에 Merge한다. (주로 main브랜치에서 사용)
$ git branch -D A : A브랜치를 삭제한다.
$ git push origin A : origin이라는 원격 브랜치에 A브랜치를 push한다.

브랜치 전략

효과적으로 버전관리시스템(VCS)을 사용하기 위해서는 프로젝트에 어울리는 브랜치 전략이 필요하다. 대표적인 브랜치 전략 3가지는 다음과 같다.

  • git flow
    • 현업에서 가장 많이 쓰이는 브랜치 전략이다.
    • master, develop 2가지 핵심 브랜치를 바탕으로 hotfix(긴급한 수정이 필요한버그 발생시 사용), release (버전 릴리즈 시 사용), feature(기능 개발 시 사용) 브랜치로 구성되어 있다.
    • 각 단계가 명확하다는 장점이 있지만 복잡하다는 단점도 있다.
    • 일정한 release 주기를 가진 프로젝트에서 주로 사용한다.
  • github flow
    • master브랜치를 핵심으로 하는 브랜치 전략이다.
    • 브랜치 모델 단순화, master의 모든 커밋은 항상 배포가 가능하다는 장점이 있다.
    • Continuous Integration(지속적 통합) 의존성이 높아 실수 할 경우 큰 문제가 발생할 수 있다는 단점이 있다. ( Pull Request를 통해 방지 )
  • gitlab flow
    • production, pre-production, master를 핵심으로 하는 브랜치 전략이다.
    • github flow가 너무 간단해서 deploy,issue에 대한 대응이 가능하도록 보완했다.

실습

현업에서 가장 자주 쓰이는 git flow 브랜치 전략을 사용한 협업을 git flow cheatsheet을 사용해 간단하게 실습해보았다.
참고) https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html

실습 내용은 다음과 같다.

팀장
1. 팀장은 new organization을 만든다.
2. issue template을 작성한다.
3. 원격 저장소를 clone 후 $ git flow init 명령어를 통해 git flow 초기 설정을 한다.
4. develop 브랜치에서 대상 파일을 생성 후 origin develop으로 push 한다.
5. 팀원들에게 초기 설정 완료를 알린다.
6. Pull Request를 보고 코드 리뷰를 진행한 후 수정이 있으면 수정 사항을 요구한다.
7. 추가 요구 사항이 없고, 코드리뷰가 끝나면 merge한다.

팀원
1. 초기 설정이 완료된 협업 원격 저장소에가서 fork한다.
2. 협업 원격 저장소에서 나의 할일 issue를 등록한다.
3. fork한 repository를 로컬 repository에 clone하고 $ git flow init 명령어를 통해 초기 설정을 한다.
4. $ git feature start {feature name} 명령어를 통해 독립적인 작업 공간에서 개발을 진행한다.
5. 개발이 완료되면 add, commit하고 $git flow feature finish {feature name} 명령어를 통해 develop 브랜치와 merge한다.
6. fork한 나의 원격 저장소에 git push한다.
7. 나의 원격 저장소에서 Pull Request를 한다.
8. 수정 사항을 확인하고 추가 작업을 한다.
9. 작업이 끝나면 $git push origin develop 명령어를 통해 나의 원격 저장소에 push한다.
10. push가 끝나면 Pull Request가 Open 상태이기 때문에 자동으로 협업 원격 저장소와 merge 할 수 있는 지 업데이트 된다.
11. 만약 내가 작업하는 동안 다른 팀원의 작업이 반영된다면 merge conflict가 발생하는데, 이 경우 반영된 협업 원격 저장소의 변경 사항을 fetch, merge하여 내가 conflict를 해소하고 add, commit, push 한다.

실습한 자료 ) https://github.com/kiaeh2323/Blackjack
간단하게 블랙잭 게임에 대한 설명을 작업으로 두고 실습을 진행했다.

후기

대학에서 팀 프로젝트를 진행할 때 github를 사용했던 적이 있는데 그 땐 이렇게 까지 git에 대해 알지 못한 상태에서 마구잡이식으로 진행했었다. branch의 개념, 활용법, merge의 원리 등 기본 지식을 모르는 상태에서 pull request를 하니 수많은 merge conflict가 발생했고 왜 발생하는 지도 잘 모르는 상태에서 억지로 코드를 수정해가며 작업했던 기억이 떠올랐다.

이번 강의와 실습을 통해 Git을 통한 협업을 확실히 배울 수 있었고 실무에 적용할 수 있을 거란 자신감을 얻었다.

profile
github : https://github.com/kiaeh2323 , email : kiaeh9269@gmail.com

0개의 댓글