커밋 메시지의 버전 표기가 세 시기에 걸쳐 바뀐 것을 정리한 그림
커밋 메시지의 버전 표기는 세 번 바뀌었다. 각 시기의 실제 메시지를 그대로 옮겼다.

이 저장소에는 커밋이 125개 있다. 메시지를 시간순으로 늘어놓으면 버전을 어떻게 붙였는지가 그대로 보인다. 세 번 바뀌었고, 지금은 26.8.3 처럼 날짜를 쓴다.

시기방식
2021-01semver 흉내0.0.1 · 1.1.5
2021-02 ~ 2025번호 없음My WebSite · gain
2026-03-07 ~연.월.일26.3.7 · 26.8.3.3

1기 — semver 를 흉내 냈다

2021년 1월 한 달 동안 버전 번호가 붙은 커밋이 38개 있다. 그런데 서로 다른 번호는 27개뿐이다. 11번은 앞에 쓴 번호를 다시 썼다는 뜻이다.

0.0.1 → 0.0.2 → 0.0.3 → 0.0.1 → 0.0.2 → 0.0.3 → 0.0.4 → 0.0.5 → 0.0.6
0.1.0 → 0.1.4 → 0.1.5 → 0.1.6 → 0.1.0 → 0.1.0 → 0.1.1 → 0.1.2
0.2.0 → 0.2.0 → 0.2.0 → 0.2.5 → 0.2.5 → 0.3.0 → 0.3.0
0.5.0 → 0.6.0 → 0.5.5 → 1.0.0 → 1.0.1
1.1.0 → 1.1.0 → 1.1.1 → 1.1.2 → 1.1.3 → 1.1.5 → 1.1.5 → 1.2.0 → 1.5.0

세 종류의 사고가 한꺼번에 보인다.

표기도 흔들린다. My Web - 1.1.0 · My Web-1.1.1(하이픈 앞뒤 공백이 없다) · My web - 1.1.5(w 가 소문자다) 가 같은 주 안에 섞여 있다.

왜 안 지켜졌나semver 는 "무엇이 호환되는가"에 답하는 규칙이다. 메이저를 올리면 쓰던 쪽이 깨진다는 뜻이고, 패치를 올리면 안 깨진다는 뜻이다. 그런데 혼자 만드는 정적 사이트에는 그 약속을 받을 상대가 없다. 올릴 근거가 없으니 기준이 "오늘은 좀 많이 고쳤으니까 0.5.0" 같은 감이 됐고, 감으로 붙인 번호는 다음에 같은 감이 안 든다.

2기 — 번호를 버렸다

2021년 2월부터 번호가 사라진다. 그 뒤 4년 동안 쌓인 커밋이 열 개다. 중복을 빼면 메시지는 이게 전부다.

My WebSite
my web site
My web site
gain

Create CNAME
Delete CNAME
Update CNAME

위 네 줄은 같은 말을 네 가지로 적은 것이다. 아래 세 줄은 GitHub 웹 편집기에서 파일을 만들거나 지울 때 자동으로 채워 주는 기본 메시지다. 즉 직접 쓴 메시지가 아니다.

번호를 버린 게 후퇴처럼 보이지만, 여기서 힌트가 하나 나온다. 이 시기 커밋을 다시 찾을 때 실제로 쓴 단서는 메시지가 아니라 날짜였다. 그리고 2025년 6월 커밋의 메시지가 25_06 이다. 처음으로 날짜가 버전 자리에 들어왔다.

3기 — 날짜를 쓴다

2026년 1월 재시작 직후에는 아직 과도기였다. 26.0.1 ~ 26.0.8 처럼 연도 뒤에 일련번호를 붙였고, 2월에는 26.2.5.2 · 26.2.6.1 ~ 26.2.6.7 처럼 자리가 네 개까지 늘어난다. 하루에 열 번 커밋하면서 번호가 감당이 안 된 것이다.

2026년 3월 7일부터 연.월.일 로 고정했다.

메시지
26.3.72026년 3월 7일
26.4.42026년 4월 4일
26.4.28.24월 28일의 두 번째 커밋
26.8.3.38월 3일의 세 번째 커밋

