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 얕은 복사
: 객체의 얕은 복사는 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조 (메모리 내의 같은 값을 가리킴)를 공유하는 복사
- 원본이나 복사본을 변경하면, 다른 객체 또한 변경될 수 있다
- 원본과 복사본이 완전히 독립적인 깊은 복사의 동작과 대조적
- 얕은 복사의 경우, 중첩된 객체의 값이 아닌 최상위 속성만 복사
- 복사본의 최상위 속성을 재할당해도 원본 객체에는 영향을 끼치지 않는다
- 복사본의 중첩 객체 속성을 재할당하면 원본 객체에 영향을 끼친다