: 소프트웨어를 개발할 때에 여러 개발자들이 동일한 소스코드를 공유하며 동시에 다양한 작업을 할 수 있게 만들어 주는 기능
• Main 브랜치의 경우 정상적으로 동작하는 안정적인 브랜치이기 때문에 새로운 기능을 추가할때는 Main 브랜치의 최신 커밋으로 부터 새로운 브랜치를 생성해서 개발
• 버그가 발생하면 Main 브랜치로 부터 새로운 브랜치를 생성해서 작업
• 병합과 리베이스는 입문자에게 가장 까다로운 일 임, reset 명령을 이용해서 언제든지 취소 할 수 있지만 어려울 수 있음
• 이미 구현은 완료되었는데, 코드가 마음에 들지가 않아서 함수의 로직을 개선하고 싶을때 주석처리하고, 그 아래 새로운 개선 코드를 작성하기보다 브랜치 사용할 수 있음
• 이미 저장되어있는 특정 커밋으로 돌아가고 싶을때 일반적으로 hard reset 나 revert 를 사용함
But 효과적인 방법으로 브랜치를 생성하는 방법이 있음
1) main
운영 환경에 최종 배포가 되는 프로젝트를 담는 브랜치
2) develop
배포하지는 않았지만, 기능 개발을 완료한 프로젝트를 담는 브랜치
- master 브랜치로부터 파생
3) feature
필요한 각 기능을 작업하는 브랜치
- ex) feature/기능
- develop 브랜치로부터 파생.
- 해당 브랜치에서 작업을 완료하면 develop 브랜치로 병합
4) release
최종 배포 전 통합 테스트를 할 프로젝트를 담는 브랜치
- develop 브랜치로부터 파생
- 테스트 중 발견한 버그 수정
- 테스트가 완료되면 master 브랜치와 develop 브랜치에 병합
5) hotfix
운영 환경 중 발견된 버그를 수정할 때 사용하는 브랜치
- main 브랜치로부터 파생
- 버그 수정 후 master 브랜치와 develop 브랜치에 병합
메인 브랜치(항시 유지) : master, develop
보조 브랜치(머지 후 삭제 ) : feature, release, hotfix

브랜치 병합 시 코드 품질을 보장하기 위해 CI(Continuous Integration) 연동을 통한 다양한 검증 절차를 설정
→ 코드의 품질과 안정성을 높임
정적분석 : 정적 분석 도구를 사용하여 코드 품질을 분석하고, 잠재적인 문제를 조기에 발견
리그레션 (단위 테스트) : 기존 기능이 새로운 변경 사항에 의해 영향을 받지 않는지 확인
Lev1 : 엔진핵심 로직이나 알고리즘에 대한 단위 테스트 (JUnit, PyTest, NUnit)Lev2 : 기능 주요 기능의 동작을 검증하는 테스트 (Selenium, Cypress)Lev3 : Full Test : 전체 시스템 통합 테스트(Selenium, JMete)코드리뷰 : 동료 개발자가 코드를 검토하고 피드백 제공

1. 팀 프로젝트 생성 (팀장)
예시)
- 팀원들이 사용할 라이브러리
: maven - pom.xml, gradle - build.gradle- 기본 설정파일
: application.property 세팅- 기본 설정
: Spring security, JWT 등
2. 메인브랜치 보호세팅 (팀장)


- 팀장은 main, dev 를 승인 없이 push 가능
- 팀원은 main, dev 브랜치를 승인 없이 push 할 수 없음
- 팀원은 별도의 브랜치 (topic 브랜치)를 생성후 push 하고 merge 요청(PR : Pull Request)- 팀장 이 승인후 dev 브랜치에 머지
- dev 브랜치에 머지후 topic 브랜치를 삭제
3. 팀원 추가 (팀장)

4. invite 승인 (팀원)
5. 프로젝트 클론받기 (팀원)
$ git clone 원격레파지토리주소6. 브랜치 생성 및 작업 (팀원)
1) 브랜치 확인 및 생성
$ git branch : 현재 브랜치 확인 (위치한 브랜치는 *로 표시)
$ git branch 새 브랜치 명 : 내가 위치한 브랜치에서 커밋된 정보를 복사한 브랜치 생성

$ git checkout 브랜치명 : 해당하는 브랜치로 작업 이동
main 브랜치에서 새로운 브랜치를 생성 시,
main 브랜치의 작업 내용 새로운 브랜치가 그대로 받아왔음을 git log에서 확인 가능

2) 작업 후 커밋
- 작업을 main에서 하지 않도록 git branch로 작업 브랜치 확인하기
- 만약 main에서 실수로 작업했다면 main에서 별도의 새로운 브랜치를 만들어 push 해야함
6. pull request 요청 (팀원)


7. pull request 확인 후 승인 (팀장)




⇒ 새로운 변경사항이 main에 병합되었다는 것 팀원에게 알리기
9. 기존 브랜치는 삭제하고 병합된 main 가져오기(팀원)
1) 병합된 main 가져오기
$ git pull origin main
2) main에 통합한 개발자 브랜치 삭제
$ git branch -d 삭제할브랜치

팀장이 pull request 승인 후 해당 브랜치 삭제할 수 있음

3) pull 한 main에서 새 브랜치 생성 후 작업