커밋 (Commit)

An individual change to a file (or set of files) that has been written to the repository's history database.

— 국제 소스 형상 공학 표준 사양서에서 규정한, 유일무이한 시간 축 기반 변경 집합과 메타 메타데이터 팩의 영구 박제 행위 정의

게임을 하다가 중간 보스를 깨고 죽어도 안심할 수 있게 저장해 두는 '세이브포인트(Save Point)'의 개발자용 실사 버전이자, 깃허브 잔디밭에 영리한 녹색 점을 한 칸 심는 농사짓기 도장. 하지만 머리 쥐어뜯으며 코딩하다 지치면, 메시지에 '대충 고침', '제발 돌아가라', 'asdf' 같은 쓰레기 텍스트를 기재해 역사를 난도질하고 마는 양날의 검(...)

1. 개요

저장소의 유구한 역사 타임라인 위에 프로젝트 소스 파일들의 '가치 있는 특정 변경 상태 스냅샷'을 영구 불변의 물리적 마디(Node)로 영구 보존하는 버전 생성 행위이자 그 결과로 남은 이력 데이터 패키지를 뜻한다.

2. SHA-1 해시가 선사하는 영구 불변의 역사 도장

Git에서 내가 정성껏 수정한 코드들을 스테이징 영역에 올리고 git commit 명령을 날리는 순간, 깃 내부 엔진은 변경된 파일 내용과 수정자 이름, 이메일, 작성 시간, 부모 커밋의 고유 주소록 정보를 한데 엮어 고도의 수학적인 암호화 알고리즘인 SHA-1 해시 함수에 집어넣는다. 결과물로 a1b2c3d4...로 시작하는 전 우주에서 유일무이함이 수학적으로 완벽 증명된 40글자의 고유 임의 문자열 해시 키 값을 부여받는다. 이 해시값은 커밋 내부의 소스 글자 단 1비트라도 임의로 조작되면 완전히 다른 외계어 해시값으로 찢어져 버리기 때문에, 그 누구도 깃 저장소 역사를 은밀하게 조작할 수 없는 '영구 불변의 역사 증적 장부' 역할을 수립한다.1

3. 좋은 커밋 메시지를 쓰는 고인물들의 규칙

소스 변경 내역을 박제할 때 꼬리표로 반드시 동봉해야 하는 텍스트 설명글이 바로 커밋 메시지(Commit Message)이다. 주니어들은 흔히 '이 파일 고침', '수정 완료' 같은 쓸모없는 일기장 수준의 낙서를 남겨 미래에 과거 버전을 되돌리려는 동료들의 눈을 멀게 만든다. 반면 고수들은 엄격하게 정립된 전산 표준 '커밋 템플릿 규칙(Commit Convention)'을 준수한다.

  • Feat: 새로운 신종 비즈니스 기능을 소스 구현해 선사했을 때.
  • Fix: 버그나 예외 오작동 수리 코드를 적용해 바로잡았을 때.
  • Refactor: 기능 동작은 100% 같은데 코드 구조만 깔끔하게 청소(리팩토링)했을 때.
  • Chore: 소스 변경 없이 빌드 설정 파일이나 단순 패키지 종속성만 가볍게 청소 수정했을 때.(...)

4. 관련 밈 및 드립

4.1. 깃허브 잔디 심기 중독증

깃허브 원격 저장소(github)는 개발자가 커밋을 날려 푸시할 때마다, 기여 대시보드 달력 칸에 기여도 강도에 따라 연두색에서 짙은 녹색 점을 실시간으로 칠해주는 '잔디 심기(Contribution Grass)' 시각 시각화 게임 시스템을 제공한다. 전 세계 수많은 개발자들은 매일 깃허브 잔디 달력 칸이 단 하루라도 하얗게 비어 있는 꼴을 눈 뜨고 보지 못하는 지독한 '잔디 중독증'에 걸리곤 한다. 이들은 밤 11시 50분이 되면 잔디를 심기 위해 의미 없는 주석 한 줄을 고치고 강제 커밋을 날리는 촌극을 서슴지 않는다.

5. 여담

  • 커밋은 절대 지워지지 않는다: 깃 터미널에서 실수로 커밋을 날려버리고 git reset --hard 명령어로 버전을 완전히 밀어버렸을 때, 내 피 같은 주말 작업 소스가 공중분해된 줄 알고 차가운 바닥에 주저앉아 눈물을 뿜곤 한다. 하지만 깃은 자비롭다. 깃 저장소 내의 보이지 않는 블랙박스 비상 대피 장부인 git reflog를 터미널에 쳐보면, 리셋으로 날려버렸던 고대 커밋들의 SHA-1 해시 주소록이 고스란히 남아 숨 쉬고 있다. 이 주소만 긁어 git reset --hard 해시값으로 강제 심폐소생을 집행하면 소스가 0.1초 만에 기적처럼 완벽히 정상 복구된다.
  • 가장 거대한 단일 커밋의 위력: 구글 전산실의 일체형 모노레포 저장소에서는 하루에 무려 40,000개가 넘는 커밋이 수만 명의 개발자들에 의해 쉴 새 없이 몰아쳐 체인에 누적되고 있다. 가히 인류 문명이 빚어낸 가장 거대하고 끊임없는 디지털 기록물의 파동이라 불릴 만하다.
  • 의미 있는 최소 단위로 커밋해라: 시니어들이 신입 사원에게 매일 귀에 못이 박히도록 강조하는 규칙이 '커밋을 쪼개라'이다. 일주일 동안 소스 만 줄을 혼자 다 고쳐놓고 '금요일 종합 퇴근용 커밋' 단 한 장에 다 구겨 박아 올리면, 나중에 버그가 터졌을 때 어느 부분 코드에서 사고가 터졌는지 역추적이 영구 불가능해져 도미노 야근 엔딩을 유발하기 때문이다.

6. 관련 문서

각주

  1. 실제로 이 정교한 커밋 SHA-1 해시 체인 아키텍처는 현대 금융 결제 보안과 블록체인(Blockchain) 원장 기술의 시조새적인 설계 모태로 작동하며 기술적 우아함을 뽐내고 있다.