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

Git은 왜 바이브코딩의 생명줄인가?

AI 코드 생성 시대에 왜 Git을 알아야 하는지 알아봅니다. 버전 관리의 기본 개념과 커밋이 무엇인지 쉽게 이해합니다.

지금까지 터미널을 통해 리눅스 서버라는 낯선 공간에 적응하고 건물을 짓기 위한 기초 공사를 마쳤습니다. 이제부터는 우리가 짠 소스 코드 자체를 관리하는 방법에 대해 알아봅니다. 최근 인공지능이 코드를 대신 짜주는 바이브코딩이 대세가 되면서 코딩의 진입장벽이 크게 낮아졌습니다. 하지만 AI가 항상 완벽한 코드만 주는 것은 아닙니다. 잘 돌아가던 웹사이트가 AI가 추천해 준 코드 한 줄 때문에 완전히 망가져 버렸을 때, 원래의 안전했던 상태로 되돌릴 수 없다면 모든 노력이 물거품이 됩니다. Git(깃)은 바로 이런 상황에서 여러분의 코드를 구원해 줄 가장 강력한 생명줄입니다.

최종_진짜최종_이게마지막.txt 의 늪

대학 시절 과제나 기획서를 쓸 때, 혹시 파일 내용이 날아갈까 봐 불안해서 파일 이름을 매번 바꿔가며 저장했던 경험이 있으실 겁니다. `보고서_초안.docx`, `보고서_수정.docx`, `보고서_최종.docx`, `보고서_진짜최종.docx` 처럼 폴더 안이 똑같은 내용의 파일들로 가득 차 본 적이 있나요? 혼자서 문서를 쓸 때는 이렇게 수동으로 파일 이름을 바꿔가며 관리해도 어찌어찌 버틸 수 있습니다.

하지만 수십, 수백 개의 파일이 유기적으로 톱니바퀴처럼 맞물려 돌아가는 웹사이트 코드라면 이야기가 다릅니다. 특정 기능을 추가하기 위해 5개의 파일을 동시에 수정했는데, 갑자기 웹사이트가 먹통이 되었다고 상상해 봅시다. 어디를 수정했는지 하나하나 기억해서 뒤로 가기(Ctrl+Z)를 눌러 되돌리거나, 전체 파일을 복사해서 날짜별로 백업 폴더를 만드는 것은 불가능에 가깝습니다.

이런 끔찍한 상황을 막기 위해 전 세계 프로그래머들이 합의해서 만든 버전 관리 시스템(Version Control System)의 표준이 바로 Git(깃)입니다.

정의

버전 관리 시스템 (VCS)

문서나 소스 코드의 변경 사항(버전)을 시간에 따라 기록해 두고, 특정 시점의 버전으로 쉽게 파일을 꺼내오거나 되돌릴 수 있도록 도와주는 시스템입니다. 게임에서 보스전에 들어가기 직전에 세이브(Save)를 해두고, 싸우다 죽으면 그 세이브 포인트에서 다시 시작하는 것과 완전히 똑같은 원리입니다.

바이브코딩 시대, AI를 통제하는 유일한 도구

코딩 지식이 부족한 비개발자가 챗GPT나 클로드 같은 AI와 대화하며 코드를 완성하는 바이브코딩 방식은 엄청난 생산성을 자랑합니다. AI에게 "로그인 기능을 추가해 줘"라고 하면 순식간에 복잡한 코드를 만들어냅니다.

하지만 AI는 종종 할루시네이션(환각)을 일으키며 엉뚱한 코드를 던져주거나, 기존에 잘 작동하던 다른 기능과 충돌을 일으키는 코드를 제안하기도 합니다. 내가 코드의 의미를 100% 이해하고 직접 짰다면 어디가 문제인지 금방 찾아내겠지만, 비개발자는 AI가 짜준 수백 줄의 코드를 눈으로 훑어서 논리적 오류를 찾아낼 수 없습니다. 코드를 망가뜨리는 것은 1초면 되지만, 망가진 코드를 원상 복구하는 것은 며칠 밤을 새워도 모자랄 수 있습니다.

따라서 바이브코딩을 할 때 가장 두려워해야 할 것은 '에러가 나는 상황'이 아닙니다. '언제든 돌아갈 수 있는 안전한 체크포인트가 없는 상태'야말로 진정한 공포입니다.

바이브코딩의 철칙 1계명

  1. 1AI에게 새로운 기능을 짜달라고 부탁하기 직전, 반드시 현재 완벽하게 돌아가는 정상 코드를 Git으로 세이브(백업)해 둔다.
  2. 2AI가 짜준 코드를 붙여넣고 테스트했는데 에러가 난다면, 코드를 직접 고치려고 끙끙대지 말고 Git을 이용해 방금 전의 세이브 포인트로 깔끔하게 롤백(되돌리기)한다.
  3. 3되돌린 깨끗한 상태에서, AI에게 이전 방식이 아닌 다른 방식으로 짜달라고 다시 질문한다.

세이브 포인트, 커밋(Commit)

Git의 핵심은 프로젝트의 찰나의 순간을 사진 찍듯이 저장해 두는 것인데, 이렇게 하나의 완성된 세이브 포인트를 만드는 행위를 커밋(Commit)이라고 부릅니다.

마우스로 저장 버튼을 한 번 누르면 끝나는 일반 프로그램과 달리, 터미널에서 Git으로 커밋을 남기려면 약간의 번거로운 준비 과정을 거쳐야 합니다. 왜 굳이 번거롭게 만들었을까요? 파일 하나가 바뀔 때마다 무의미하게 자동 저장되는 것이 아니라, 작업자가 "그래, 여기까지가 로그인 기능 1차 완성본이야. 이제 세이브하자."라고 의미 있는 단위로 묶어서 기록을 남기기 위함입니다.

이렇게 의미 단위로 커밋을 쌓아두면, 나중에 문제가 터졌을 때 "아, 어제 '결제 기능 추가' 커밋을 한 이후부터 서버가 터지기 시작했어. 일단 그 직전인 '장바구니 완료' 커밋 시점으로 전체 프로젝트를 돌려놓자"라는 우아하고 안전한 복구가 가능해집니다.

의미 있는 커밋 세이브 포인트의 예시

게임의 세이브 포인트에 비유하자면 다음과 같습니다:

  • 커밋 1: "캐릭터 튜토리얼 완료" (문제가 생기면 언제든 튜토리얼 직후로 돌아감)
  • 커밋 2: "초보자 마을 퀘스트 모두 완료"
  • 커밋 3: "첫 번째 보스전 진입 직전" (보스에게 지면 바로 이 시점으로 돌아옴)

이처럼 언제든 안전하게 복구할 수 있는 의미 단위로 코드를 세이브하는 것이 중요합니다.

개념 퀴즈

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

바이브코딩을 진행할 때, 특정 기능을 새롭게 추가하다가 오류가 발생해 프로젝트 전체가 엉망이 되는 것을 방지하기 위한 가장 안전하고 권장되는 방법은 무엇인가요?

3줄 요약

  1. 1Git은 소스 코드의 변경 사항을 시간에 따라 안전하게 추적하고 관리해 주는 강력한 버전 관리 시스템입니다.
  2. 2AI 코딩 시대에 비개발자가 엉망이 된 코드를 빠르고 안전하게 원상 복구하려면, Git을 활용한 백업이 선택이 아닌 필수 생명줄입니다.
  3. 3Git에서 작업의 완료나 변경 사항을 의미 있는 단위로 묶어서 마치 게임의 세이브 포인트처럼 기록하는 행위를 커밋(Commit)이라고 부릅니다.