JavaScript의 Date API는 1995년 Java의 Date를 포팅(Porting)한 것으로, 불변성(Mutability), 월 연산의 불일치(Inconsistent Month Arithmetic), 모호한 파싱(Ambiguous Parsing) 등의 문제점을 안고 있었음.
Moment.js 등 라이브러리가 등장했지만, 번들 사이즈 증가 및 로케일(Locale) 데이터 관리의 어려움이 있었음. Temporal은 이러한 문제점을 해결하기 위해 제안됨.
Temporal은 다양한 시간 관련 타입을 제공하며, 불변성(Immutability), 타임존(Time Zone) 및 캘린더(Calendar) 지원을 통해 Date API의 문제점을 개선함.
9년간의 TC39 표준화 과정을 거쳐, 여러 브라우저 및 런타임에서 지원되며, temporal_rs 라이브러리를 통해 엔진 간의 협업을 이끌어냄.
기존 Date API는 Java의 Date를 기반으로 설계되어, 불변성(Mutability) 부재로 인한 예기치 않은 오류 발생 가능성이 높았다. 또한, 월 연산(Month Arithmetic) 시 예상치 못한 결과가 나타나거나, 타임존(Time Zone) 처리의 모호성으로 인해 개발자들이 어려움을 겪었다. 이러한 문제점을 해결하기 위해, Temporal은 , , 그리고 을 제공하며 Date API의 대안으로 등장했다.
Temporal은 ZonedDateTime, Instant, PlainDate, PlainTime 등 다양한 시간 관련 타입을 제공하여 개발자가 필요에 따라 적절한 타입을 선택할 수 있도록 지원한다. 특히, ZonedDateTime은 Date의 개념을 대체하며, 명시적인 타임존(Explicit Time Zone)과 캘린더(Calendar) 정보를 포함하여 정확한 시간 계산을 가능하게 한다. 예를 들어, `const now = Temporal.Now.zonedDateTimeISO()`를 통해 현재 시간을 얻을 수 있으며, DST(Daylight Saving Time) 변환을 고려한 시간 연산도 지원한다.
Temporal은 TC39 표준화 과정(TC39 Staging Process)을 거쳐, 여러 브라우저 및 런타임에서 지원되고 있다. 특히, temporal_rs 라이브러리는 여러 엔진 간의 협업을 통해 개발되었으며, 코드 품질 향상 및 유지보수 용이성을 높였다. Google Internationalization team과 Boa의 협력을 통해 Rust 기반의 라이브러리가 개발되었으며, 이는 엔진 간의 중복된 노력(Duplicated Effort)을 줄이고, 일관성을 확보하는 데 기여했다.
Temporal은 Date Picker와 같은 기존 웹 API와의 통합을 통해 사용성을 더욱 향상시킬 예정이다. 또한, DOMHighResTimeStamp를 대체하여 Instant를 활용하는 등, 웹 생태계 전반에 걸쳐 Temporal의 활용 범위를 넓혀갈 계획이다. Temporal은 JavaScript 개발자들이 오랫동안 겪어온 시간 관리(Time Management)의 어려움을 해결하고, 보다 정확하고 효율적인 시간 관련 기능을 제공할 것으로 기대된다.