챌린지 13일차 학습 정리

챌린지 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으로 해시한 식별자를 통해 관리

해시함수

  • 임의의 길이 데이터를 고정된 길이의 데이터로 전환하는 함수
  • 동일한 입력은 항상 동일한 해시 값을 갖게 된다.

해시함수 특징

  1. 단방향성 - 입력 데이터에서 해시 값으로의 변경은 쉽지만, 역으로는 거의 불가능
  2. 해시 충돌 - 서로 다른 입력에 대해 동일한 해시값을 출력할 수 있다. 따라서 높은 보안성을 위해 충돌 확률이 낮아야한다.
  3. 고정된 결과값의 길이 - 해시 함수는 항상 일정한 길이의 결과값을 출력

파일 상태 용어

  • staged
    • 저장소에 커밋하기 전에 커밋을 준비하는 위치에 해당합니다.
    • 커밋이 가능한 영역으로, 커밋하기 전 파일을 담아두는 상자라고 비유할 수 있다.
    • git add 명령어를 통해 파일을 Staging area 에 추가할 수 있다.
  • tracked
    • Git의 관리를 받을 수 있는 영역에 해당합니다.
    • 해당 영역에 존재하는 파일들은 Git의 관리 대상에 해당합니다.
  • modified
    • 기존에 커밋했던 파일을 수정한 상태에 해당합니다.

Git 명령어

git remote add origin [repository_url]
git log
git clone [repository_url]
FeatureCommandDescription
[Create a Repository]  
 git clone [repository_url]Download from an existing repository
[Observe your Repository]  
 git statusList new or modified files not yet committed
 git diffShow the changes between two commits ids
 git blame [file]List the change dates and authors for a file
[Working with Branches]  
 git branch new_branchCreate a new branch called new_branch
[Make a change]  
 git commit -am “commit message”commit all your tracked files to versioned history
 git reset –hardRevert everything to the last commit
 git revert -mRevert merge commit
[Synchronize]  
 git fetchGet the latest changes from origin
 git pull –rebaseGet 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
      • 태그 작성자, 태그되는 사람의 이름, 타임 스탬프를 포함합니다.
      • 표시된 버전 릴리즈에서 사용되는 기록의 한 지점을 캡쳐하기 위해 사용합니다.

참고 자료

Comments