[ TERMS 02 ] GIT
1. GIT의 정의
GIT은 리눅스의 아버지라 불리는 리누즈 토발즈(Linus Torvalds)가 리눅스 커널 프로젝트 관리를 위해 개발한 분산 버전 관리 시스템 (DVCS)으로, 파일의 변경 이력을 추적하고 사용자 간의 효율적인 공동 작업을 도와주는 오픈 소스 소프트웨어이다. 여기서 의미하는 파일이란 개발자가 작성하는 프로그래밍 소스코드를 의미한다.
2. GIT은 어떻게 접하게 될까?
여러 개발자가 함께 프로그램을 만드는 프로젝트에서 협업을 할 때 필수적으로 사용되는 툴이다. GIT은 병렬적인 개발을 가능하게 하는 핵심 툴이다. 개인 프로젝트로 개발할 때도 GIT을 이용하면 효율적인 버전 관리가 가능하기 때문에 많은 개발자가 사용하고 있다.
3. GIT 알아보기
작업을 진행함에 있어 만들어지는 수많은 버전의 효율적인 관리를 위해 만들어진 것이 VCS(Version Control System, 버전관리 시스템)이다. VCS는 크게 2종류가 있다.
> 중앙집중식 버전관리시스템(CVCS)
CVCS(Centralized Version Control System)은 원격 저장소에 모든 버전의 파일을 저장해 두고 수정이 필요한 일부 파일만 받아 업데이트 하는 방식이다. 즉, PC는 원격 저장소에 존재하는 파일 완전체의 일부만 가져와 수정하는 것이다. 대표적인 프로그램으로는 SVN이 있다. 작업할 파일만 가져와 작업하는 방식이 효율적이긴 하지만 원격 저장소에 문제가 생기면 작업이 중단된다는 치명적인 단점이 있다.
> 분산형 버전관리시스템(DVCS)
DVCS(Distributed Version Control System)는 원격 저장소에 저장해 둔 데이터 베이스 전부를 로컬 저장소에 받아 작업하는 방식이다. 이 방식은 각 로컬 저장소가 원격 저장소의 데이터베이스 전부를 갖고 있기 때문에 원격 저장소에 문제가 생기더라도 작업 진행에 문제가 없으며 오프라인 작업이 가능하다. 이런 강점을 가진 DVCS의 대표주자가 바로 GIT이며 현재 압도적인 점유율을 차지하고 있다.
4. GIT을 사용하는 이유
> 버전 관리
파일에 변경 사항이 발생했을 때 GIT의 'Commit'과 'Push' 과정을 통해 수정 내용을 설명하는 코멘트와 간단한 기록을 남길 수 있다. 단 하나의 작업 파일에 기록은 '.git'이라는 숨김 폴더에 따로 저장된다. 나중에 파일을 되돌려야 할 상황이 생기더라도 정리된 코멘트를 보고 돌아가고 싶은 지점을 쉽게 찾을 수 있다.
> 협업
'효율적인 협업'이 매우 중요한 시대에 다수가 동시간대에 작업할 수 있는 비선형 워크플로우(Non-linear Workflow)를 지원한다는 점이 매우 매력적이다. GIT은 '브렌치(Branch)'를 이용하여 비선형적 개발이 가능하다.
'브렌치'라는 단어는 '나뭇가지'에서 따왔다. 가장 중심이 되는 중심 가지(main branch)가 줄기가 되고 동시다발적으로 여러 갈래의 가지(Branch)를 만들어 작업할 수 있다. 다른 브렌치와 병합(Merge)하여 하나로 만드는 협업이 가능하다.
5. GIT 사용하기
GIT은 맨 처음 'INIT' 또는 'CLONE'으로 시작한다. 작업 디렉토리에서 새롭게 시작하면 'INIT'을, 이미 원격 저장소에 있는 것을 복제하여 사용하면 'CLONE'을 이용해 시작할 수 있다. 다음은 수정 내용이 있는 파일을 대기 장소 (Staging Area)로 보내는 'ADD'를 하고 'COMMIT'을 하게 되면 해당 파일이 로컬 저장소(Local Repo)에 기록된다.
원격 저장소(Remote Repo)로 저장하려면 'PUSH'를 사용하고, 원격 저장소에 다른 개발자가 COMMIT한 것이 있을 때는 'PULL'을 이용하여 로컬 저장소를 업데이트 한다.
- INIT 또는 CLONE
- ADD
- COMMIT
- PUSH
- PULL
1이 이루어지고 2~5의 반복이 이루어진다.
6. GIT 더 알아보기
> GITFlow
'브렌치'는 GIT의 가장 강력한 무기인 만큼 '브렌치를 어떻게 가장 효율적으로 사용하여 협업하는가'도 굉장히 중요한 전략이 되었다. 이를 GIT 브랜칭 전략이라고 부르며, 대표적으로 2010년 빈센트 드리센(Vincent Driessen)이 소개한 'GitFlow'가 있다.
이는 메인 브렌치로 master(main이라고 부르기도 함)와 develop 두 개만을 두고 feature, hotfix, release 등의 네이밍을 가진 브랜치를 사용한다. 각 브렌치의 의미는 다음과 같다.
- main | master : 배포되었거나 배포 가능한 상태만 존재하는 메인 브렌치
- develop : 다음 배포를 위해 개발하는 메인 브렌치
- feature : 기능을 개발하는 보조 브렌치
- hotfix : 배포 버전에 발생한 긴급한 문제를 조치하기 위해 개발하는 브렌치
- release : 메인 브렌치로 보내기 전 최종적으로 버그 수정등을 개발하는 브렌치
main 브렌치에서 develop브렌치가 만들어지고 해당 브렌치에서는 다음 배포를 위한 다양한 기능 feature들이 만들어진다. develop브렌치의 최종 단계에 이르면 release브렌치가 만들어지고 main에 병합된다.
hotfix는 배포된 버전에서 예상치 못한 버그를 처리하는 브렌치로 버그가 처리되면 main에 병합되고 버그 처리된 내용도 develop에 병합된다.
> CLI GIT 과 GUI GIT
GIT은 CLI(Command Line Interface)와 GUI(Graphic User Interface) 방식 중 선택해서 사용할 수 있다. CLI GIT을 설치하면 'cmd'나 'Terminal'을 통해서 사용할 수 있다. 하지만 글자만 나오고 쓸 때마다 명령어를 타이핑 하는 것은 사용자에게 불편하여 그래픽을 접목한 GUI방식의 GIT이 개발되었다. GUI GIT에는 Source Tree, Git Kraken등이 있다.
> Github
원격 저장소는 결국 서버를 의미한다. 서버는 우리가 가지고 있는 PC로도 구성할 수 있지만 여러 까다로운 조건으로 인해 어렵다. 그래서 GIT을 위한 서버를 대신 운영하고 무료로 쓸 수 있게 해주는, 즉 웹 호스팅(Web Hosting)을 지원하는 Github가 등장한다.
> 함께 알아 두면 좋은 용어
- SVN
'IT 도서 리뷰 > 개발자가 되기 위해 꼭 알아야 하는 IT 용어' 카테고리의 다른 글
[PART4] 클라우드/데브옵스 - TERMS 04 (0) | 2025.04.10 |
---|---|
[PART4] 클라우드/데브옵스 - TERMS 03 (0) | 2025.04.05 |
[PART4] 클라우드/데브옵스 - TERMS 01 (0) | 2025.03.21 |
[PART3] 데이터베이스/자료구조 - TERMS 06 (0) | 2025.03.13 |
[PART3] 데이터베이스/자료구조 - TERMS 05 (0) | 2025.03.06 |