지옥에서 온 문서관리자 git (수정중)

[TBD]·2022년 3월 15일
0

Boostcamp AI Tech 3기

목록 보기
1/2

들어가며

Git, GitHub 하면 떠오르는 게 있을까? 나한테는 공포의 대상이었다. 고양이 로고는 정말 좋지만, 그 외의 것은 글쎄... 물론 가끔 가르쳐주는 몇 가지 기능을 제외하곤 저건 찐 개발자의 도구다! 라고 규정하고 선을 그어서 지내고 있었다.

왜냐하면 알아도 알아도 너무 어렵고, 왜 필요한지를 모르고 있었으니까 말이다.

그러다가 우연히 너무너무 좋은 기회가 생겨서 오늘 실습을 할 수 있게 되었다! 생활코딩 이고잉님과 함께하는 깃 실습!

아마도

오늘 글은 한꺼번에 정리되진 않을 것 같다. 그래도 오늘 뭘 배웠다 하는 건 남기고싶어서, 짧게나마 적어보려고 한다. 부족한 부분은 미래의 내가 주말을 갈아서 채워줄 것이다.

실습에 도움이 될 자료들

이고잉 선생님이 정리해두신 공부 로드맵. 공부 순서가 잘 짜여져있다.
그리고 오늘 실습이 전부 들어있는 페이지1 페이지2

Git! 누가 만들었고 왜 쓰는걸까

Git이라는 툴은 리누스 토르발스가 개발한 분산형 버전관리 시스템이라고 한다. 오픈소스계의 대부같은 이 분은 원래 리눅스(리누스가 만든 유닉스)로 유명한 분인데, 리눅스 코드를 관리하다보니 우여곡절 끝에 "필요에 의해" 개발했다고 한다. 대충 한 줄로 요약하자면, 오픈소스를 사람들이 입맛에 맞게 제각기 수정하다보니 버전 관리가 되지 않았고, 그걸 정형화하기 위한 도구쯤으로 정리할 수 있겠다. 그리고 이 Git을 저장하는 저장소가 바로 GitHub라는 공간이다.

hello world!를 주력(?)으로 삼는 내게는 git과 같은 툴이 어렵게 느껴졌던 건 내가 Git을 사용함으로써 얻는 이득보다 실이 많았기 때문이었던 것 같다. 코드 한 줄을 유지보수하고 관리하기엔 배보다 배꼽이 더 컸던 것. 그러나 엄청나게 덩치가 큰 프로그램 버전을 관리하고, 버전 별 설명서를 탑재하기 위해서는 Git만큼 좋은 툴도 없는 것 같다.

드롭박스와 비교해봅시다.

갓고잉 선생님은 드롭박스와 깃의 공통점과 차이점을 설명해주셨다. 둘다 원격 저장소에 업로드 하는 것이 가능하지만, 업로드 기록을 처음부터 끝까지 세밀하게 기록하는 건 Git의 역할이고, 버전 관리 필요 없이 파일만 원격저장소에 저장하는 것을 주력으로 하는 것이 드롭박스라고.(30일 유예기간이 있다고는 하지만, Git만큼 세밀하게 관리할 수는 없다.)

그래서 뭐 하나 나쁜 게 아니라, 시스템이 만들어지게 된 철학이 다른 것 같다. 드롭박스의 경우 USB를 깜빡하고 가져오지 않아서 생기는 불편함을 해소하기 위해, 그리고 Git은 앞서 말한 것처럼 코드의 버전 관리(와 자세한 추가 설명은 덤인 것 같다!)를 위해 만들어진 것이라 필요에 따라 취사선택하면 될 듯.

그래서 Git이 왜 좋은가요?

내가 아직은 겪어보지 못했지만, 혼자서 프로그램을 만드는 것이 아니라면 다양한 파일을 백업하고, 공유하고, 수정하고, 협업하는 것까지 필요한데 Git을 쓰면 이 전부가 가능하다고 한다.

백업하기

나만 가지고 놀 코드라면 내 컴퓨터에 저장해놓고 숨겨놓고(?) 남들에게 보여주지 않으면(??) 그만이다. 하지만 선생님 말씀을 빌리면 컴퓨터는 하나는 정말 확실하고, 하나는 정말 불확실하다고 한다. 컴퓨터는 확실히 언젠가 고장나게 마련이지만, 그 시기는 정말 불확실하다고. (...) 그래서 백업이 필요한데, 이를 원격저장소에 해당하는 GitHub에 해놓는다.

