AtomicCommit

주니어 개발자들을 위한 패턴 언어 - 변경의 역사를 의미 있고 안전한 단위로 기록하는 법

The Story: The Giant Bundle vs. The Clean History

두 명의 개발자, 민수와 하나가 '장바구니 기능'을 완성하고 코드를 제출(Commit)하려 한다.

민수의 커밋 (The Big Bang): 민수는 하루 종일 코드를 작성했다. 변수 이름을 고치고, 버그를 잡고, 새로운 기능을 추가하고, 필요 없는 주석을 지웠다. 퇴근 직전, 그는 40개의 파일을 한꺼번에 커밋했다.

나중에 동료가 물었다. "민수님, 아까 고친 버그가 다른 데 문제를 일으키는 것 같은데, 그 부분만 되돌릴 수 있을까요?" 민수는 당황했다. "음... 그게 다른 코드랑 다 섞여 있어서, 그것만 따로 빼기는 힘들 것 같은데요..."

하나의 커밋 (Atomic Steps): 하나는 작업을 쪼개서 진행했다.

  1. cart 변수명을 shoppingCart로 변경 (커밋: refactor: 장바구니 변수명 명확화)

  2. 장바구니 합계 계산 로직 추가 (커밋: feat: 장바구니 합계 계산 기능 구현)

  3. 잘못된 할인율 적용 버그 수정 (커밋: fix: VIP 할인율 5% -> 10% 수정)

하나는 각 단계가 끝날 때마다 테스트를 확인하고 커밋했다. 나중에 버그 수정에 문제가 발견되었을 때, 그녀는 단 1초 만에 해당 커밋만 취소(Revert)할 수 있었다.

Context

당신은 BabySteps를 밟으며 기능을 구현하고 있다. 이제 작성한 코드를 저장소에 기록할 차례다.

일상적인 상황:

당신은 지금 코드를 거대한 뭉텅이로 다루고 있어, 과거의 기록이 미래의 짐이 되고 있다.

Problem

여러 목적의 변경이 섞인 거대한 커밋은 협업과 유지보수를 불가능하게 만든다.

커밋이 "원자적(Atomic)"이지 않으면 다음과 같은 문제가 생긴다:

Solution

하나의 커밋이 "하나의 완전하고 일관된 변경"만을 담게 하라.

원자적 커밋(Atomic Commit)은 시스템을 한 상태에서 다른 안정적인 상태로 전이시키는 최소 단위다.

Principle 1: One Commit, One Purpose (한 커밋에 한 목적)

커밋 하나는 하나의 이야기만 해야 한다.

Principle 2: Always Stable (항상 안정적인 상태)

커밋된 시점의 코드는 언제나 빌드가 되고 테스트를 통과하는 상태여야 한다.

Principle 3: Minimum Viable Change (최소 기능 단위)

변경 사항은 가능한 한 작아야 한다. 하지만 동시에 그 자체로 의미가 있어야 한다.

Principle 4: Descriptive Messages (의미 있는 메시지)

메시지는 "무엇을(What)" 했는지보다 "왜(Why)" 했는지를 설명해야 한다.

Real Examples

Example 1: Refactoring before Feature

새로운 검색 필터를 추가해야 한다. 그런데 기존 코드가 너무 지저분해서 고치기 힘들다.

  1. (Step 1) 코드를 깨끗하게 정리한다. (커밋: refactor: 검색 필터 확장성을 위한 인터페이스 추출)

  2. (Step 2) 새로운 필터를 추가한다. (커밋: feat: 날짜 범위 검색 필터 추가)

이렇게 분리하면, 나중에 검색 필터 기능에 버그가 생겨도 리팩토링한 부분은 안전하게 유지할 수 있다.

Example 2: Small Fixes

기능 개발 중에 오타를 발견했다.

  1. 현재 하던 작업을 잠시 멈춘다(또는 git stash).

  2. 오타만 고치고 커밋한다. (커밋: docs: README 오타 수정)

  3. 다시 하던 작업으로 돌아간다.

작은 것들을 즉시 치워버리면 주 작업의 커밋이 깨끗해진다.

Common Pitfalls

"I forgot to commit!" (커밋하는 걸 깜빡했어요)

정신없이 코딩하다 보니 어느새 2시간이 지났고 10개의 파일을 고쳤다.

"Small commits are noisy" (커밋이 너무 많으면 시끄러워요)

커밋 로그가 길어지는 것을 두려워하지 마라.

Connection to Other Patterns

Signs of Success

The Ultimate Insight

커밋은 당신의 코드를 저장하는 도구일 뿐만 아니라, 동료(그리고 미래의 당신)와 대화하는 수단이다.

원자적 커밋을 하는 습관은 당신의 사고를 더 정교하게 만들고, 팀 전체의 개발 속도를 높여준다. 기록을 깨끗하게 유지하라. 그것이 프로의 책임감이다.


CategoryPatternLanguage CategoryProgramming CategoryGit CategoryAgile