[Boostcamp] 13-14. git의 내부구조

코딩감자·2024년 7월 31일

Naver Boostcamp

목록 보기
9/13
post-thumbnail

1.Git Object

1.1 Git Object 란

: Git 에서 변경사항을 추적하기 위해 사용

깃허브
: 협업과 백업에 있어 원격 저장소가 중히 쓰이는데, 깃과 더불어 원격 저장소의 기능을 웹에서 제공하는 서비스 중 하나가 깃허브(GitHub)이다. 깃허브로는 아래와 같은 일을 할 수 있다.

  • 원격 저장소에서 깃을 사용할 수 있다. 지역 저장소와 연결해 사용하기도 한다.
  • 지역 저장소를 백업할 수 있다.
  • 협업자(Collaborater)를 추가해 협업 프로젝트에 사용할 수 있다.
  • 깃허브에서 소스를 수정하는 등의 개발 이력을 남길 수 있다.
  • 타인의 소스를 살펴보거나, 오픈 소스에 참여할 수 있다.

Gist
: 깃허브에서 만들 수 있는 깃 레파지토리호 코드 블락을 공유하고 쉽게 해줄 수 잇는 도구이다.

  • 깃 레파지토리와 똑같이 gist도 클론과 포크가 가능

1.2 4가지 타입

  • Blob
    - Binary Large OBject 의 줄임말이다.
    - 각 버전의 파일이 blob 으로 표현될 수 있다.
    - 바이너리 파일이며, Git DB 에서는 SHA1 hash 로 이름이 지정된다.

  • Tree
    - Git 의 디렉터리를 표현한다.
    - blob 혹은 다른 tree (하위 디렉토리) 를 참조한다.
    - 디렉토리의 각 항목당 한 줄로 구성된다.
    - 각 줄에는 오브젝트 유형, SHA1 해시, 파일 이름, 파일 실행 권한이 포함된다.

  • Commit
    - 리포지토리의 현재 상태를 가지고 있다.
    - 디렉토리와 파일의 상태를 기록하고 있는 Tree 오브젝트를 가리킨다.
    - 작성자, 커미터, 커밋 메세지, 부모 커밋에 대한 링크도 가지고 있다.

  • Tag
    - 커밋과 유사하다.
    - 태그 작성자, 태그되는 사람의 이름, 타임 스탬프를 포함한다.
    - 표시된 버전 릴리즈에 사용되는 기록의 한 지점을 캡쳐하기 위한 것이다.
    - 태그 객체는 체크섬 처리된다.
    - 태그 작성자 이름, 이메일, 날짜, 태그 메세지 등을 포함한다.

1.3 Git Object 가 작동 절차

  • Git Repository 의 파일이 변경되면 상태를 기억하는 새 blob 객체를 생성
  • 파일이 스테이징 영역에 추가되면 (git add), Git 은 디렉토리의 현재 상태를 나타내는 새 tree 객체를 생성한다.
  • 변경 사항이 커밋되면 Git 은 새 commit 객체를 생성한다. 이 때 생성된 commit 객체는 이전 단계에서 만든 tree 오브젝트를 가리킨다.
  • 태그는 나중에 쉽게 참조할 수 있도록 특정 커밋을 표시하기 위해 언제든 만들 수 있다. 태그가 생성되면 Git 은 새 태그 객체를 만든다.
  • 이러한 객체는 모두 Git 리포지토리의 .git/objects 디렉토리에 저장된다. 태그는 오브젝트의 콘텐츠를 기반으로 하는 고유 식별자인 SHA-1 해시로 식별된다.

1.4 Git 기본 명령어

  • 저장소 생성
    git init
  • 원격 저장소로부터 복제
    git clone {url}
  • 변경 사항 체크
    git status //
  • 특정 파일 스테이징
    git add {파일명}
  • 변경된 모든 파일 스테이징
    git add *
  • 커밋
    git commit -m “{변경 내용}”
  • 원격으로 보내기
    git push origin master
  • 원격저장소 추가
    git remote add origin {원격서버주소}

1.5 원격저장소와 로컬저장소

  • git 저장소는 자신의 컴퓨터인 로컬 저장소와 서버에 있는 원격 저장소로 나뉜다.
  • local에서 작업한 것은 remote로 push해줘야만 변경사항이 서버에 반영된다

2. SHA 암호화

2.1 SHA 암호화란

: 서로 관련된 암호학적 해시 함수들의 모음

  • 미국 국가안보국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정
  • HASH 함수를 적용한 단방향 암호화 알고리즘으로 복호화가 불가능
  • 최초 개발된 함수는 SHA-0로, SHA-0을 변형한 함수는 SHA-1로, 그 후에 발표된 SHA-224, SHA-256, SHA-384, SHA-512를 묶어 SHA-2 라고 한다.
  • SHA-1이 가장 많이 사용되고, TSL, SSL, IPSec, SSH에서 사용
  • SHA 는 MD5 보다는 느리지만 강화된 보안을 제공한다.

2.2 SHA-256

:Secure Hash Algorithm 256-bit의 줄임말로, 암호학적 해시 함수 중 하나다

  • 해시 함수는 임의의 크기를 가진 데이터를 고정된 크기의 해시 값으로 변환하는 함수
  • 256비트(32바이트) 길이의 해시 값을 생성하며, 주로 데이터 무결성 검증, 메시디 인증 코드(MAC) 생성, 비밀번호 저장 등 다양한 보안 관련 작업에 사용된다
  • 입력 데이터의 작은 변화에도 큰 차이를 만들어내기 때문에 데이터의 무결성을 확인하는 데 유용
  • SHA-256은 일방향 해시 함수이므로, 해시 값을 통해 원래 데이터를 복원할 수는 없다
    => 주로 비밀번호의 안전한 저장과 비교, 파일의 무결성 검사 등에 활용

3. 얕은 복사와 깊은 복사

3.1 깊은 복사

: 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조(메모리 내의 같은 값을 가리킴)를 공유하지 않는 복사

  • 원본이나 복사본을 변경할 때, 다른 객체가 변경되지 않는 것을 보장할 수 있다
  • 원본이나 복사본의 중첩된 속성을 변경하면 다른 객체도 변경될 수 있는 얕은 복사의 동작과 대조적
  • 프로토타입 체인을 복사할 수도 있고 복사하지 않을 수도 있다

3.2 얕은 복사

: 객체의 얕은 복사는 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조 (메모리 내의 같은 값을 가리킴)를 공유하는 복사

  • 원본이나 복사본을 변경하면, 다른 객체 또한 변경될 수 있다
  • 원본과 복사본이 완전히 독립적인 깊은 복사의 동작과 대조적
  • 얕은 복사의 경우, 중첩된 객체의 값이 아닌 최상위 속성만 복사
    • 복사본의 최상위 속성을 재할당해도 원본 객체에는 영향을 끼치지 않는다
    • 복사본의 중첩 객체 속성을 재할당하면 원본 객체에 영향을 끼친다
profile
코딩감자

0개의 댓글