AtomicCommit

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

The Story 1: The Giant Bundle vs. The Clean History (Programming)

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

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

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

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

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

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

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

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

The Story 2: The Laundry Day (Ordinary Life)

민수와 하나는 각자 집에서 밀린 빨래를 하고 있다.

민수의 빨래 (The Mixed Load): 민수는 빨래 바구니에 담긴 모든 옷을 세탁기에 한꺼번에 넣었다. 흰 수건, 검은색 청바지, 섬세한 실크 셔츠가 한데 뒤섞여 돌아갔다. 세탁이 끝난 후, 민수는 경악했다. 청바지에서 빠진 물이 흰 수건을 푸르게 물들였고, 실크 셔츠는 엉망으로 망가졌다. 무엇이 잘못되었는지 알았을 때는 이미 늦은 뒤였다.

하나의 빨래 (The Sorted Cycle): 하나는 빨래를 종류별로 나누어 세 번에 걸쳐 세탁기를 돌렸다.

  1. 흰 수건들만 모아서 고온 세탁.
  2. 색깔 있는 겉옷들만 모아서 표준 세탁.
  3. 섬세한 의류들만 모아서 울 코스 세탁.

하나는 각 세탁 주기가 끝날 때마다 상태를 확인하고 정리했다. 덕분에 옷감은 상하지 않았고, 나중에 옷을 찾아 입기도 훨씬 편했다. 작업을 의미 있는 단위로 나누어 처리하는 것이 결국 전체의 품질을 지키는 길임을 하나는 알고 있었다.

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

AtomicCommit (last edited 2025-12-30 08:59:58 by 정수)