Education

[KT AIVLE/2024.02.21] 이고잉 강사님의 [Git을 이용한 프로젝트 관리] 강의 전체 정리

마크 주쿼버그 2024. 2. 23. 12:27

(혹시 아래 내용 구성이 익숙하다면 저희 같은 반일 거예요. 제가 우리반 커뮤니티에 올린 글과 비슷할 겁니다!)

 

 

목차

1. 서론

2. 개발 환경

3. 수업 내용 요약

4. 상세 내용

5. 오늘의 심화 지식

6. 느낀점

 

 

1. 서론

KT AIVLE SCHOOL의 첫 수업은 Git을 이용한 프로젝트 관리였다. 학부 때부터 간단한 수준의 Git을 썼기 때문에 이번 강의가 조금 시시할 거라는 생각도 했으나, 실상은 결코 그렇지 않았다. 생활 코딩의 '갓'고잉 강사님답게 원리부터 실무에서 활용 방법까지 담백하고 명료하게 정리해주셨고, 기존의 지식들을 깔끔하고 확실하게 정리할 수 있었고 모르는 부분도 잘 채워넣을 수 있었다.

아래 내용은 하루 동안 진행된 수업 내용을 요약한 것으로, 전반적인 내용을 포함하고 있으나 구체적인 설명이 부족할 수 있다. 추가 설명이 필요한 부분들은 댓글로 알려주시면 답글로 설명하거나 (양이 많을 경우)추가 게시물을 작성해보도록 하겠다.

 

이 글은 하루 동안 배운 내용을 작성한 TIL(Today I Learned) 게시물 형태이자 KT와 생활코딩 이고잉 강사님의 교육 노하우가 담겨 있는 프로그램과 컨텐츠를 들은 후기라, Git을 처음 접한 사람들의 길라잡이로 활용하기 좋을 것이라고 생각한다.

 

나의 GitHub Desktop 캡처 화면 (위 이미지는 실습과 관련이 없다)

 

 

2. 개발 환경

수업은 Visual Studio Code와 Git이 설치되어 있다는 전제 하에 진행되었다.

KT Aivle school 에서는 무료로 노트북을 대여해주었는데, 그 노트북을 대여 받았다면 별도로 설치할 필요 없이 수업에 참여할 수 있었다.

또한 수업 중 Visual code의 Extension인 'Git Graph'를 설치하였다.

 

 

3. 수업 내용 요약

1. Visual Studio에서 GUI 기반의 Git 사용 방법을 익혔다.

2. Git의 원리를 기반으로 여러 명령어(add, commit, checkout 등)를 배웠다.

3. branch를 구분하여 작업 흐름을 분리하거나 협업하는 방법을 학습하였다.

4. 원격 저장소와 지역 저장소에 대해 배우고, 원격 저장소에서 지역 저장소로 혹은 지역 저장소에서 원격 저장소로 버전을 업데이트 하는 방법을 알아보았다.

 

 

4. 상세 내용

4-1. Git이란 무엇인가?

Git의 개발자는 'Linux'의 창시자이기도 한 '리누스 토발츠'이다. Git은 백업, 협업, 버전 관리를 위해 개발되었다. 개발자에게는 Debugging 과정이 중요한데, 버전 관리를 잘 할 경우 이런 디버깅 과정에 소요되는 시간을 크게 단축시킬 수 있다. 또한 Git은 기본적으로 CLI(Command Line Interface) 환경을 기반으로 작동한다. GUI 기반 도구들도 많지만 심화 학습을 위해서는 CLI를 경험해 볼 것을 추천한다.

더보기

[사담 타임]

리누스 토발츠를 검색해보니 생각보다 젊으셔서 놀랐다. 나에겐 리눅스가 옛날 기술처럼 느껴졌는데 우리 엄마랑 비슷한 연배이셨다니 다시 보게 된다. (참고로 나무위키에 리누스 토발츠 부부의 연애 스토리가 있으니 궁금하신 분들은 참고하시길..🤭)

 

4-2. Git에서 사용되는 용어 소개

