챌린지 13일차 학습 정리
네이버 부스트캠프 9기 챌린지 13일차 학습 정리 페이지입니다.
- 누군가 작성한 것을 그대로 쓰는 것이 아니라 나만의 언어로 재구조화하여 작성해야 합니다.
- 기술 키워드에 대한 상세 내용도 좋고, 미션 해결 과정에서 기능 구현을 성공한 사례도, 트러블 슈팅 경험도 좋습니다.
목차
학습한 내용
VCS 버전관리 시스템
- 문서나 설계도, 소스 코드 등의 변경 사항, 즉 버전을 관리해주는 소프트웨어
- 파일 변경 사항을 시간에 따라 기록하고, 필요할 때 특정 버전을 다시 호출할 수 있는 시스템
- 소스 코드의 변경 사항을 추적하며, 파일이 언제, 누가, 어떻게 변경되었는지를 기록한다.
로컬 버전 관리
- 버전을 관리하기 위해 파일을 복사하는 방식
- 사용자가 파일을 직접 복사하기 때문에 잘못된 결과가 나타날 수 있음(파일 잘못 복사, 삭제)
- Revision Control System이 대표적인 툴
- 서버 없이 로컬 컴퓨터 내에서 버전을 관리하는 방식
- 간단한 데이터베이스만으로도 구현이 가능하며 단순하고 개인적인 프로젝트에 적합하다.
- 협업하기 힘들다.
- 컴퓨터가 고장나는 등 내부 정보가 날아가면 복구할 수 없다.
중앙집중식 버전 관리 시스템
- 기존의 로컬 버전 관리 시스템을 개선하기 위한 방식
- 파일을 관리하는 별도의 서버를 둔다.
- 서버에 최종 버전이 올라가 있으며, 사용자들은 이 중 수정을 원하는 파일만 로컬에 받아 수정한 후 서버에 올리는 방식으로 버전 관리가 이루어진다.
- 중앙 서버가 고장나는 경우 사용할 수 없는 단점이 존재합니다.
분산 버전 관리 시스템(Version Control System, VCS)
- 파일을 저장하는 서버가 있으며, 수정을 위해 프로젝트 전체를 로컬 컴퓨터에 다운 받은 뒤 수정하는 방식으로 버전 관리가 이루어진다.
- 중앙 서버에 장애가 발생하더라도 개별 사용자는 각자 작업할 수 있으며, 로컬 컴퓨터에 있는 작업물로 복구가 가능하다.
- Git이 대표적인 툴이다.
버전 관리의 장점
변경점 관리
- 어떤 내용을 누가 작성해서 어느 시점에 들어갔는지 확인할 수 있다.
버전 관리
- 특정 시점에 Tag를 달아 버전을 표시해주고, 브랜치 등으로 동시에 여러 버전을 개발할 수 있다.
백업 & 복구
- 무언가가 잘못되었을 때 다시 특정 시점으로 돌아가게 해주고, 사고로 내용이 날아간 경우에도 복구할 수 있다.
협업
- 같이 일하는 사람들에게 수정 사항을 쉽게 공유할 수 있다.
Git
- 대표적인 분산형 버전 관리 시스템 중 하나입니다.
- 장점
- 서로의 코드를 검증하는 피어 리뷰에 용이하다.
- 오프라인 작업이 가능하다.
- 속도가 빠르다.
- 중앙 서버에 장애가 있어도 로컬에서 작업을 계속할 수 있다.
내부 동작
용어 정리
- 로컬 - 현재 프로젝트 폴더에 존재하는 파일들 그 자체
- 인덱스 - 커밋이 이뤄질 준비가 된 파일의 내용들이 위치하는 영역
- .git/index에 위치
git add
명령어를 수행하면 변동 사항을 인덱스 영역에 반영- Blob 파일의 주소를 기록한다.
- 저장소 - 깃이 버전 관리를 하기 위해 필요로 하는 데이터들을 저장하는 곳
- .git/object/
- 여러 버전들에 해당하는 파일들의 내용이 Blob 파일로서 이곳에 저장
- 이곳에 저장된 파일들을 오브젝트 파일이라고 부름
오브젝트 파일
- Blob - 버전 관리하는 파일들 각각의 내용을 저장한 것,
- SHA1 해싱 기법을 적용하여 Blob 파일의 이름을 얻게 된다.
- 같은 파일들은 하나의 Blob 파일로서 저장
- Commit - 하나의 버전을 생성하는 것은 하나의 commit 파일을 만드는 것
- Tree 파일의 주소와 직전 버전에 해당하는 Commit 파일의 주소가 기록
- Tree - 커밋 시점의 파일들 각각에 대해 그 파일명과 해당 파일의 내용을 담고 있는 Blob파일의 주소가 기록
GitHub
- Git으로 관리하는 프로젝트를 업로드할 수 있는 플랫폼이다.
Repository
- 프로그램 소스 코드를 Git으로 관리하는 저장소이다.
- 종류
Local Repository
- 본인의 컴퓨터에 저장된 로컬 버전의 프로젝트 저장소
- 내 PC에 저장소를 새로 만들거나, 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사해 올 수 있다.
Remote Repository
- 로컬 Repository와는 반대로 내 컴퓨터가 아닌 (일반적으로 원격 서버) 버전의 프로젝트 저장소
- 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유할 수 있다.
- 장점
- 프로젝트 코드를 공유할 수 있고, 다른 사람의 코드를 확인할 수 있다.
- 로컬 버전의 프로젝트와 병합하고, 변경 사항을 적용할 수 있다.
File
Untracked
- 파일이 Git에 의해서 변경 사항이 전혀 추적되고 있지 않는 상태입니다.
- 파일을 생성하고 그 파일을 한 번도 git add 하지 않은 상태를 의미합니다.
Tracked
- 파일이 Git에 의해 변경 사항이 추적되고 있는 상태입니다.
Tracked
상태는 3가지 상태로 나뉩니다.Unmodified
staging area
에 있는 파일을 커밋한 후의 해당 파일들의 상태를 의미합니다.- 기존의 커밋했던 파일을 수정하지 않은 상태입니다.
Modified
- 기존에 커밋했던 파일을 수정한 상태입니다.
Staged
- 수정한 파일을
git add
명령어를 통해staging area
에 추가된 상태입니다.
- 수정한 파일을
SHA
- 미국 NSA가 제작하고 NIST에서 표준으로 채택한 암호학적 해시함수
- SHA는 여러 버전이 있고, git은 SHA-1으로 해시한 식별자를 통해 관리
해시함수
- 임의의 길이 데이터를 고정된 길이의 데이터로 전환하는 함수
- 동일한 입력은 항상 동일한 해시 값을 갖게 된다.
해시함수 특징
- 단방향성 - 입력 데이터에서 해시 값으로의 변경은 쉽지만, 역으로는 거의 불가능
- 해시 충돌 - 서로 다른 입력에 대해 동일한 해시값을 출력할 수 있다. 따라서 높은 보안성을 위해 충돌 확률이 낮아야한다.
- 고정된 결과값의 길이 - 해시 함수는 항상 일정한 길이의 결과값을 출력
파일 상태 용어
staged
- 저장소에 커밋하기 전에 커밋을 준비하는 위치에 해당합니다.
- 커밋이 가능한 영역으로, 커밋하기 전 파일을 담아두는 상자라고 비유할 수 있다.
git add
명령어를 통해 파일을Staging area
에 추가할 수 있다.
tracked
- Git의 관리를 받을 수 있는 영역에 해당합니다.
- 해당 영역에 존재하는 파일들은 Git의 관리 대상에 해당합니다.
modified
- 기존에 커밋했던 파일을 수정한 상태에 해당합니다.
Git 명령어
git remote add origin [repository_url]
git log
git clone [repository_url]
Feature | Command | Description |
---|---|---|
[Create a Repository] | ||
git clone [repository_url] | Download from an existing repository | |
[Observe your Repository] | ||
git status | List new or modified files not yet committed | |
git diff | Show the changes between two commits ids | |
git blame [file] | List the change dates and authors for a file | |
[Working with Branches] | ||
git branch new_branch | Create a new branch called new_branch | |
[Make a change] | ||
git commit -am “commit message” | commit all your tracked files to versioned history | |
git reset –hard | Revert everything to the last commit | |
git revert -m | Revert merge commit | |
[Synchronize] | ||
git fetch | Get the latest changes from origin | |
git pull –rebase | Get the latest changes from origin |
Git 개체 (Objects)
- Git에서 변경 사항을 추적하기 위해 사용하는 개체
- 다음과 같이 4가지 타입이 존재합니다.
Blob
- Binary Large OBject의 줄임말
- 각 버전의 파일이 blob으로 표현될 수 있다.
- 바이너리 파일이며, Git DB에서는 SHA1 hash로 이름이 지정됩니다.
Tree
- Git의 디렉토리를 표현합니다.
- blob 또는 다른 tree (하위 디렉토리)를 참조합니다.
- 디렉토리의 각 항목 당 한 줄로 구성됩니다.
- 각 줄에는 오브젝트 유형, SHA1 해시, 파일 이름, 파일 실행 권한이 포함됩니다.
Commit
- repository의 현재 상태를 가지고 있습니다.
- 디렉토리와 파일의 상태를 기록하고 있는 Tree 오브젝트를 가리킵니다.
- 작성자, committer, 커밋 메세지, 부모 커밋에 대한 링크를 가지고 있습니다.
Tag
- 태그 작성자, 태그되는 사람의 이름, 타임 스탬프를 포함합니다.
- 표시된 버전 릴리즈에서 사용되는 기록의 한 지점을 캡쳐하기 위해 사용합니다.
참고 자료
- https://conceptbug.tistory.com/entry/Git-버전-관리-시스템Version-Control-System의-역사#:~:text=버전 관리 시스템(VCS%3B Version,Revision Control System)이라고도 한다.
- https://namu.wiki/w/버전 관리 시스템
- https://namu.wiki/w/Git
- https://namu.wiki/w/GitHub
- https://dev-jacob.tistory.com/entry/Git-Repository란
- https://inpa.tistory.com/entry/GIT-⚡️-개념-원리-쉽게이해
- https://medium.com/sjk5766/git-3가지-상태와-간단-명령어-정리-a80161aacec1
- https://ittrue.tistory.com/94
- https://it-eldorado.tistory.com/4
- https://www.codestates.com/blog/content/블록체인-해시함수
- https://namu.wiki/w/SHA
- https://shafiul.github.io/gitbook/1_the_git_object_model.html
- https://jake-seo-dev.tistory.com/528#:~:text=디렉토리와 파일의 상태,대한 링크도 가지고 있다.