방학 불태우기 8

김민석·2021년 7월 29일
0

방학

목록 보기
8/16

Git

파일을 관리할 때 버전마다 관리를 하게 되면 특정 시점의 버전을 다시 꺼내올 수 있게 된다.

버전을 관리함으로써 각 파일을 이전상태로 되돌릴 수 있기 때문에 파일을 잃어버리거나 잘못 고쳤을 때 쉽게 복구할 수 있다는 장점이 있다.

버전 관리에는 다양한 방법들이 존재하는데, 깃은 분산 버전 관리 시스템(dvcs)이다.

분산 버전 관리 시스템이란 저장소에서 단순히 파일을 가져와서 수정을 하는 것이 아닌 저장소를 히스토리와 더불어 통채로 복제해 오는 것이다.

이를 통해 서버에 문제가 생기더라도 복제물을 활용하여 다시 작업을 할 수 있게 되는 것이다.

그리고 dvcs 환경에서는 리모트 저장소가 존재하는데, 다양한 리모트 저장소를 통해 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업이 가능하게 된다.

참고 : https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F

용어 정리

저장소 관련

local 저장소

내 PC에 파일이 저장되는 개인 전용 저장소 이다.

Remote 저장소

파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유할 수 있다.

init

기존 디렉토리를 저장소로 만드는 명령어이다.
사용하고자 하는 디렉토리로 이동하여 git init 명령을 수행하게 되면 해당 디렉토리에 .git이라는 하위 디렉토리를 생성한다.
파일에 대한 수정이 일어난 후 git에서 파일을 관리하기 위해서는 add 명령과 commit 명령을 통해 깃 저장소에 파일을 추가할 수 있다.

clone

git 저장소를 복사하고 싶을 때 git clone <url> 명령을 통해 저장소의 히스토리를 전부 받아온다.
이 명령을 통해 자동으로 클론해온 디렉토리를 생성하고 내부에 .git 폴더를 생성하여 이를 통해 파일을 추가 및 관리할 수 있다.

참고 : https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-Git-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0

상태 관리

local 저장소에서 수정한 내용들은 working directory에 저장된다. working directory에서 로컬 저장소의 파일을 관리하게 된다.
작성이 끝난 파일은 add filename 명령을 통해 staging area에 등록되게 된다. 이 영역에 있는 파일들 만이 commit을 통해 git repository에 들어갈 수 있게 되는 것이다.
commit -m commitmessage 명령을 통해 staging area의 파일들을 깃 리포지토리에 등록한다. 깃 리포지토리의 파일들은 push 명령이 일어나면 원격 저장소로 비로소 저장이 될 수 있다.

파일 관련


파일을 관리할 때는 세가지 상태로 관리가 된다.
처음 로컬에 파일을 생성했을 때 Untracked 상태를 갖게 된다.
그리고 add 명령을 수행하게 되면 상태가 Staged로 바뀌게 되는데, 이 상태가 되어야 commit을 통해 리포지토리에 등록할 수 있다.
commit을 통해 리포지토리에 등록을 하게 되면 그 파일은 Unmodified 상태가 된다.

참고 : https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0

참고 : http://rogerdudler.github.io/git-guide/index.ko.html

객체 복사하기

자바스크립트의 객체를 저장하는 방법으로는 세가지 방법이 존재한다.

얕은 복사

let obj1 = {
	name : "kim",
    value : 3,
};
let obj2 = obj1;

그냥 = 명령어를 통해 객체끼리 연결한다면 두 객체가 동일한 곳을 참조하게 되어 결국 같은 값을 가지게 된다.
즉 위의 코드에서는 obj2가 obj1이 같은 곳을 참조하게 되므로 수정을 하게 되면 두 값 모두 바뀐다.

대표객체는 복사하지만 하위 객체는 참조

객체가 단순한 속성을 가지고 있는게 아닌 속성으로 다른 객체를 가지고 있는 경우 대표 속성들만 복사하고 내부 객체 속성은 참조하는 방법이다.

let inner = {sex : male};
let a = {name : "kim", age : 20, gender : inner};
let b = Object.assign({},a);

이 방법을 사용하게 되면 처음에는 a와 b 모두 속성이 같게 된다. 하지만 b의 name과 age 속성은 수정을 해도 서로 영향을 안끼치게 된다.
대표적인 방법으로는 앞서 사용한 Object.assign() 방법과 Spread(...) 방법이 있다.

깊은 복사

하위 객체까지 모두 복사하는 방법을 의미한다.
세가지 방법 중 가장 메모리를 많이 소모하며 처리 속도가 느리다.

let inner = {sex : male};
let a = {name : "kim", age : 20, gender : inner};
let b = JSON.parse(JSON.stringify(a));

JSON.parse() 명령을 통해 객체를 JSON화 시킨 후 복사를 하여 둘의 일치 여부를 확인할 수 있다.

더 알아보기

profile
김민석의 학습 정리 블로그

0개의 댓글