Skip to content

01. Git과 버전 관리 ​

이후의 모든 자동화가 저장소를 기준으로 돕니다. 배포할 것이 무엇인지, 무엇이 언제 바뀌었는지를 Git이 정합니다.

커밋, 브랜치, 병합 ​

작업은 브랜치에서 하고, 끝나면 기본 브랜치로 모읍니다.

bash
git switch -c feature/add-health-check
git add .
git commit -m "헬스 체크 엔드포인트 추가"
git push -u origin feature/add-health-check

커밋은 하나의 의미 단위로 끊습니다. "오늘 작업분"처럼 묶으면 나중에 문제가 생긴 변경 하나만 되돌릴 수 없습니다.

되돌리는 방법은 두 가지이고, 쓰는 자리가 다릅니다.

하는 일쓰는 때
git revert되돌리는 새 커밋을 만듦이미 공유된 커밋
git reset이력에서 지움아직 내 로컬에만 있는 커밋

공유된 브랜치에 reset을 쓰고 강제 푸시하면 다른 사람의 로컬과 어긋납니다. 운영 브랜치에서는 revert만 씁니다.

원격 저장소와 동기화 ​

bash
git fetch origin          # 원격 상태만 가져옴 (작업 트리는 그대로)
git pull --rebase         # 가져온 뒤 내 커밋을 그 위로 옮김
git push

pull은 기본적으로 병합 커밋을 만듭니다. --rebase를 쓰면 이력이 한 줄로 남아 읽기 쉽습니다. 단, 이미 푸시한 커밋을 리베이스하지 않습니다.

bash
git config --global pull.rebase true

충돌 해결 ​

같은 줄을 둘이 고치면 Git이 판단하지 않고 넘깁니다.

<<<<<<< HEAD
const TIMEOUT = 3000;
=======
const TIMEOUT = 10000;
>>>>>>> feature/slow-upstream

둘 중 하나를 고르는 것이 아니라 어느 쪽이 맞는지 판단하는 일입니다. 양쪽 의도를 모르면 작성자에게 묻는 편이 빠릅니다.

충돌을 줄이는 방법은 기술이 아니라 습관입니다. 브랜치를 짧게 유지하고 기본 브랜치를 자주 당겨 옵니다.

브랜치 전략 ​

전략구조맞는 자리
트렁크 기반짧은 브랜치 → main하루에도 여러 번 배포
GitHub Flow기능 브랜치 → main, 병합 시 배포대부분의 웹 서비스
Git Flowdevelop, release, hotfix 분리버전을 묶어 내보내는 제품

Git Flow는 설치형 소프트웨어 시절에 맞춰 만들어졌습니다. 상시 배포하는 서비스에 쓰면 브랜치 관리 비용만 늘어납니다. 배포 주기에 맞춰 고릅니다.

풀 리퀘스트와 코드 리뷰 ​

기본 브랜치에 직접 밀지 않고 PR로 모으면, 자동 검사와 승인을 걸 지점이 한 곳으로 정리됩니다.

브랜치 작업 → PR 생성 → CI 자동 검사 → 리뷰 승인 → 병합 → 배포

GitHub의 브랜치 보호 규칙으로 강제합니다.

  • 직접 푸시 금지
  • CI 통과 필수
  • 승인 1인 이상
  • 병합 전 기본 브랜치와 동기화

리뷰에서 사람이 볼 것은 의도와 설계입니다. 포맷과 스타일은 사람이 보기 전에 도구가 잡아야 합니다(09. CI/CD).

올리지 않을 것 가려내기 ​

운영 쪽에서 가장 비싼 실수가 비밀 값을 커밋하는 일입니다.

bash
# .gitignore
.env
*.pem
*.key
terraform.tfstate
.terraform/

한 번 올라간 값은 파일을 지워도 이력에 남습니다. 공개 저장소라면 올라간 순간 자동 수집기가 가져갑니다. 이력을 다시 쓰는 것보다 그 값을 폐기하고 새로 발급하는 편이 확실합니다.

사후 대응보다 차단이 낫습니다.

bash
# 커밋 전에 비밀 값 탐지
gitleaks protect --staged

태그와 릴리스 ​

배포한 버전을 되짚을 수 있어야 롤백이 가능합니다.

bash
git tag -a v1.4.0 -m "검색 필터 추가"
git push origin v1.4.0

태그를 트리거로 배포 파이프라인을 거는 방식이 흔합니다. 커밋 해시만으로도 되지만, 사람이 읽고 말할 수 있는 이름이 장애 상황에서 쓸모가 큽니다.

저장소 호스팅 서비스 ​

특징
GitHub생태계가 가장 넓음, Actions로 CI 통합
GitLabCI/CD와 레지스트리까지 한 제품, 자체 호스팅 선택지
BitbucketJira 등 Atlassian 제품과 연동

고르는 기준은 대체로 CI와 이슈 추적을 어디에 둘지입니다. 저장소만 보면 차이가 거의 없습니다.