원문 제목: Temporal: The 9-Year Journey to Fix Time in JavaScript 원문 링크: https://bloomberg.github.io/js-blog/post/temporal/ 번역일: 2026-03-12 KST
Bloomberg는 자바스크립트 표준화 작업에 오래 참여해 왔고, 그 과정에서 Promise.allSettled 이후 가장 큰 작업 중 하나로 Temporal 제안을 밀어왔다. 글의 핵심은 기존 Date가 1995년의 제약 속에서 자바 스타일 구현을 급히 옮겨오며 만들어졌고, 오늘날의 복잡한 글로벌 서비스 요구를 감당하기에는 구조적으로 부족하다는 점이다.
기존 Date의 대표 문제로는 세 가지가 강조된다. 첫째, 가변 객체라서 헬퍼 함수가 원본 값을 쉽게 망가뜨린다. 둘째, 월 계산이 직관과 다르게 동작해 1월 31일에 한 달을 더하면 2월 말이 아니라 3월 초로 넘어가는 식의 버그를 만든다. 셋째, 모호한 문자열 파싱 때문에 브라우저별로 로컬 시간, UTC, 에러 처리 방식이 달라질 수 있다. 이런 문제는 회계, 예약, 금융, 협업 제품처럼 시간대와 캘린더가 중요한 앱에서 치명적이다.
Temporal은 이런 한계를 보완하기 위해 설계되었다. 하나의 Date 타입에 모든 의미를 우겨 넣지 않고, PlainDate, PlainDateTime, Instant, ZonedDateTime처럼 목적이 다른 타입을 분리한다. 또한 불변(immutable) 모델을 기본으로 하고, 타임존과 캘린더를 일급 개념으로 다룬다. 즉 “로컬 달력상의 날짜”, “절대 시점”, “타임존이 결합된 시각”을 코드 차원에서 구분하도록 만든다.
글은 기술 설명보다도 표준화 과정의 현실을 잘 보여준다. 브라우저 전반에 깔린 언어는 단일 회사가 밀어붙여 바꿀 수 없고, TC39의 단계적 합의, 다수 구현체 검증, 피드백 수렴이 필요하다. Temporal이 Stage 1에서 Stage 4로 가는 데 9년이 걸린 이유도 여기 있다.
- 신규 프로젝트에서 날짜/시간 도메인이 중요하다면
Date중심 유틸보다 Temporal 도입 전략을 미리 검토할 가치가 크다. - 특히 예약, 정산, 리포트, 다국가 서비스는
Instant/ZonedDateTime/PlainDate구분만으로도 버그를 크게 줄일 수 있다. - 기존 코드베이스는 즉시 전면 교체보다, 경계 계층부터 Temporal 또는 호환 폴리필을 도입하는 방식이 현실적이다.