Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/11월
22. 11. 01 - [ 플러스 알파 ] 형상관리 툴, Git, 브랜치 전략
giggs
2022. 11. 15. 17:37
-- INDEX --
1. 형상관리 툴 | 2. Git | 3. 브랜치 관리 전략 | 4. 해왔던 방식과 비교해보기 |
버전 관리 시스템 소스를 버전 별로 관리 |
분산형 버전 관리 시스템 git vs SVN Github |
1개의 저장소를 효과적으로 활용하기 위해 나온 개념 Git flow GitLab flow Github flow |
사람 단위로 브랜치 하기 기능 단위로 브랜치 하기 |
1. 형상관리 툴
- 버전 관리 시스템이라고도 한다. ( = 소프트웨어 버전 관리 툴 )
- 소스를 버전 별로 관리할 수 있어서 개발할 때 실수로 소스를 삭제하거나,
- 수정하기 이전으로 돌아가야 되는 경우 유용하게 사용되는 툴.
- 팀 프로젝트에서도 누가 무엇을 어떻게 수정했는지도 알 수 있기 때문에
- 코드를 병합하거나 수정된 소스를 추적하는 데에도 쓰인다.
- 소프트웨어 형상관리는 Software Configuration Management, 줄여서 SCM
- 형상관리는 일반적으로
- 버전 관리 (version control, revision control),
- 소스 관리 (source control),
- 소스 코드 관리 (source code management, SCM)와 동일한 의미로 사용
1-1 : 형상관리 툴의 종류
- Client/Server 타입 : Subversion(SVN), CVS, Perforce, ClearCase, TFS
- 분산 저장소 타입 : Git, Mercurial, Bitkeeper, SVK, Darcs
- Folder 공유 타입 : RCS, SCCS

2. Git
- 형상 관리 도구(Configuration Management Tool) 중 하나.
- '깃(Git)'은 2005년 리눅스를 만든 리누스 토발즈와 주니오 하마노가 개발한 분산형 버전 관리 시스템
- 매우 빠른 속도와 분산형 저장소.
- SVN보다 많은 기능을 지원하는 대신 익숙해지기에 더 많은 시간이 필요함.
2-1 : Git 과 SVN
- Git이 SVN과 다른 점은 분산형 관리 시스템이라는 것이다.
- - SVN : 중앙 서버에 소스코드와 히스토리를 저장하는 과 달리
- Git : 소스코드를 여러 개발 PC와 저장소에 분산해서 저장
- 그렇기 때문에 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있으며,
- 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능하다.
- - 사본을 로컬에서 관리하기 때문에 GIT이 SVN에 비해 훨씬 빠르다.
- (SVN은 변경 로그 하나 보는 것도 인터넷을 경유해야 한다.)
2-2 : 깃허브
- Git : 형상 관리 도구(버전 관리 시스템)
- Github : 형상 관리 도구(버전 관리) 웹호스팅 서비스
- '깃'은 명령어를 입력하면서 이용해야 되는 불편함이 있었다.
- 이 불편함을 해결하여 더욱 편리하게 이용할 수 있게 만든 게 바로 '깃허브'
2-3 : Git의 장점
- 소스코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다.
- 즉 브랜치를 통해 개발한 뒤, 본 프로그램에 합치는 방식(Merge)으로 개발을 진행할 수 있다.
- 분산 버전관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며,
- 중앙 저장소가 날라가버려도 다시 원상 복구할 수 있다.
- 팀 프로젝트가 아닌, 개인 프로젝트일지라도 GIT을 통해 버전 관리를 하면 체계적인 개발이 가능해지고
- 프로그램이나 패치를 배포하는 과정도 간단해진다. (pull을 통한 업데이트, patch 파일 배포)
2-4 : Git 관련 용어

- Repository : 저장소를 의미하며, 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인할 수 있다.
- Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.
- Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치.
- Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.
- Head : 현재 작업중인 Branch를 가리킨다.
- Branch : 가지 또는 분기점을 의미하며, 작업을 할 때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을 때 Merge를 하여 작업을 한다.
- Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.
3. 브랜치 관리 전략
- 브랜치 전략이란?
- 여러 개발자가 1개의 저장소를 사용하는 환경에서 효과적으로 활용하기 위해 나온 개념
- 브랜치 생성, 병합 등의 git 구조를 활용해 보다 효율적으로 소스를 관리하고
- 협업을 원활하게 할 수 있도록 도와줍니다.
- 브랜치 전략은 Git flow, GitLab flow, Github flow 3개로 보통 사용하고 있습니다.
3-1 : Git flow

3-2 : Github Flow

3-2 : GitLab Flow

출처 : https://tecoble.techcourse.co.kr/post/2021-07-15-git-branch/
4. 우리가 해왔던 방식과 비교해보기
- 현재 우리가 하는 방법은 단순히 각자 1명 1명의 브랜치 만들어서 작업 하는 중이다.
- 이건 별로다. 뭐가 별로냐면 머지할 때 별로다.
- 아직 미완성일 때도 머지해야 하고, 오류 나는데도 머지해야 한다.
방법은??
4-1 : 기능 단위로 브랜치 하기
- [ 전자결재 ] 라는 새로운 작업 시작하려고 하는데 – 필요한 것은 멤버 기능이다.
- 멤버 작업이 완료된 시점만 찾아가서 브랜치 만들어서 작업해도 괜!찮!다
- 전자 결재하는데 갤러리나 보드는 필요 없으니까.

멤버 기능마저도 필요 없다면
최초에 이닛한 시점에서
새로운 브랜치 만들어서 작업하는 방식으로 진행한다

