logo hsb.horse
← 스니펫 목록으로 돌아가기

Snippets

시간 기반 시맨틱 버전 생성

빌드 시각을 버전 번호로 자동 생성하는 TypeScript 함수. Chrome 확장 프로그램 등에서 버전 상한이 있는 경우에 유용함.

게시일: 수정일:

증분식 버저닝 대신 빌드나 배포 시각을 그대로 버전 번호로 사용하고 싶은 경우가 있다. 특히 Chrome 확장 프로그램 등은 버전의 최댓값이 65535로 제한되어 있으므로, 시각을 적절히 변환할 필요가 있다.

코드

type SemanticVersion = `${string}.${string}.${string}`;
function timeBasedSemanticVersion(): SemanticVersion {
const now = new Date();
const major = now.getFullYear();
// 상위 두 자리를 월, 하위 두 자리를 일로 사용
const minor = `${(now.getMonth() + 1) * 100 + now.getDate()}`;
const hh = `${now.getHours()}`;
const mm = `${now.getMinutes()}`.padStart(2, "0");
const s = `${now.getSeconds()}`.slice(-1);
const patch = `${hh}${mm}${s}`;
return `${major}.${minor}.${patch}`;
}

사용 예시

console.log(timeBasedSemanticVersion());
// 2026.0214.14305 (2026년 2월 14일 14시 30분 50초인 경우)

사양

  • major: 연도 (YYYY) - 예: 2026
  • minor: 월일 (MMDD) - 예: 0214. 최댓값 1231이므로 65535 제한 내에 있음
  • patch: 시분초의 하위 한 자리 (hhmms) - 예: 14305. 최댓값 23595이므로 제한 내에 있음

프리릴리스 태그나 빌드 메타데이터는 지원하지 않는다. 순수한 SemVer가 아니라, 시각을 읽기 쉽게 인코딩한 형식이다.

대체 접근법

이 방식의 문제는 같은 날의 여러 빌드에서 시각이 역전되면 버전이 낮아질 수 있다는 점이다. 더 엄격하게 관리하고 싶은 경우 다음을 고려한다:

  • git 커밋 해시의 축약형 (유일성은 높지만 시각 정보가 사라짐)
  • CI/CD의 빌드 번호 (연속성은 있지만 프로바이더 의존)
  • 일시 + 빌드 번호의 조합

시각 기반의 장점은 빌드 시각이 한눈에 보인다는 점이다. 디버깅이나 트러블슈팅에서 효과적이다.