AX 노트 · 회고

커밋 701개로 본 AI 코딩 1년: '완성'에서 '원인·검증'으로

AI 코딩 도입 직후 커밋 메시지는 길어졌지만 원인은 없었습니다. '완성'은 첫 38일에만 나왔고, 원인을 적은 fix는 1년 뒤에야 늘었습니다.

작성 SugarMount 회고와 숫자 읽는 시간 11분 최종 업데이트

"feat: ChatGPT와 완벽히 동일한 UI/UX 완성". 2025년 8월 9일 맞춤법 앱 저장소에 들어간 커밋 제목입니다. 이 저장소의 커밋 701개 중 326개에 AI 공동 작성 트레일러(Co-Authored-By 줄)가 있습니다. 제목에 '완성·완벽·완전'이 들어간 커밋 21개는 모두 2025년 8월 7일부터 9월 13일 사이에 있습니다. fix 커밋을 전부 손으로 읽어 보니 원인을 분명히 적은 것은 2025년 8~12월 29개 중 1개, 2026년 9월~10월 19일 73개 중 56개였습니다. AI가 쓴 비율로는 이 차이가 설명되지 않았습니다.

숫자는 맞춤법 앱 저장소의 git 기록(작성일 2020-12-16 ~ 2026-10-19)을 2026년 10월 23일에 다시 센 값입니다. 다른 저장소를 끌어오는 하위 모듈(submodule) 커밋 1개는 제외했고, 작성자 이름은 적지 않습니다.

목차 (9)
  1. 도입 전, 도입 직후, 1년 뒤의 커밋 메시지
  2. 트레일러 커밋 326개 중 261개가 최근 두 달에 있습니다
  3. 변화는 두 번, 1년 간격으로 일어났습니다
  4. 원인을 적지 않은 메시지는 사람 커밋도 비용을 남겼습니다
  5. 다른 방법과 버린 이유
  6. 이 숫자가 말하지 못하는 것
  7. 내 저장소에서 같은 비교를 하는 순서
  8. 다음에 확인할 것
  9. 자주 묻는 질문

도입 전, 도입 직후, 1년 뒤의 커밋 메시지

저장소는 2020년 12월부터 있었고, 트레일러는 2025년 8월 7일 커밋(02cbb15)부터 붙었습니다.

기간커밋병합 제외트레일러제목 완성어fix 중 원인(손 판정, 분명)fix 중 원인(단어 규칙)메시지 길이 중앙값
2020-12 ~ 2025-07288135000/50/526자
2025-08 ~ 121009057211/290/29233.5자
2026-01 ~ 082010802/71/7215.5자
2026-09 ~ 10-19293260261056/7333/73232자

도입 전후로 가장 크게 바뀐 것은 길이입니다. 도입 전 메시지는 중앙값 26자로 "issue fix", "이슈 수정" 같은 한 줄이 흔했고, 도입 직후 233.5자로 아홉 배가 됐습니다. 원인은 그때 따라오지 않았습니다.

fix 커밋 114개(제목이 fix로 시작, 병합 제외)는 전부 손으로 읽었습니다. 증상이 생긴 이유를 문장으로 적었으면 '분명', 이유를 짐작하게 하는 변경 내용이나 "~로 인한" 같은 명사만 있으면 '애매', 바꾼 것만 적었으면 '없음'으로 분류했습니다. 2025년 8~12월은 분명 1, 애매 6, 없음 22입니다. 2026년 9월 이후는 분명 56, 애매 11, 없음 6입니다. 2025년의 분명 1개(fb1c8b4)는 트레일러가 없는 커밋이었습니다.

단어 규칙(원인|때문이나 증상 어미 -던 것/문제/회귀/결함)은 누구나 다시 낼 수 있는 하한입니다. 2026년 9월 이후 규칙이 잡은 33개 중 30개는 손으로도 분명이었고 3개는 애매였습니다. 규칙 밖 40개에서 분명 26개가 더 나왔습니다. 제목 완성어는 제목에 완성|완벽|완전이 있는 커밋입니다.

막대그래프: 제목에 완성·완벽·완전이 들어간 커밋은 2025년 8~12월 21개에서 2026년 9~10월 0개가 됐고, 원인을 분명히 적은 fix 커밋은 29개 중 1개에서 73개 중 56개가 됐다.
같은 저장소에서 '완성'은 21개에서 0개로, 원인을 분명히 적은 fix는 1개에서 56개로 바뀌었습니다.

2025년 9월 10일 커밋(d605c37)의 제목은 "test: 유닛 테스트 100% 통과 및 코드 커버리지 완성"입니다. 2026년 9월 13일 커밋(289ed55)은 증상, 원인, 확인한 방법을 따로 적었습니다.

