r/typescript 공유: RFC 9557 기반의 Zero Dependency TS 날짜 엔진 Chronera 소개
요약
Chronera는 TypeScript만을 사용하여 개발된, 런타임 의존성이 없는(Zero Runtime Dependencies) 타입 안전한 날짜 및 시간대 도구 키트입니다. RFC 9557 표준을 완벽하게 준수하며, 다문화 달력 지원과 국경 간 정산 휴일 처리 기능을 제공합니다. 성능 최적화와 Zod 스키마 통합으로 개발 편의성을 높였습니다.
핵심 포인트
- RFC 9557(IXDTF) 기반 시간대/달력 주석 파싱 완벽 지원
- 불교, 히즈라 등 다문화 달력을 1급으로 지원하여 범용성 확보
- 국경 간 정산 휴일 처리 및 사용자 정의 비근무일 재정의 가능
- TypeScript 전용 Zero Dependency 구조로 안정성과 타입 안전성 극대화
- ISO 파싱에서 네이티브 Date 대비 높은 성능 기록
여러분 안녕하세요! 👋
JavaScript에서 날짜를 다루는 것은 항상 악명이 높을 정도로 까다로웠습니다. TC39 Temporal은 흥미롭지만, 전체 엔진 사용 가능 시점은 아직 먼 미래입니다. 한편, 다문화 달력(불교, 히즈라, 태양 등)과 국경 간 정산 휴일 처리는 종종 무거운 Polyfill이나 불안정한 커스텀 수학을 필요로 합니다.
지난 몇 주 동안 저희 팀은 Chronera를 구축했습니다. 이는 TypeScript만을 사용하여 작성되었으며 런타임 의존성이 전혀 없는(Zero Runtime Dependencies) 불변하고 타입 안전한 날짜, 달력 및 시간대 도구 키트입니다.
주요 하이라이트:
- RFC 9557 (IXDTF) 준수: 새로운 IETF 표준에 따른 대괄호로 표시된 시간대 및 달력 주석(예: 2026-10-03T01:13:43+07:00[Asia/Bangkok][u-ca=buddhist])에 대한 완벽한 파서와 직렬화기입니다.
- Temporal 정렬: DST 모호성 처리(compatible, earlier, later, reject) 및 이중 모드 달력/클럭 산술을 지원하는 ZonedDateTime 구현체입니다.
- 다문화 달력: 불교, 히즈라(표 형식 및 천문학적), 일본 시대(Reiwa/Heisei), 페르시아, ROC, 인도 국립 달력을 1급으로 지원합니다.
- 국경 간 휴일 엔진: 다중 지역 정산 동시 처리(예: isBusinessDay(date, ["US", "SG"]))와 사용자 정의 기업 비근무일/보상일 재정의를 지원합니다.
- 빠른 경로 Zero 할당: ISO 파싱에서 초당 13.5M 연산, 즉시 인스턴스화에서 초당 22M 연산을 기록했습니다 (네이티브 Date보다 1.5배 ~ 1.6배 빠름).
- 에코시스템 준비 완료: 폼 유효성 검사 및 DTO를 위한 1급 Zod 스키마 헬퍼(@intech-software/chronera/zod)가 제공됩니다.
- 모듈식 내보내기: 서브패스 분할(./calendar, ./format, ./parse, ./holidays, ./scheduling, ./zod). parse 진입점은 단지 3.5 kB (Brotli)에 불과합니다.
간단한 예시:
import { chronera } from "@intech-software/chronera"; import { zChronera } from "@intech-software/chronera/zod";
// 플루언트 날짜 조작 const d = chronera("2026-10-03T01:13:43+07:00[Asia/Bangkok][u-ca=buddhist]") .addBusinessDays(3, ["TH", "SG"]);
...
여러분의 의견, 아키텍처 피드백, 그리고 기능 제안을 듣고 싶습니다!
GitHub: https://github.com/INTECH-Software-House/chronera-js
NPM: https://www.npmjs.com/package/@intech-software/chronera
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기