백업은 아주아주 단순하게 이루어진다. (이미지는 나중에 실습 진행하면서 넣어야겠다.)
1. 로컬(지역의, 개인이라는 뜻이 있다. 쉽게 말해 내가 지금 보고 있는 컴퓨터를 가리킨다.)저장소를 만들고
2. 1의 로컬 저장소를 Git 저장소로 만드는 작업을 수행한다. (CLI에서 git init 또는 vscode 상에서 source control - initialize repository 버튼 클릭)
3. 2까지 거치면 .git이라는 파일이 만들어지는데, 요 친구가 원격저장소와 통신을 도와줄 파일이다.
4. 파일 수정 후 add, commit을 통해 원격 저장소에 올릴 파일을 준비한다.

원격 저장소 만들기

Git의 저장소가 GitHub인데, 로고가 귀엽다. 로고디자이너가 코드 여러 개를 합쳐서 요상한 걸 만들어낸다고 표현하고자 Octopuss(octopus + pussy cat)를 만들어냈는데, 이게 나중에 Octocat이 되었다고 한다.

각설하고, 원격 저장소 만들기는 간단하다. 일단 GitHub 가입부터 한 후, 오른쪽 상단 +를 선택하면 New repository를 클릭해서 만들 수 있다.

만들 땐 Repository 이름을 지정하고, 공개여부를 선택해서 create repository 버튼을 누르면 끝난다.

원격 저장소 연결

아무리 파일을 예쁘게 잘 만들어도, 원격 저장소에 업로드하지 않으면 내 동료에게 손쉽게 공유하기가 어렵다.

  1. remote - add remote를 한 후 GitHub에서 아까 만든 원격저장소 주소를 복사해온다.
  2. vscode 상에서 source control 목록에 점 세개 클릭 (setting) - add remote - 1에서 복사한 주소 입력
  3. 원격저장소 주소 별명을 짓는데, 보통은 origin으로 한다고 하니 그대로 설정.
  4. 그리고나서 publish branch 버튼 누르기!

원격 저장소에 업로드하기

하다보면 원격 저장소랑 연결된 로컬 저장소 내 파일이 수정될 수 있고, 이걸 원격 저장소에 업로드하고 싶을 수도 있다.
그럴 땐 commit을 통해 수정사항을 업데이트하고, push를 통해 원격 저장소에 전체 수정사항을 업로드하면 된다. (추후 이미지 + 설명 추가 예정)

원격 저장소로부터 가져오기

반대로 원격 저장소에 있는 내용을 로컬 저장소로 가져올 수도 있다. 이땐 vscode 상에서 source control - pull을 클릭하면 업데이트가 완료된다.

충돌 관리 (수정요망)

물론, 원격 저장소를 하나 두고 여러 사람이 관리하다보면 충돌이 생길 수도 있다. 가령 같은 회사에서 근무하는 개발자 A와 B가 있다고 할 때 A가 코드수정 작업 후 push를 한 상태에서 B가 같은 파일을 수정했다면!? 원격 저장소에 있는 내용을 pull 한 후, 충돌되는 부분은 수정해야 하는데, 자세한 내용은 추후 추가 예정. 미래의 나 화이팅!!

깃헙 실습 소감

나에게는 소중한 실습시간이기도 했고, 짧은 시간 내에 이것 저것 정리를 하려하다보니 결국 다 하지는 못했다.

내가 엄청나게 두려워하던 Git 사용법을 조금이나마 알게되었고, 버전 관리가 왜 필요한지, 알아두면 협업 툴로써 어떻게 쓸 수 있을지를 배웠다. 그리고, 3일 내내 밥만 먹고 원격 저장소 만들고 커밋하고 push와 pull만 반복하다보면 언젠가는 익숙해질거란 믿음이 생겼다.

강의를 해주신 이고잉 선생님도 6개월이나 붙잡고 계셨다는데, 하루에 너무 많은 걸 소화하려한 건 아닌가 싶기도 하다. 오늘 블로그 내용 중 부족한 부분은 천천히 하나씩 채워나갈 예정이다.

오늘 재밌는 부분도 정말 많았고, 새로운 실습도 진행해봤었는데 그 재미를 오늘 다 글로 정리하지 못한다는 부분이 많이 아쉽다. 조만간 시간을 내서 정리해봐야겠다.


오늘 200명이 넘는 수업을 들었는데, 수업 끝나기 전에 선생님께서 진짜 지옥(?)을 만들어보자고 하셨다.

우선 선생님이 깃헙 레포지토리를 하나 만드신 후 수강생 모두가 새로운 파일(.txt)을 커밋, push하는 과정에서 무한 pull push 쳇바퀴를 경험했다.

그리고 같은 파일(bye.txt)을 수강생 모두가 수정, 커밋 후 push하는 과정에서 충돌이 발생하면 다시 pull + push 쳇바퀴를 반복하는 과정도 겪어봤다. 수강신청...?

그 과정에서 매우 아름다운 Git graph가 나왔고, 다시 이 페이지를 열었을 때 '그땐 그랬지' 할 만한 추억거리가 하나 생겼다. 하하.

profile
꿈꾸는 몽상가

0개의 댓글