fix(nav): '한 번 더 누르면 종료'가 동작하지 않던 회귀 수정
…
원인은 종료 확인 로직이 deprecated 된 Activity.onBackPressed() 오버라이드 안에 있었던 것이다.
…
확인: onBackPressed 오버라이드 0건, 직접 호출 0건, KEYCODE_BACK 직접 처리 0건.
검증: assembleDebug 통과, 단위 테스트 174개 전부 통과.

'확인' 줄은 같은 결함이 다른 경로에 남았는지 검색한 결과를 숫자로 적은 것입니다.

트레일러 커밋 326개 중 261개가 최근 두 달에 있습니다

트레일러가 붙은 커밋은 2025년 8월 8개, 9월 31개였다가 2026년 9월 157개, 10월 19일까지 104개로 늘었습니다. 2026년 1~8월에는 커밋 자체가 20개뿐이었습니다.

막대그래프: 트레일러가 붙은 커밋은 2025년 8월 8개, 9월 31개였고 2026년 9월 157개, 10월 19일까지 104개였다.
트레일러 커밋 326개 중 261개가 2026년 9월과 10월에 몰려 있습니다.

제목 완성어 21개는 모두 모델 이름 없이 'Claude'만 적힌 트레일러 커밋입니다. 2026년 9월 이후 트레일러는 Opus 5, Fable 5.1, Opus 5.5로, 앞 기간에 한 번도 없던 이름입니다.

변화는 두 번, 1년 간격으로 일어났습니다

첫 변화는 2025년 9월 13일 이후 '완성'이 사라진 것입니다. 그 뒤 트레일러 커밋 287개에 완성어 제목은 하나도 없습니다. 처음에는 지침 파일 탓이라고 봤습니다. Claude Code는 세션마다 저장소의 CLAUDE.md를 읽는데, 이 파일은 2025년 9월 5일 1,182줄까지 불었고 '완성·완벽·완전'이 73번 들어 있었습니다. "완벽히 동일한" 커밋(b7eec61) 본문에도 "progress.md, CLAUDE.md: 완성도 업데이트"가 있습니다. 하지만 2025년 12월에도 이 파일에는 완성어가 46개 남아 있었고, 9월 14일부터 12월까지 트레일러 커밋 18개의 제목에는 한 번도 나오지 않았습니다. 지침 파일이 말투에 영향을 줬을 수는 있어도, 파일만으로는 설명되지 않습니다. 9월 13일 뒤에 왜 사라졌는지는 기록에 없습니다.

둘째 변화는 원인을 적은 fix로, 2026년 2~4월 fix 7개 중 2개가 분명했고 9월 이후 73개 중 56개가 됐습니다. 여기에도 처음 세운 가설 세 개가 있었습니다.

남는 후보는 모델 세대와 운영자의 작업 방식입니다. 운영자가 "검증 전에 완료라고 말하지 않는다" 같은 공통 규칙을 언제 넣었는지는 이 저장소 기록으로 알 수 없어서, 둘을 가를 방법이 없습니다.

원인을 적지 않은 메시지는 사람 커밋도 비용을 남겼습니다

  1. 2025-08-09 15:32: AI 공동 작성 커밋 5f082f8 "업데이트 알림 문제 해결"이 앱 버전 비교를 문자열에서 정수로 고쳤습니다. 같은 파일 아래쪽의 콘텐츠 버전 비교는 문자열 그대로 남았습니다.
  2. 같은 날 17:51: 트레일러 없는 커밋 71c31ae가 정수 비교를 문자열 비교로 되돌렸습니다. 메시지는 "fix: 수정" 일곱 글자뿐이고, 왜 되돌렸는지는 어디에도 적혀 있지 않습니다.
  3. 2026-09-25: 커밋 7b997f8이 원인을 적고 나서야 고쳐졌습니다. 문자열로 비교하면 "6.7"이 "6.11"보다 크다고 나와서, 6.10부터 올린 콘텐츠 갱신이 기존 사용자에게 가지 않았습니다. 같은 커밋이 71c31ae가 되돌린 앱 버전 비교도 숫자 비교로 고쳤습니다.

5f082f8부터 세어도 문자열 비교는 1년 1개월 넘게 남아 있었습니다. 5f082f8에는 완성어가 없고, 71c31ae는 사람이 쓴 커밋입니다.

AI가 틀리고 사람이 고친 자리도 있습니다. 2025년 9월 7일 21시 16분 AI 커밋 뒤 6분 만에 사람이 "fix: 기존 소스 잘못 수정한 거 복구 (claude code가... ㅜ)"를 커밋했습니다(f43dada, 45개 파일, +596/−953). "100% 코드 커버리지"라고 적은 d605c37도 사정이 비슷합니다. 저장소 전체 기록에 커버리지 도구(JaCoCo, Kover) 설정이 한 번도 없습니다.

