MMeshOps
바이브코딩을 위한 Git과 리눅스 기초
11예상 10입문

코드를 망쳐도 괜찮은 평행우주 만들기

기존 코드를 망치지 않고 새로운 기능을 테스트할 수 있는 Git 브랜치의 개념과 git branch, checkout 명령어를 실습합니다.

지금까지 우리는 하나의 역사적 흐름 위에서만 작업을 진행해 왔습니다. 하지만 실제 웹사이트를 운영하다 보면, "현재 서비스는 정상적으로 돌아가게 놔두고, 디자인을 확 바꾼 버전을 한쪽에 몰래 만들어서 테스트해 볼 순 없을까?" 하는 욕심이 생깁니다. 만약 실패하면 조용히 버리고, 성공하면 현재 서비스에 덮어씌우는 방식으로 말이죠. 이번 시간에는 원본 코드를 티끌 하나 다치게 하지 않고, 완전히 독립된 평행우주를 만들어 마음껏 코드를 망쳐가며 테스트할 수 있는 Git 최고의 발명품, '브랜치(Branch)'에 대해 배웁니다.

메인(main)이라는 이름의 튼튼한 기둥

Git 저장소를 처음 만들면 기본적으로 `main`(또는 과거에는 `master`)이라는 이름의 굵직한 기둥 줄기가 하나 생깁니다. 이 `main` 기둥은 우리의 실제 웹사이트에 서비스되고 있는 '가장 완벽하고, 버그가 없으며, 절대 망가져서는 안 되는 신성한 코드본'이라고 생각해야 합니다.

만약 이 `main` 기둥에 대고 직접 바이브코딩을 시도하다가 코드를 망치면 어떻게 될까요? 방문자들은 당장 깨진 화면을 보게 될 것이고, 복구하는 동안 서비스는 마비됩니다. 아무리 우리가 `git restore`로 과거로 돌아갈 수 있다고 하더라도, 라이브 서비스 중에 코드가 망가지는 것은 상상만 해도 끔찍한 일입니다.

이런 위험을 피하기 위해, 프로그래머들은 새로운 기능을 만들 때 절대 `main` 기둥을 직접 건드리지 않습니다. 대신 `main` 기둥에서 곁가지(Branch)를 하나 뻗어 나오게 만듭니다.

정의

브랜치 (Branch)

나무의 굵은 기둥에서 뻗어 나온 '나뭇가지'라는 뜻입니다. 원본 코드(main)의 상태를 정확히 똑같이 복사해 낸, 완전히 독립된 작업 공간(평행우주)입니다. 이 나뭇가지 위에서 코드를 지우든 파일을 폭파시키든 원본 기둥인 main에는 아무런 영향도 가지 않습니다.

평행우주 창조하기: `git branch`

새로운 나뭇가지를 만들 때는 `git branch` 명령어를 사용합니다. 만약 웹사이트에 회원가입 기능을 새로 추가하고 싶다면, `git branch signup-feature`라고 입력합니다.

이 명령어는 "현재 내 코드 상태를 그대로 복사해서 `signup-feature`라는 이름의 새로운 우주를 만들어 줘"라는 뜻입니다. 단독으로 `git branch` (이름 없이)만 치면, 현재 내 프로젝트에 어떤 우주들이 존재하는지 목록을 쫙 보여줍니다. 그리고 현재 내가 머물고 있는 우주의 이름 옆에는 초록색 별표(`*`)가 붙어 있습니다.

git branch로 목록 확인하기

$ git branch
* main
  signup-feature
  design-test

위 결과를 보면, 나에게는 총 3개의 우주가 존재하며 그중 현재 나는 원본인 `main` 우주에 위치하고 있다는 것을 알 수 있습니다. 우주를 만들기는 했지만 아직 넘어가지는 않은 상태입니다.

우주 간 차원 이동 포털: `git checkout`

새로운 우주(`signup-feature`)를 만들었으니, 이제 그곳으로 포털을 타고 넘어가야 합니다. 내가 작업하는 무대를 다른 우주로 전환시켜 주는 명령어가 `git checkout` (최신 버전에서는 `git switch`도 사용)입니다.

`git checkout signup-feature`라고 치면, 터미널은 `Switched to branch 'signup-feature'`라는 메시지를 뱉으며 순식간에 차원 이동을 완료합니다.

이동한 직후에 폴더를 열어보면 파일 내용은 `main`에 있을 때와 100% 똑같습니다. 하지만 여기서부터는 무슨 짓을 해도 안전합니다. 바이브코딩 AI가 시키는 대로 무지막지한 코드를 쏟아붓고, 에러가 나면 지우고를 반복해 봅니다. 그러다 코드가 완전히 박살이 나버려서 도저히 수습할 수 없는 지경에 이르렀다고 가정해 봅시다.

망친 코드를 대하는 브랜치의 마법

상황우리의 대응결과
signup-feature 브랜치에서 코드가 완전히 망가짐다시 포털을 타고 원본 우주로 도망갑니다: git checkout mainmain 우주로 돌아오자마자 망가졌던 파일들이 순식간에 원상 복구된 깨끗한 모습으로 나타납니다. 원본은 무사합니다!
망가진 우주가 보기 꼴도 보기 싫음main으로 돌아온 상태에서 해당 우주를 통째로 폭파시킵니다: git branch -D signup-feature망가진 평행우주가 역사 속에서 완전히 사라집니다. 깨끗한 main에서 다시 새 브랜치를 파서 시작하면 그만입니다.

단축키로 우주 창조와 이동을 한 번에

실무에서는 새로운 기능을 만들 때 "우주 생성 $\rightarrow$ 우주로 이동"의 두 단계를 항상 거치게 됩니다. 이를 한 번의 명령어로 합쳐주는 마법의 단축 옵션이 `-b` (branch) 입니다.

`git checkout -b new-login` 이라고 입력하면, "new-login이라는 브랜치를 만들고, 만들어지자마자 그곳으로 날 보내줘"라는 의미가 되어 타이핑을 두 배로 아낄 수 있습니다. 이것이 실제 개발자들이 가장 즐겨 치는 브랜치 생성 명령어입니다.

개념 퀴즈

퀴즈 답을 맞춰야 학습 완료가 됩니다.

당신은 현재 가장 안전한 원본 코드인 'main' 브랜치에 있습니다. 게시판 기능을 새롭게 추가하기 위해 'board-feature'라는 이름의 새로운 평행우주(브랜치)를 만들고, 그 즉시 해당 브랜치로 작업 공간을 이동하려고 합니다. 두 가지 행동을 한 번에 처리해 주는 가장 효율적인 명령어는 무엇인가요?

3줄 요약

  1. 1main 브랜치는 실제 서비스되는 가장 완벽한 기둥 코드이므로, 직접 수정하여 에러를 발생시키는 위험을 안아서는 안 됩니다.
  2. 2새로운 기능을 시도할 때는 반드시 git branch 명령어로 기존 코드와 분리된 안전한 평행우주(나뭇가지)를 만들어야 합니다.
  3. 3git checkout(또는 switch) 명령어를 통해 브랜치 사이를 자유롭게 이동할 수 있으며, 이로써 하나의 폴더 안에서 여러 가지 버전의 코드를 안전하게 관리할 수 있습니다.