버전 관리의 딜레마: package.json을 버리고 로그를 택하다
Brewed on 2025년 12월 1일
“System Status: Operational… v0.0.1?”
개발자들의 비밀 공간인 Kitchen 페이지를 만들면서, 푸터(Footer)에 멋진 상태창을 하나 달았다. 초록색 불이 깜빡이고, 그 옆에는 현재 시스템 버전이 표시되는 디자인이었다.
처음에는 정석대로 package.json의 version 값을 가져와서 뿌려주었다.
그런데 한 가지 문제를 발견했다.
사이트는 계속 업데이트되는데, 버전은 여전히 v0.0.1이었다.
문제는 ‘귀찮음’이다
Node.js 환경에서 버전을 올리려면 보통 npm version patch 같은 명령어를 쓰거나, 파일을 열어서 숫자를 직접 고쳐야 한다.
하지만 글을 쓰고 디자인을 다듬느라 바쁜 와중에, 매번 package.json까지 챙기는 건 잊어버리기 쉬운 일이었다.
“버전을 올리는 것”과 “업데이트 내용을 기록하는 것”. 이 두 가지 행동이 분리되어 있다는 게 문제였다. 나는 이것을 하나로 합치고 싶었다.
발상의 전환: 이미 기록하고 있잖아?
가만히 생각해보니, 나는 이미 src/content/updates/ 폴더에 그 누구보다 꼼꼼하게 버전과 변경 내역을 기록하고 있었다. (v1.12.2 처럼!)
“그렇다면 굳이 package.json을 읽을 필요가 있을까? 그냥 업데이트 로그 중 가장 최신 파일의 숫자를 가져오면 되잖아?”
이것이 개발에서 말하는 SSOT (Single Source of Truth, 단일 진실 공급원) 원칙이다. 데이터는 한곳에만 존재해야 하고, 나머지는 그것을 참조해야 한다.
해결: Astro Content Collection 활용
나는 Kitchen Footer 컴포넌트의 로직을 수정했다.
package.json대신 Updates 컬렉션을 불러온다.- 날짜와 버전 순으로 정렬한다.
- 가장 위에 있는 녀석(최신)의 버전을 꺼낸다.
// src/components/KitchenFooter.astro
const allUpdates = await getCollection('updates');
// ... 정렬 로직 ...
const latestVersion = sortedUpdates[0].data.version;
결과: 글만 쓰면 시스템이 업데이트된다
이제 나는 숫자를 고치러 다닐 필요가 없다. 그저 평소처럼 “오늘 이런 기능을 추가했습니다”라고 업데이트 로그(md 파일)만 작성하면, Kitchen의 시스템 버전은 자동으로 최신화된다.
게으름은 때로 가장 논리적인 자동화를 만들어낸다.