"배포 입문 (2/7) — Git 기초: commit, branch, merge, push를 배포 관점에서 이해하기"

배포 사고는 종종 서버보다 Git에서 먼저 시작된다. 무엇을 올렸는지 모르면, 무엇을 되돌려야 하는지도 모른다.


핵심 요약

  • Git은 단순한 백업 도구가 아니라 배포 가능한 상태를 기록하는 이력 시스템이다.
  • commit은 변경 단위를 고정하고, branch는 안전한 실험 공간을 만들며, merge는 검토된 변경만 공유 이력으로 넘긴다.
  • push는 로컬 이력을 원격 저장소로 보내는 단계일 뿐, 배포 그 자체는 아니다.
  • 배포를 안정적으로 하려면 "작은 커밋, 분리된 브랜치, 의도된 머지"가 기본 습관이 되어야 한다.

1. Git을 배포 관점에서 다시 보면

초보자는 Git을 "코드 저장하는 곳"으로 이해하기 쉽다. 하지만 배포 관점에서 보면 Git의 역할은 더 명확하다. 지금 서비스에 반영할 수 있는 상태가 무엇인지, 그 바로 이전 상태가 무엇인지, 누가 어떤 이유로 바꿨는지 추적하는 기준선이다.

이 기준선이 없으면 배포 문제를 만났을 때 할 수 있는 말이 없다. "어제까지는 됐는데 왜 깨졌지?"라는 문장은 로그가 아니라 감상에 가깝다.

2. commit, branch, merge, push는 각각 무엇을 하나

commit

커밋은 변경을 한 덩어리로 묶어 이름 붙이는 작업이다. 좋은 커밋은 "무엇이 바뀌었는지"와 "왜 바꿨는지"가 같이 읽힌다.

branch

브랜치는 실험 공간이다. 메인 브랜치를 바로 흔들지 않고, 새 기능이나 수정 작업을 분리해서 진행하게 해 준다. 배포 관점에서는 운영 라인을 오염시키지 않는 안전 구역이다.

merge

머지는 분리된 변경을 공유 이력으로 반영하는 단계다. 이때 코드 리뷰나 테스트 결과가 붙으면, 머지는 단순 합치기가 아니라 검토 통과 신호가 된다.

push

푸시는 로컬 이력을 GitHub 같은 원격 저장소로 보내는 단계다. 많은 입문자가 push = deploy라고 오해하지만, 실제 배포는 그 뒤의 GitHub Actions, Vercel, Railway 같은 자동화 흐름에서 일어난다.

3. 최소한 알아야 할 Git 흐름

가장 단순한 흐름은 아래처럼 이해하면 된다.

git checkout -b feature/login-copy
git add .
git commit -m "Update login page copy"
git push origin feature/login-copy

이렇게 하면 로컬 실험이 원격 브랜치까지 올라간다. 그다음 보통은 Pull Request를 만들고, 리뷰나 테스트를 거친 뒤 main에 머지한다. 실제 배포 트리거는 대개 main 머지 뒤에 붙는다.

4. 왜 작은 커밋이 배포에 유리할까

큰 커밋 하나에 화면 수정, 설정 변경, 환경 변수 추가, 빌드 스크립트 수정이 한꺼번에 섞여 있으면 문제 발생 시 원인을 좁히기 어렵다.

반대로 커밋이 작고 의도가 분리되어 있으면 이점이 분명하다.

  • 어떤 변경이 문제를 냈는지 추적이 빠르다
  • 특정 커밋만 되돌리기 쉽다
  • 리뷰할 때 판단 기준이 선명하다
  • 배포 실패 시 복구 지점이 분명하다

즉, 작은 커밋은 예쁜 습관이 아니라 복구 비용을 낮추는 운영 습관이다.

5. 초보자가 자주 하는 실수

첫째, main에서 바로 작업하는 것. 이렇게 하면 실험과 운영 이력이 섞인다.

둘째, 커밋 메시지를 fix, update, asdf처럼 쓰는 것. 나중에 보면 의미가 남지 않는다.

셋째, 변경이 너무 많을 때도 한 커밋으로 밀어 넣는 것. 배포 시점 추적이 어려워진다.

넷째, 푸시한 뒤 GitHub에서 어떤 브랜치가 어떤 상태인지 보지 않는 것. 원격 저장소가 배포 자동화의 시작점이기 때문에, 원격 기준으로 사고하는 습관이 필요하다.

6. 배포를 위한 Git 최소 규칙

혼자 개발할 때도 아래 네 가지만 지키면 배포 사고가 크게 줄어든다.

  1. 새 작업은 브랜치에서 시작한다.
  2. 커밋은 하나의 의도로 묶는다.
  3. main에는 검토 가능한 변경만 머지한다.
  4. 배포는 push가 아니라 merge to main 이후 자동화로 일어나게 설계한다.

이 규칙이 자리 잡으면 다음 편의 GitHub, 그리고 마지막 편의 CI/CD 파이프라인이 훨씬 자연스럽게 연결된다.

참고 자료

  • GitHub Training, Git Cheat Sheet — https://training.github.com/downloads/github-git-cheat-sheet.pdf
  • GitHub Docs, Understanding GitHub Actions — https://docs.github.com/en/actions/get-started/understand-github-actions
  • Git SCM, Git Branching — https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell

이 글은 배포 입문 시리즈의 2/7 편입니다. 다음 편: GitHub에서 repository, Pages, Actions의 역할을 분리해 보기.

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"