빌드 전에 version.json 만든다고요? npm version 한 줄이면 돼요
- •
“빌드 전에 version.json 만든다고요?
npm version
한 줄이면 돼요”
“아직도 블로그 버전을 하드코딩하니?” 에서 이어지는 글입니다
지난 글에서 public/version.json
을 빌드 전에 자동으로 생성해, 현재 배포된 버전 정보를 명시하는 방법을 소개했습니다.
플랫폼 의존성 없이, 클라우드 네이티브하게, 누구나 쉽게 쓸 수 있는 자동화된 방식이라 자부했습니다.
하지만 한가지 중요한 문제를 간과했습니다.
version.json
이 빌드 이전에 생성된 파일이기 때문에 결과물(artifact)의 일부로 간주되지 않고, Git 히스토리에도 남지 않는다는 사실입니다.
커밋에도 없고, 태그 기준으로도 추적이 안되니, 배포 버전의 근거를 잃게 되는 셈입니다.
라이프사이클 관점에서 보면, 아티펙트와 분리된 외부 리소스처럼 동작하기 때문에 추적성과 일관성 면에서 큰 리스크가 됩니다.
새로운 방안 1. 응, commit 에 남기면 그만이야~
그래서 새로운 방법을 모색해봤습니다.
(역시 엔지니어링의 핵심은 엔지니어의 창의성!)
npm version 을 통해서 Git tag 를 남길 수 있기때문에, tag 를 남긴 후, Git hook 기능을 활용하여 version.json
파일을 commit 에 추가하는 워크플로우를 생각해봤습니다.
하지만, tag 관련한 Hook 을 발생시키는 pre-tag, post-tag 같은 기능은 존재하지 않았습니다. ㅠㅠ
워크플로우는 맘에 들어서 Git hook 말고, 다른 방법을 모색해봤습니다.
새로운 방안 2. npm version 만으로 해결할 수 있어. 오히려 좋아~
npm version 에도 hook 과 같은 기능을 사용할 수 있다는 사실을 발견했습니다.
위 문서를 살펴보면 다음과 같은 내용을 발견할 수 있습니다.
오 pre-tag 와 같은 아이디어입니다. 처음에 구상한 워크플로우 아이디어를 그대로 사용할 수 있습니다.
이제 본격적으로 순차적으로 설명해보겠습니다.
npm version 한줄로 끝나는 버전 관리
먼저, 이번에 구성한 전체 흐름을 간단히 정리해보면 아래와 같습니다
// package.json
{
"scripts": {
"preversion": "echo \"Running preversion script ${npm_package_version}\"",
"version": "echo \"Running version script ${npm_package_version}\" && npm run generate-version && git add public/version.json",
"postversion": "echo \"Running postversion script ${npm_package_version}\"",
"generate-version": "node scripts/generate-version.js"
}
}
npm version patch -m "Release v1.0.3"
이 명령어 하나로 다음 작업이 순차적으로 실행됩니다:
- 1
preversion: 필요하면 테스트나 체크 등을 사전에 수행
- 2
version:
generate-version.js
를 실행해public/version.json
생성- •
생성된 파일을
git add
로 명시적으로 커밋에 포함
- 3
package.json의
version
이 업데이트
- 4
Git commit + Git tag 자동 생성
- 5
postversion: 커밋 푸시 등 후처리 (선택 사항)
// 실행 결과
$ npm version patch --force
npm WARN using --force Recommended protections disabled.
npm WARN version Git working directory not clean, proceeding forcefully.
> preversion
> echo "Running preversion script ${npm_package_version}"
Running preversion script 1.0.1
> version
> echo "Running version script ${npm_package_version}" && npm run generate-version && git add public/version.json
Running version script 1.0.2
npm WARN using --force Recommended protections disabled.
> generate-version
> node scripts/generate-version.js
> postversion
> echo "Running postversion script ${npm_package_version}"
Running postversion script 1.0.2
v1.0.2
/public/version.json
은 제거했습니다.
정상적으로 동작하는 것을 확인할 수 있습니다.
요약: 이제 version.json 도 Git 과 함께 관리하세요.
처음엔 단순히 version.json
을 자동으로 생성하면 충분하다고 생각했습니다.
하지만 Git 히스토리 밖에 존재하는 파일은, 버전 관리의 맥락을 잃기 쉽다는 것을 깨달았고,
이를 해결하기 위해 npm version
을 활용한 워크플로우를 구성했습니다.
이 방식의 장점은 분명합니다:
- •
✅ 버전 업데이트, 커밋, 태그, 파일 생성까지 한 줄로 자동화
- •
✅ 휴먼 에러 최소화 → 배포 안정성 향상
- •
✅ 라이프사이클 안에서 버전 정보를 관리 → 추적 가능성 향상
npm version
은 단순한 버전 bump 명령어가 아니라,
버전 관리 전체를 자동화할 수 있는 powerful한 툴입니다.
이제 version.json도 아티팩트의 일부로, Git 히스토리 속에 살아 있게 해주세요.
🙋♂️ 당신은 어떻게 버전 관리를 자동화하고 있나요?
- •
혹시 여전히 수동으로 버전을 입력하고 있진 않나요?
- •
혹은 CI/CD에서만 관리하고, Git 기록은 놓치고 있진 않나요?
여러분의 워크플로우도 궁금합니다.
다른 아이디어나 개선 팁이 있다면 댓글이나 피드백으로 알려주세요!