2026년의 "100%"는 뜻이 다릅니다. 9월 13일 커밋 e9cd771은 "네이버 검출 오류 26개 중 수정 전 16개 색칠 → 수정 후 26개(100%)"라고 분모를 붙였습니다. R8 keep 규칙 하나를 지운 커밋도 원인과 전후 수치를 함께 적었습니다(Play Console DEX 최적화와 keep 규칙).

에이전트가 커밋에 쓴 '완성'과 '100%'는 진행 신호로 세지 마십시오. 원인 한 줄과 확인한 방법 한 줄이 없는 fix 커밋은 끝난 일로 보지 않습니다.

다른 방법과 버린 이유

이 숫자가 말하지 못하는 것

처음에는 "원인을 적기 시작한 뒤 회귀가 줄었다"고 쓰려 했지만, 측정할 자료가 없어 제외했습니다.

(처음 규칙에는 '100%·최종·달성'도 있었는데, 10월 제목 8개가 걸렸습니다. 6개가 "production 100%" 같은 배포 비율이라 세 단어를 제외했고, 2025년 쪽 21개는 그대로였습니다.)

내 저장소에서 같은 비교를 하는 순서

아래 명령을 날짜만 바꿔 가며 2026년 10월 23일 이 저장소에서 돌려 21, 0, 0/29, 33/73을 그대로 다시 냈습니다. 월별·모델 명령에는 앞에서 제외한 하위 모듈 커밋이 들어가 2026년 4월과 Opus 4.6이 1씩 많습니다. --grep='^fix'는 본문 줄도 잡지만, 이 저장소에서는 제목 기준과 결과가 같았습니다.

  1. 기간을 먼저 자릅니다: AI 도구를 쓰기 전과 후, 그리고 긴 공백을 기준으로 자릅니다.
  2. 규칙은 돌리기 전에 정하고, 고치면 이유를 기록합니다: 숫자를 본 뒤 말없이 단어를 바꾸면 원하는 결론이 나옵니다.
  3. fix 커밋을 손으로 읽습니다: 이 글은 fix 114개를 전부 읽어 분명·애매·없음으로 분류했습니다. 더 많다면 기간마다 20개 이상을 무작위로 뽑습니다.
# 월별 트레일러 커밋 수(병합 포함)
git log --since=2025-08-01 --until=2026-10-20 \
  --format='%ad %(trailers:key=Co-authored-by,valueonly,separator=;)' \
  --date=format:%Y-%m | awk 'NF>1{print $1}' | sort | uniq -c

# 제목에 완성어가 있는 커밋 수
git log --no-merges --since=2025-08-01 --until=2026-01-01 --format=%s \
  | grep -cE '완성|완벽|완전'

# fix 커밋 중 원인을 적은 것
n=0; y=0
for h in $(git log --no-merges --since=2026-09-01 --until=2026-10-20 --format=%h --grep='^fix'); do
  n=$((n+1))
  git log -1 --format=%B "$h" | grep -qE '원인|때문|던 (것|문제|회귀|결함)|던$' && y=$((y+1))
done; echo "$y/$n"

# 트레일러에 적힌 모델 이름별 수
git log --until=2026-10-20 --format='%(trailers:key=Co-authored-by,valueonly)' \
  | sed 's/ <.*//' | grep . | sort | uniq -c | sort -nr

다음에 확인할 것

원인을 적은 fix와 적지 않은 fix 사이에, 같은 파일을 30일 안에 다시 고친 비율이 다른지 셀 계획입니다(2026년 11월 측정 예정). 이 숫자가 나와야 "메시지가 바뀌자 결과도 바뀌었다"를 말할 수 있습니다. 앱 자체는 한글 띄어쓰기 페이지에 있습니다.

자주 묻는 질문

Co-Authored-By 트레일러 수로 AI 사용량을 알 수 있나요?

대략적인 흐름만 알 수 있습니다. 트레일러는 커밋을 에이전트와 함께 만들었다는 표시라서 코드 줄 수의 비율이 아니고, 트레일러 없이 AI를 쓴 커밋은 빠집니다.

커밋 메시지 규칙을 CLAUDE.md나 AGENTS.md에 적으면 바로 바뀌나요?

이 저장소 기록으로는 확인하지 못했습니다. 지침 파일을 다시 쓰기 전에 말투가 이미 바뀌어 있었기 때문입니다. 규칙을 적었다면 위 명령으로 전후를 세어 보십시오. 지침 파일에 무엇을 적을지는 AGENTS.md 작성법: 틀리기 쉬운 규칙만 적기에 정리했습니다.

이 글은 SugarMount가 직접 측정한 값으로 쓰고, 초안 작성에 AI 코딩 에이전트를 썼습니다.

회고와 숫자 글 전체 보기 · AX 노트 전체 보기