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