용어 설명
Git repository 버전이 저장되는 공간이다.
Stage area Working directory에서 Git repository로 올라가기 전에 저장되는 임시 공간이다.
Add를 한 후 Commit 하기 전의 버전들이 여기에 저장된다.
Working directory 사용자가 작업하는 공간을 의미한다.
Head 현재 작업하고 있는 Commit을 가리키고 있는 포인터이다.
main 하나의 작업을 수행하는 브랜치 중 하나이자 Git 세팅 시 처음에 주어지는 브랜치이다.
브랜치에서 마지막 Commit을 가리키는 포인터이다.
Local repository 지역 저장소로, 사용자의 Local에 있는 Git repository를 의미한다.
Remote repository 원격 저장소로, 온라인에 있는 Git repository를 의미한다.
다른 사용자와 협업할 때 이 저장소를 활용할 수 있으며, 가장 유명한 저장소는 Github이 있다.
Attached head state HEAD가 브랜치를 가리키는 포인터(예: main)를 가리키는 것을 의미한다. (예: HEAD->main->v3)
Detached head state HEAD가 브랜치와 관련 없이 특정 버전을 개별적으로 가리키는 것을 의미한다. (예: HEAD->v3, main->v3)
Conflict 각각의 작업을 수행한 두 브랜치를 병합할 때 변경 사항을 사람이 직접 보고 판단하는 것을 의미한다.
(심화 내용은 맨하단 '오늘의 심화 지식'에 정리되어 있다.)

 

 

4-3. Git 명령어 정리

참고로 GUI 환경에서 실습했기 때문에 아래 명령어는 실제 CLI에서 사용되는 명령어가 아닐 수 있습니다.

CLI 명령어의 경우 개별적으로 학습한 후 별도 게시물로 정리하려고 합니다.

명령어 설명
add Working directory에서 Stage area로 옮기는 것을 의미한다. (Working directory -> Stage area)
commit Stage area에서 Git repository로 옮기는 것을 의미한다. (Stage area -> Git repository)
checkout HEAD가 가리키는 위치를 변경한다.
reset main이 가리키는 위치를 변경한다.
create branch 새로운 branch를 추가한다. (작업 환경을 분화할 때 사용하며 브랜치명은 'feature/login'와 같이 생성한다.)
merge branch 분리된 두 개의 branch를 병합한다.
push 지역 저장소에서 원격 저장소로 내용을 업로드한다.
clone 원격 저장소에서 지역 저장소로 내용을 복제한다.
pull 원격 저장소에 추가로 업데이트 된 내용을 가지고 와서 지역 저장소의 내용과 병합한다.
fetch pull과 마찬가지로 원격 저장소에 추가로 업데이트 된 내용을 가지고 오지만, 지역 저장소에서 원격 저장소의 내용을 병합하지 않은 상태로 가지고 온다.

 

 

 

5. 오늘의 심화 지식

5-1. 충돌(Conflict)과 3-way merge

Git은 병합할 때 3-way merge라는 방법을 적용한다.

3-way merge란, 공통의 조상에게 'base'라는 이름을 붙이고, base와 각각의 브랜치의 최종 버전들이 삼자 대면을 수행한다고 이해할 수 있다. 이 때, base를 기준으로 한 쪽만 변경되었다면 변경된 최신 버전으로 버전이 업데이트 된다. 그러나 양 쪽 모두 변경되었다면 Git이 병합하지 않고 사람이 직접 보고 판단할 수 있도록 한다.

 

 

 

6. 느낀 점

나는 평소에 간단한 수준의 Git을 꾸준히 사용해왔어서 새롭게 배우는 것이 없을 거라고 생각했는데 내 자만이었다. 체계적으로 Git에 대해 배울 수 있었고, 원리와 함께 설명해주셔서 내가 알고 있던 지식과 새롭게 배우는 지식이 잘 어우러져서 더 잘 이해할 수 있는 시간이었다.

유튜브에 생활 코딩을 자주 챙겨 보는데 KT Aivle school에서 생활코딩 이고잉 강사님을 만나게 되어 신기하고 반가웠다. 생활코딩 강좌만큼 핵심을 분명히 알려주시면서도, 실시간 강의인만큼 더 자세하고 친절하게 알려주셔서 알차고 값진 수업이었다. 아직 1일차이긴 하지만 에이블 스쿨에서 제공하는 교육이 매우 만족스럽고, 앞으로의 수업도 몹시 기대가 된다.

 

그럼 1일차 정리 및 후기 끝! 안녀엉~