규칙은 두 줄이면 끝난다. 메시지는 그날 날짜다. 같은 날 또 커밋하면 뒤에 순번을 붙인다. 외울 것도, 판단할 것도 없다.

어긋난 두 건, 그리고 이 방식의 한계

규칙을 정한 뒤의 커밋 29개를 전부 검사해 봤다. 메시지의 날짜와 실제 커밋 날짜를 비교하는 것이다. 두 건이 어긋난다.

커밋일 2026-07-26   메시지 26.7.27
커밋일 2026-08-02   메시지 26.8.1

둘 다 자정 언저리에서 생긴 것이다. 자정 직전에 커밋하면서 다음 날 날짜로 적기도 했고, 반대로 자정을 넘겨 커밋하면서 작업한 날짜를 그대로 적기도 했다. 날짜는 하나인데 "작업한 날"과 "커밋이 찍힌 날"이 갈리는 구간이 있고, 거기서는 결국 사람이 판단하게 된다.

그래서 이 방식이 완벽한 건 아니다. 다만 어긋났다는 사실 자체가 드러난다는 게 다르다. 메시지가 날짜라서 커밋 메타데이터와 나란히 놓기만 하면 차이가 보이고, 보이면 이유를 설명할 수 있다. 1.4.21.4.3 으로 잘못 적었다면 대조할 바깥 사실이 없어서 어긋났는지조차 알 수 없다.

대조할 수 있는 이름좋은 식별자는 다른 곳에 이미 있는 사실과 맞춰 볼 수 있는 것이다. 날짜는 커밋 메타데이터에도 있고, 파일 이름에도 있고, 배포 로그에도 있다. 셋이 같아야 하고 다르면 하나가 틀렸거나 설명할 이유가 있다는 뜻이다. 자기 안에서만 의미가 있는 번호는 이 검사를 받을 기회조차 없다.

버전은 어떤 질문에 답해야 하나

묻고 싶은 것semver 로날짜로
이 배포가 언제 것인가모른다메시지가 곧 답
라이브가 최신인가번호를 어딘가와 대조오늘 날짜와 비교
어디까지 되돌릴까번호 순서만그날 무엇을 했는지와 함께
업그레이드해도 안 깨지나이게 semver 의 목적답 못 함

마지막 줄이 중요하다. 날짜 방식이 semver 보다 나은 게 아니다. 라이브러리를 배포한다면 semver 가 유일한 답이다. 쓰는 쪽이 "올려도 되나"를 판단해야 하고, 그 판단을 번호로 전달하는 게 semver 의 일이기 때문이다.

이 저장소는 그 상황이 아니다. 여기서 버전을 보고 실제로 하는 일은 하나뿐이다 — "지금 라이브에 올라간 게 언제 것인가." 배포가 반영됐는지 확인할 때도, 어디로 되돌릴지 고를 때도 이 질문 하나를 한다.

커밋 간격도 이 방식과 맞는다. 2026년 3월 7일부터 지금까지 커밋 29개, 간격 중앙값이 5일이다. 하루에 여러 번 몰아치던 1월·2월과 다르다. 닷새에 한 번씩 손대는 저장소에서 날짜는 충분히 촘촘한 식별자다.

정리

2021년에 번호를 안 지킨 걸 오래 게으름으로 기억하고 있었다. 로그를 다시 읽어 보니 그게 아니었다. 지킬 근거가 없는 규칙을 가져다 쓴 것이고, 근거가 없으면 규칙은 반드시 흐트러진다. 0.6.0 다음에 0.5.5 가 나온 건 실수가 아니라 그 규칙이 아무 역할도 안 하고 있었다는 증거다.

규칙을 고를 때널리 쓰인다고 가져오지 말고, 그 규칙이 답하는 질문이 내 질문과 같은지 먼저 본다. 다르면 안 지켜지고, 안 지켜지는 규칙은 없는 것보다 나쁘다. 없으면 없는 줄 알지만, 있는데 안 지켜지면 있는 줄 알고 믿게 된다.