일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- sqs
- authoring
- Concept
- boto3
- TaskFlow
- Scheduling
- kinesis
- Operator
- dynamic task mapping
- lambda
- ci/cd
- mysql
- RDS
- github actions
- SecretsManager
- testing
- credentials
- XCOM
- executor
- S3
- DAG
- Git
- dagrun
- airflow
- Data Firehose
- pipeline
- git book
- celery
- Task
- AWS
- Today
- Total
CS
Git: Git의 의의 및 특장점 본문
저는 Git보다는 Github라는 이름을 먼저 접하였는데요.
Github는 Git의 저장소 중 가장 큰 저장소 호스트라고 합니다.
Github는 스크립트 저장소로서 널리 쓰이기 때문에, 이런 Github를 보다 잘 사용할 수 있도록 Git에 대해 알아보려 합니다.
Git 사이트의 Book을 기반으로 하여 중요하다고 생각하는 부분이나 학습하며 알게 된 것을 다루겠습니다.
버전 관리
Git은 버전 관리 시스템(VCS)입니다.
버전 관리는 파일의 버전, 즉 특정 시점의 파일을 보관하고, 이후 파일을 변경하였더라도 그때 그 시점의 파일을 꺼낼 수 있는 것을 말합니다.
이는 작업 이력 관리, 실수를 한 경우 되돌리기, 버전 간 비교 등을 가능하게 하므로 상당히 유용합니다. 특히 협업을 할 때 항상 모두 모여서 작업을 할 수는 없으므로 더욱 필요합니다.
버전 관리는 컴퓨터 스크립트뿐만 아니라 문서나 자료가 남는 작업들은 모두 사용할 수 있는 방식입니다.
여러 버전 관리 방식에 대해 알아보며 왜 Git을 사용하는지를 찾아보겠습니다.
로컬 버전 관리
기본적인 버전 관리는 현재의 파일을 복제하여 보관하고, 현재 시간 등의 기록을 남기는 방법으로 달성할 수 있습니다.
이를 좀 더 개선한 것이 로컬 VCS입니다. 로컬 컴퓨터에 버전에 대한 데이터베이스를 두어 버전 정보를 기록하는 것입니다.
중앙집중식 버전 관리
로컬 VCS는 말 그대로 로컬에서 동작하기 때문에 여러 사람이 함께 사용하기 어렵습니다.
따라서 버전 관리를 하는 서버를 따로 두고 개인은 거기에 접속하여 정보를 교환하는 시스템을 만들었는데, 그게 중앙집중식 버전 관리 시스템(CVCS)입니다.
분산 버전 관리
CVCS는 하나의 서버에만 정보가 존재하기 때문에 정보를 잃을 위험성이 큽니다.
이에 분산 버전 관리 시스템(DVCS)에서는 버전 관리 서버에서 정보를 가져올 때, 단순히 정보만 가져오는 게 아니라 저장소 자체를 복제하여 가져오도록 하였습니다. 따라서 버전 관리 서버에서 문제가 발생해도 다른 서버를 사용할 수 있습니다.
또한 하나의 서버에 얽매이지 않는 구성 덕분에 협업의 틀이 넓습니다.
Git도 이러한 DVCS에 해당합니다.
Git의 특징 및 장점
스냅샷 기준 버전 관리
Git이 다른 VCS와 가장 다른 점은 버전 관리 방식입니다.
다른 VCS는 버전 별 차이를 기록합니다. 이 차이를 델타라고 하므로 이런 방식을 델타 기반 버전 관리라고 합니다.
위 그림에서 A는 ver2에서 변경되었고 ver4에서도 변경되었습니다. 반면 C는 ver2와 ver3에서 변경되었습니다. 이 변경 사항인 델타를 저장하여 버전을 형성하는 것입니다.
이후 ver3를 꺼내고 싶은 경우 기초인 ver1에 A의 델타1과 C의 델타1, 2를 더하여 ver3를 만들어 줍니다.
이런 식으로 버전 별 변경점을 기반으로 버전 관리를 합니다.
반면 Git은 데이터 저장 시점의 파일을 그대로 저장하는 개념으로 버전을 기록합니다. 이렇게 그 시점의 상태를 그대로 저장하는 걸 스냅샷이라고 합니다. 파일을 진짜 그대로 저장하는 건 아니라 용량이 문제가 되지는 않습니다.
위 델타 기반 버전 관리와 동일한 상황의 파일들입니다.
ver2에서 B는 변경되지 않았으므로 ver2의 B는 ver1의 B를 향하는 링크만 담고 있습니다.
버전을 그대로 저장하기 때문에 필요한 버전을 바로 꺼낼 수 있습니다. 따라서 다른 VCS보다 빠릅니다.
로컬 기반 실행
Git은 대부분의 작업을 로컬에서 합니다. 따라서 외부와 통신을 하지 않으므로 속도가 빠르며, 여러 환경에서 사용할 수 있습니다.
외부 저장소에 데이터를 저장하거나 가져올 때만 네트워크가 필요합니다.
무결성
Git은 체크섬을 기반으로 데이터를 관리합니다.
데이터를 삭제하지 않음
Git은 Git 데이터베이스에 데이터를 추가만 하지 삭제는 하지 않습니다. 물론 커밋을 하지 않으면 그 시점의 데이터는 날라가지만, 기본적으로 데이터를 잃기 어렵습니다.
파일 상태 구분
Git의 파일은 Commited, Staged, Modified 라는 세 가지 상태를 가집니다. 이는 파일이 각각 .git 디렉토리(저장소), Staging Area, 워킹 디렉토리에 존재함을 뜻합니다.
.git 디렉토리
- .git 디렉토리는 Git의 저장소입니다. 여기에 각종 데이터를 저장합니다. 여기에 존재하는 데이터들은 이미 Git 데이터베이스에 저장(커밋)된 상태이므로 commited라고 합니다.
워킹 디렉토리
- .git 디렉토리에서 파일을 가져오면(checkout) 이걸 가지고 작업을 할 수 있습니다. 이 작업 공간을 워킹 디렉토리라고 합니다. 여기서 파일을 수정하면 .git 디렉토리에 있는 버전과 달라지므로 modified 상태가 됩니다.
Staging Area
- 워킹 디렉토리에서 수정한 파일을 올리면(stage) Staging Area(Index라고도 함)에 등록되는데, 이는 .git 디렉토리에 있는 파일로, 커밋할 파일에 대한 정보를 저장합니다. 여기 등록된 파일의 상태가 staged로, 커밋 준비 상태라고 할 수 있습니다. 이후 커밋을 하면 파일이 .git 디렉토리에 저장되며 해당 파일은 commited 상태가 됩니다.
Git을 설치하고 설정하는 방법은 Git Book의 해당 부분을 보시면 쉽게 설명되어 있습니다.
아래 Git 사이트의 내용을 기반으로 작성하였습니다.
Git Book - 1. 시작하기
Git - 버전 관리란?
1.1 시작하기 - 버전 관리란? 이 장에서 설명하는 것은 Git을 처음 접하는 사람에게 필요한 내용이다. 먼저 버전 관리 도구에 대한 이해와 Git을 설치하는 방법을 설명하고 마지막으로 Git 서버를 설
git-scm.com
'Git' 카테고리의 다른 글
Git: 기본 사용법 4. 리모트 저장소(remote) (0) | 2023.11.15 |
---|---|
Git: 기본 사용법 3. 이전 커밋에 덧붙이기(amend) 및 파일 변경 되돌리기(restore) (0) | 2023.11.14 |
Git: 기본 사용법 2. 커밋 기록 확인하기(log) (0) | 2023.11.14 |
Git: 기본 사용법 1. 저장소 생성(init, clone) 및 파일 추가(add)/수정/커밋(commit) (0) | 2023.11.10 |
Git: 주요 명령어 (0) | 2023.11.07 |