JavaScript, 30년 만에 새로운 시간 관리 API 'Temporal' 등장!

by DD
2개월 전
조회수 14

JavaScript의 Date 객체는 1995년 Java의 Date를 포팅(Porting)한 이후, 불변성(Mutability), 월 연산의 문제, 모호한 파싱(Ambiguous Parsing) 등의 문제점을 안고 있었음.

Temporal API는 이러한 문제점을 해결하기 위해 다양한 시간 관련 타입(DateTime Types), 불변성(Immutability), 타임존(TimeZone) 및 캘린더(Calendar) 지원을 제공하며, 2026년 ES2026에 정식 포함될 예정임.

Moment.js와 같은 라이브러리가 Date의 단점을 보완했지만, 번들 사이즈 증가와 유지보수 문제 발생. Temporal API는 이러한 문제점을 해결하고, 표준 API(Standard API)로 자리매김할 것으로 기대됨.

커뮤니티에서는 Temporal API의 도입에 대해 긍정적인 반응을 보이며, Date 객체의 문제점을 해결하고 개발 생산성 향상(Development Productivity Improvement)에 기여할 것으로 기대함.

Date 객체의 문제점과 Temporal API의 등장 배경

1995년 Java의 Date 코드를 포팅(Porting)하여 탄생한 JavaScript의 Date 객체는 불변성(Mutability) 부재, 월 연산의 문제, 그리고 모호한 파싱(Ambiguous Parsing) 등의 문제점을 안고 있었다. 이러한 문제점은 개발자들이 시간 관련 로직(Time-related Logic)을 구현하는 데 어려움을 겪게 했으며, Moment.js와 같은 서드파티 라이브러리의 광범위한 사용을 야기했다. Temporal API는 이러한 Date 객체의 근본적인 문제점을 해결하기 위해 설계되었다.

Temporal API의 주요 특징 및 기능

Temporal API는 다양한 시간 관련 타입(DateTime Types), 불변성(Immutability), 타임존(TimeZone) 및 캘린더(Calendar) 지원을 제공한다. 특히, ZonedDateTime은 Date의 개념을 대체하며, 정확한 시점, 명시적인 타임존, 캘린더, 그리고 일광 절약 시간제(Daylight Saving Time)를 지원한다. Instant는 나노초(Nanoseconds) 단위의 정확한 시간을 표현하며, PlainDate, PlainTime, PlainDateTime 등의 타입은 벽시계 시간(Wall Time)을 나타내어 개발자가 필요에 따라 적절한 타입을 선택할 수 있도록 돕는다.

Temporal API 구현의 기술적 도전 과제

Temporal API는 JavaScript 역사상 가장 큰 규모의 변경 사항을 포함하는 제안으로, 구현 과정에서 다양한 기술적 난관에 직면했다. ECMA-402(The Internationalization spec)보다 큰 스펙(Spec), 잦은 스펙 변경(Spec Volatility), 그리고 브라우저의 성능 요구 사항(Performance Requirements) 등이 주요 도전 과제였다. 이러한 어려움 속에서도, temporal_rs라는 공유 라이브러리를 통해 여러 엔진 간의 협업을 이끌어내어, 일관성 있는 구현과 개발 비용 절감이라는 성과를 달성했다.

Temporal API의 미래와 웹 생태계 통합

Temporal API는 ES2026에 포함될 예정이며, 웹 생태계와의 통합을 위한 추가적인 작업이 진행 중이다. 특히, Date Picker와의 통합, DOMHighResTimeStamp와의 호환성 확보 등이 중요한 과제로 남아 있다. Temporal API는 Date 객체의 문제점을 해결하고, 개발 생산성 향상(Development Productivity Improvement)에 기여할 뿐만 아니라, 웹 생태계의 시간 관리(Time Management) 방식을 혁신할 것으로 기대된다.

Temporal: The 9-Year Journey to Fix Time in JavaScript

댓글 0

첫 번째 댓글을 남겨보세요!