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 : 기능 단위로 브랜치 하기

  • [ 전자결재 ] 라는 새로운 작업 시작하려고 하는데 – 필요한 것은 멤버 기능이다.
  • 멤버 작업이 완료된 시점만 찾아가서 브랜치 만들어서 작업해도 괜!찮!다
  • 전자 결재하는데 갤러리나 보드는 필요 없으니까.

 

 

 

 


 

 

 

멤버 기능마저도 필요 없다면

최초에 이닛한 시점에서

새로운 브랜치 만들어서 작업하는 방식으로 진행한다