바이브 코딩을 하다 보면 반드시 겪는 날이 옵니다. 어제까지 멀쩡하던 앱에 기능 하나를 추가해달라고 했더니, AI가 여기저기를 고치다가 앱 전체가 안 돌아가게 되는 날이요. “아까 상태로 돌려줘”라고 부탁해도 AI는 정확히 되돌리지 못합니다. 고친 곳이 스무 군데인데 그중 어디가 문제인지 AI 자신도 모르거든요.
이 날을 위해 존재하는 것이 Git입니다. “AI가 코드를 다 기억해주는데 Git이 왜 필요하냐”는 질문을 많이 하는데, 결론부터 말하면 AI는 코드를 기억하지 못합니다. 대화가 길어지면 잊고, 새 대화를 열면 백지가 됩니다. 코드의 과거를 기억하는 것은 AI가 아니라 Git입니다.
Git은 게임의 세이브 포인트입니다
Git의 개념은 게임 세이브와 정확히 같습니다. 게임에서 보스전에 들어가기 전에 세이브를 하죠. 죽어도 세이브 지점부터 다시 하면 되니까요. Git의 커밋(commit) 이 바로 그 세이브입니다. 커밋 한 번이 “이 순간의 프로젝트 전체 파일의 스냅샷”으로 영구 보관됩니다.
세이브 파일이 쌓이듯 커밋도 쌓입니다. “로그인 기능 완성” 시점의 커밋, “결제 붙이기 전” 시점의 커밋. 언제든 아무 시점으로나 되돌아갈 수 있습니다. AI가 앱을 망쳐놨을 때 필요한 것이 바로 이것입니다. 스무 군데 고친 것 중 뭐가 문제인지 찾을 필요 없이, 통째로 마지막 세이브 지점으로 돌아가면 끝입니다.
알아야 할 단어는 4개뿐입니다
Git에는 명령어가 수십 개 있지만, 바이브 코더에게 필요한 개념은 4개입니다. 명령어를 외울 필요도 없습니다. 어차피 AI에게 말로 시킬 거니까요.
- 저장소(repository): 프로젝트 폴더에 붙는 “세이브 데이터 보관함”입니다. AI 코딩 도구가 보통 처음에 만들어줍니다.
- 커밋(commit): 세이브. 지금 이 순간의 스냅샷을 보관함에 기록하는 것입니다.
- 푸시(push): 세이브 파일을 클라우드에 백업하는 것입니다. 백업 서버가 바로 GitHub입니다. 컴퓨터가 고장 나도 코드가 살아남는 이유죠.
- 롤백(되돌리기): 과거의 세이브 지점으로 프로젝트를 통째로 되돌리는 것입니다.
GitHub에 백업할 때 주의할 점 하나는 2편에서 이미 다뤘습니다. 저장소를 공개(Public)로 두면 봇이 몇 분 안에 훑어갑니다. 특별한 이유가 없다면 비공개(Private) 로 만드는 것이 기본값입니다.
실전 리듬: “기능 하나, 커밋 하나”
Git을 쓰는 법은 습관 하나로 요약됩니다. 뭔가 하나가 잘 돌아가게 됐을 때마다 세이브하는 것.
- 로그인이 드디어 된다 → “지금 상태 커밋해줘”
- 디자인 손보기 전에 → “고치기 전에 커밋부터 해줘”
- 오늘 작업 끝 → “커밋하고 GitHub에 푸시해줘”
Cursor든 Claude Code든, AI 코딩 도구는 전부 이 말을 알아듣고 대신 처리해줍니다. 직접 명령어를 칠 일은 없습니다. 중요한 것은 타이밍입니다. 보스전(큰 수정) 전에 세이브하지 않으면, 죽었을 때 돌아갈 곳이 없습니다. AI에게 큰 수정을 시키기 전의 커밋 한 번이 가장 값진 커밋입니다.
반대로 가장 흔한 실패는 이것입니다. 며칠 동안 커밋 없이 작업을 쌓다가 AI가 앱을 망가뜨리는 것. 돌아갈 세이브 지점이 없어서, 잘 돌아가던 시절의 코드는 영영 사라집니다. 커밋하지 않은 변경은 Git도 지켜주지 못합니다.
망쳤을 때: 1분 롤백
AI가 앱을 망쳐놨다면 순서는 이렇습니다.
- 침착하게 AI에게 말합니다. “방금 수정으로 앱이 망가졌어. 마지막 커밋 상태로 되돌려줘.”
- AI가 롤백을 실행하면, 커밋 시점 이후의 변경이 전부 사라지고 프로젝트가 세이브 지점으로 돌아갑니다.
- 앱이 다시 돌아가는지 확인한 뒤, 아까 실패한 수정을 더 작은 단위로 잘라서 다시 시도합니다. 한 번에 스무 군데를 고치게 하지 말고 한 번에 한 가지씩.
여기서 1편의 구분이 다시 등장합니다. 롤백은 코드만 되돌립니다. DB에 쌓인 데이터는 Git과 무관하게 그대로 남습니다. 코드를 어제로 돌려도 오늘 가입한 회원은 사라지지 않습니다. 반대로 실수로 지운 데이터를 Git으로 복구할 수도 없습니다. 코드의 과거는 Git이, 데이터의 과거는 DB 백업이 담당합니다.
.env 파일도 마찬가지입니다. 2편에서 .gitignore에 등록해 Git이 따라가지 않게 했으므로, Git은 이 파일을 지켜주지 않습니다. 키를 재발급받으면 어딘가(비밀번호 관리자 등)에 따로 적어두는 것이 안전합니다.
오늘 할 수 있는 셀프 점검
AI에게 이렇게 물어보세요.
- “이 프로젝트 Git 저장소 만들어져 있어? 마지막 커밋이 언제야?” — 저장소가 없거나 마지막 커밋이 일주일 전이라면, 지금이 커밋할 때입니다.
- “GitHub에 백업(푸시)되고 있어? 저장소가 공개야 비공개야?” — 백업이 없다면 만들어달라고 하고, 공개 상태라면 비공개 전환을 검토합니다.
- “커밋 안 된 변경이 얼마나 쌓여 있어?” — 잘 돌아가는 상태라면 바로 커밋해달라고 합니다.
정리
- AI는 코드의 과거를 기억하지 못합니다. 기억은 Git의 일입니다.
- 커밋은 세이브, 푸시는 클라우드 백업(GitHub), 롤백은 세이브 지점으로 복귀입니다.
- 리듬은 하나입니다. 잘 돌아가는 순간마다, 그리고 큰 수정 직전에 “커밋해줘”.
- 롤백은 코드만 되돌립니다. DB 데이터와
.env는 Git 밖의 세계입니다. - 저장소는 특별한 이유가 없다면 비공개가 기본값입니다.
다음 편은 배포입니다. 내 컴퓨터에서는 완벽하게 돌아가는 앱이 왜 인터넷에 올리면 안 돌아가는지, localhost와 서버와 도메인과 환경변수가 각각 무엇인지 풀어보겠습니다.
