Intro : Git을 왜 사용하면 좋을까?
Git과 Github를 공부하면서 또는 작게나마 사용해 보면서 경험했던 고민들을 정리해 보는 형식으로 칼럼을 작성해 볼 예정입니다.
다만 본 칼럼 시리즈를 통해 달성하고자 하는 목표는 git과 github를 활용한 협업을 이해하기 위한 내용들을 다룰 것이기 때문에 협업을 하기 위한 내용들에 주목하고 있다는 점을 인지해주시면 좋겠습니다. 본 칼럼들을 정독하시면서 Git과 Github을 활용하여 협업하는 과정을 이해하는데 도움이 되셨으면 좋겠습니다.
Git은 한 Device에서 작업한 내용에 대한 형상을 기록하고 관리하는 형상관리 도구입니다. 이는 비단 프로그램밍 뿐만이 아니라 문서나 디렉터리 구조 등 컴퓨터 내에서 작업한 작업들에 대한 형상을 기록 및 관리할 수 있다는 것을 의미합니다. 사고를 확장해서 형상관리라는 큰 범주에서 Git에 먼저 접근하면 좋을 것 같습니다.
Git을 사용하면 좋은 점은 제가 생각하기에 작업에 대한 내용에 대해서 흐름에 따라 기록하거나 현재 작업에 대한 여러 케이스들에 대해서 실험해 보고 안전하게 이를 다시 복원할 수 있다면 작업자 입장에서 훨씬 부담이 덜어진 상태에서 새로운 작업을 할 수 있다는 점에 있다고 생각합니다.
정말 간단한 예시로 문서 작업을 할 때, 작성한 문구가 마음에 들지 않으면 Ctrl + Z (Command + Z)를 눌러서 뒤로 돌아갈 수 있는 것처럼 이전의 형상을 기록할 수 있다는 것 자체가 작업을 훨씬 효율적으로 할 수 있게 도와줍니다.
Git을 설치하는 방법
Git을 설치하는 방법은 꽤 단순합니다. 특히 local 내에 package manager가 설치되어있다면 더 단순하게 작업할 수 있습니다. window의 경우에는 winget, mac의 경우에는 homebrew, linux의 경우에는 apt, apt-get이라는 package manger를 활용해서 쉽게 설치할 수 있습니다. 설치 코드는 아래 첨부된 내용을 참고해 주세요.
# Windows
# winget 설치 확인 및 Git 설치
winget install --id Git.Git -e --source winget
# macOS
# Homebrew 사용
brew install git
# Xcode Command Line Tools 사용
xcode-select --install
# Linux
# Ubuntu/Debian 계열
sudo apt update
sudo apt install git
Git의 기초 워크플로에 대한 이해
1. 작업할 공간을 git으로 관리할 수 있게 세팅하기 ( init )
작업할 디렉터리에 형상관리를 하기 위해 필요한 소스들을 디렉토리 내에 만들어주는 작업이 필요합니다. 이때 저희가 사용하는 명령어는 init입니다. init 명령문을 통해 형상관리할 공간을 선언해 주면. git 폴더가 생성되면서 해당 디렉터리는 앞으로 git을 통해 형상관리 할 수 있습니다.
이외에도 git으로 관리할 공간을 선언하는 방법에는 나중에 git과 원격 저장소 github 내 repository를 연동하는 명령어로 clone을 사용할 수도 있지만 지금은 딱 이 정도만 이해하고 넘어가는 것으로 하겠습니다. 다음에 더 본격적으로 해당 내용들을 다뤄보겠습니다.
2. 프로젝트 관리를 위한 두 가지 축을 이해하기 (branch 관리 전략 1)
프로그램을 개발할 때 개발팀은 '배포'라는 최종적인 목표를 두게 됩니다. 성공적으로 배포하기 위해서 저희는 프로그램에 필요한 기능들을 코드로 작성하게 되고 그 과정에서 수많은 시행착오를 경험하게 됩니다. 우리는 이를 두 개의 axis로 관리해보고자 합니다. 축에 대한 자세한 내용은 아래 정리된 자료를 참고해 주세요.
먼저 첫 번째 축은 완성된 제품 차원에서 배포된 버전을 관리하기 위한 축입니다. 이는 일반적으로 저희가 현재(기배포된 프로그램 상태)에서 업데이트된 내용들(일반적으로 기능을 정의하거나 유지보수는 등의 여러 변경사항)을 반영하여 현재 + α(기능이 추가된 프로그램 상태) 상황을 기록하고 이를 배포하는 방향을 기록하는 축입니다. 저희는 앞으로 이 축이 배포된 프로그램을 관리한다는 의미를 담아 버전 축(version axis)이라고 부르겠습니다.
두 번째 축은 완성된 제품의 배포가 아닌 버전을 업데이트하는 과정에서 새롭게 정의된 기능이나 유지보수된 각각의 작업들을 처리할 때 필요한 축입니다. 버전 축과의 차이를 생각해보면 매번 갱신 시 배포라는 목표를 달성하는 것에 반해 두번째 축은 새로이 기능을 추가하거나 버그를 해결해야하는 issue가 생길 때마다 새롭게 만들어 지는 축입니다. 또한 issue를 해결하기 위한 여러 단위 작업들 중 한 단위 작업 당 하나의 축으로 세부적인 기능 및 작업을 관리하게 됩니다. 배포라는 최종적인 목표를 위해 꾸준히 운용되는 버전 축과는 달리 두번째 축은 구현이 완료되면 제거될 수도 있습니다. 이렇게 각각의 작업 단위에 따라 관리되는 두번째 축은 앞으로 작업 축(Task Axis)라고 부르겠습니다.
3. 두 축 (Version, Task)을 Branch로 관리하는 방법에 대해서 이해하기 (Branch, Commit 역할 이해)
앞서 축에 대한 정리를 통해 Version, Task Axis 개념에 대해서 이해했다면 본격적으로 축의 기능을 정의해 보겠습니다. 두 축 모두 기능적으로 현재 배포된 버전에서 변화를 주고 그 부분을 기록해 나가는 독립된 공간으로 이해할 수 있습니다. 마치 긴 러닝타임을 가지는 게임 중간에 save point를 둬서 유저가 게임에서 이탈하거나 죽는 경우에도 게임을 맨 처음부터 다시 시작하지 않고 save point부터 이어서 할 수 있는 것과 비슷한 개념입니다. git에서는 save point 대신 독립된 공간을 생성할 때, branch라는 개념을 통해서 구현하게 됩니다.
그렇다면 Branch를 Version, Task Axis에 각각 어떻게 활용될까요?
Branch라는 것은 쉽게 말해 작업을 위해 생성한 독립된 공간이라고 이해할 수 있습니다. 우리가 Branch로 독립시킨 공간을 어떻게 활용할지 정함에 따라 해당 Branch가 어떤 축으로 쓰일지도 정해집니다. 다만 현재는 우리가 Version, Task Axis를 Branch로 쓰는 개념에 대해서 이해하기 전에 Branch 내부에 어떤 기능들이 있으며 Branch 간에는 어떤 기능이 있는지 먼저 이해하는 것이 선행되어야 합니다.
먼저 위 그림의 흐름(1~3)을 따라가 보면 기 배포되었던 main Branch에서 feat/(A+B)라는 이름의 Branch를 생성하고, 해당 Branch에서 작업을 통해 발생한 변동사항을 Commit을 통해 기록하고, 최종적으로 A, B 기능이 추가된 feat/(A+B) branch를 main branch에 병합하는 과정을 확인할 수 있습니다. 이를 통해 저희는 main Branch에서 Task용 Branch를 생성, Task용 Branch 내부 변화 기록(Commit), Task용 Branch와 main Branch 간의 병합 과정을 통해서 기존 main에 A와 B 기능을 추가하여 새로운 main으로 업데이트하는 과정을 살펴보았습니다.
Outro
다음 시간에는 앞서 정리한 Git의 기초 워크플로에 대한 이해를 실습해 보면서 필요한 명령어를 정리하고 실제로 실습을 통해 익혀보는 시간을 가져보겠습니다. 영상 자료도 함께 첨부하오니 설명이 부족하신 분들은 참고해 주시면 좋을 것 같습니다. 도움 되셨다면 아래 링크에서 좋아요와 구독, 알람설정 부탁드립니다 ㅋㅋ!
인스타 주소 🎗
'Programming > git & github & convention' 카테고리의 다른 글
Github Convention(실습) (2) | 2024.11.09 |
---|---|
Github convention과 Branch Strategy(이론) (0) | 2024.11.09 |
Github용 Markdown 문법 정리(기본) (0) | 2024.11.09 |
[3] Git과 Github 관계 톺아보기(이론 및 실습) (0) | 2024.11.09 |
[2] Git을 통한 형상관리(실습) (0) | 2024.11.08 |