# JavaScript Temporal이 옵니다

> Clean Markdown view of GeekNews topic #18987. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18987](https://news.hada.io/topic?id=18987)
- GeekNews Markdown: [https://news.hada.io/topic/18987.md](https://news.hada.io/topic/18987.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-31T09:37:17+09:00
- Updated: 2025-01-31T09:37:17+09:00
- Original source: [developer.mozilla.org](https://developer.mozilla.org/en-US/blog/javascript-temporal-is-coming/)
- Points: 2
- Comments: 1

## Topic Body

- # JavaScript Temporal 릴리즈 시작  
  
  - 새로운 JavaScript Temporal 객체의 구현이 브라우저의 실험적 릴리스에 포함되기 시작함. 이는 웹 개발자들에게 큰 소식이며, JavaScript에서 날짜와 시간을 다루는 것이 크게 간소화되고 현대화될 것임.  
  - 일정 관리, 국제화, 시간 민감 데이터에 의존하는 애플리케이션은 내장 기능을 사용하여 효율적이고 정확하며 일관된 날짜, 시간, 기간, 캘린더를 사용할 수 있음.  
  - 아직 안정적인 크로스 브라우저 지원까지는 멀었으며, 구현이 발전함에 따라 변경이 있을 수 있지만, 현재의 Temporal을 살펴보고 그 이유와 해결하는 문제를 이해할 수 있음.  
  - MDN에 이번 주에 추가된 270페이지 이상의 Temporal 문서가 있으며, 자세한 설명과 예제가 포함되어 있음.  
  
- # JavaScript Temporal이란?  
  
  - Temporal을 이해하기 위해 JavaScript의 `Date` 객체를 살펴볼 수 있음. JavaScript가 1995년에 만들어졌을 때, `Date` 객체는 Java의 초기 결함 있는 `java.util.Date` 구현에서 복사됨.  
  - Java는 1997년에 이 구현을 교체했지만, JavaScript는 거의 30년 동안 동일한 API에 갇혀 있음.  
  - JavaScript의 `Date` 객체의 주요 문제는 사용자의 로컬 시간과 UTC만 지원하며, 시간대 지원이 없다는 것임. 또한, 파싱 동작이 매우 신뢰할 수 없고, `Date` 자체가 변경 가능하여 추적하기 어려운 버그를 유발할 수 있음.  
  - 이러한 모든 문제로 인해 JavaScript에서 날짜와 시간을 다루는 것이 복잡하고 버그가 발생하기 쉬움. 대부분의 개발자는 Moment.js 및 date-fns와 같은 라이브러리에 의존하여 애플리케이션에서 날짜와 시간을 더 잘 처리함.  
  - Temporal은 `Date` 객체를 완전히 대체하도록 설계되어 날짜 및 시간 관리를 신뢰할 수 있고 예측 가능하게 만듦. Temporal은 시간대 및 캘린더 표현을 지원하고, 변환, 비교 및 계산, 포맷팅 등을 위한 많은 내장 메서드를 추가함.  
  
- # 핵심 개념  
  
  - Temporal에서의 핵심 개념은 인스턴트(역사의 고유한 지점), 벽시계 시간(지역 시간), 기간임. API는 이러한 개념을 처리하기 위해 다음과 같은 구조를 가짐:  
    - **기간**: `Temporal.Duration` 두 시간 지점 간의 차이  
    - **시간 지점**:  
      - **고유한 시간 지점**:  
        - 타임스탬프로서: `Temporal.Instant`  
        - 시간대가 있는 날짜-시간: `Temporal.ZonedDateTime`  
      - **시간대에 무관한 날짜/시간 ("Plain")**:  
        - 전체 날짜 및 시간: `Temporal.PlainDateTime`  
        - 날짜만: `Temporal.PlainDate`  
        - 연도 및 월: `Temporal.PlainYearMonth`  
        - 월 및 일: `Temporal.PlainMonthDay`  
        - 시간만: `Temporal.PlainTime`  
    - **현재**: 다양한 클래스 인스턴스 또는 특정 형식으로 현재 시간을 얻기 위해 `Temporal.now` 사용  
  
- # Temporal 예제  
  
  - Temporal의 가장 기본적인 사용법 중 일부는 ISO 문자열로 현재 날짜와 시간을 얻는 것임. 이제 많은 메서드에서 시간대를 제공할 수 있으며, 이는 복잡한 계산을 스스로 수행할 필요가 없게 함.  
  - 다양한 캘린더와 작업하는 것도 간소화되어, 그레고리력 외의 캘린더 시스템(예: 히브리어, 중국어, 이슬람)에서 날짜를 생성할 수 있음.  
  - Unix 타임스탬프와 작업하는 것은 많은 시스템(API, 데이터베이스)에서 시간을 나타내기 위해 형식을 사용하기 때문에 매우 일반적인 사용 사례임.  
  - `compare()` 메서드는 기간을 우아하고 효율적으로 정렬할 수 있게 함.  
  
- # Temporal 시도 및 브라우저 지원  
  
  - 지원은 실험적 브라우저 릴리스에 천천히 포함되기 시작했으며, Firefox가 현재 가장 성숙한 구현을 가지고 있음.  
  - Firefox에서는 Temporal이 `javascript.options.experimental.temporal` 환경 설정 뒤에 있는 Nightly 버전에 내장되고 있음.  
  - 실험적 구현이 도입되면서, Temporal을 시도하고 JavaScript에서 날짜와 시간을 처리하는 현대적인 접근 방식을 익힐 좋은 시기임.  
  
- # 감사의 말  
  
  - Eric Meyer에게 주제에 대한 작업에 감사함. Eric이 mdn/content의 포크에서 브라우저 호환성 데이터를 문서화하고 문서를 구성한 지 약 4년이 지남.  
  - Joshua Chen이 Eric으로부터 바통을 이어받아 MDN 문서에 대한 풀 리퀘스트를 준비함.  
  - André Bargull이 Firefox Temporal 구현에 대한 작업에 감사함.

## Comments



### Comment 33972

- Author: neo
- Created: 2025-01-31T09:37:18+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42876840) 
- Temporal은 기존 Date() API의 문제를 해결하는 데 유용함. Rust의 chrono와 Java의 Joda Time과 같은 고품질 시간 라이브러리에서 영감을 받아 편리한 API를 제공함
  - 시간은 복잡하며, Temporal은 이를 나이브 시간, 인스턴트, 존드 시간으로 구분하여 처리함
  - 타임스탬프에 하루를 더하는 작업을 할 때, 특정 시간대에 로컬인지 결정해야 함. 그렇지 않으면 DST나 시간대 변경 시 버그가 발생할 수 있음
  - "고정 오프셋" 타임스탬프와 특정 시간대의 타임스탬프 간의 직렬화 문제도 해결함

- Temporal.ZonedDateTime.prototype.withTimeZone()를 사용하여 시간대를 변환할 수 있음
  - 시간대 변환과 지속 시간 처리는 라이브러리가 처리해야 할 중요한 기능이며, Temporal이 이를 처리함
  - 그러나 Temporal.Duration은 사용자 정의 `format` 함수를 제공하지 않음

- Temporal 제안은 좋지만, 비교 시 참조 동등성을 사용하는 점이 아쉬움
  - 이는 객체를 Map 키로 사용하거나 Set에 수집하는 기능을 제거함

- TC39에서 많은 기능이 개발 중이며, Temporal이 빨리 출시되기를 바람
  - 주요 브라우저가 새로운 기능을 지원하려면 개발 노력이 필요함

- Temporal의 시간대 데이터 업데이트 방식에 대한 궁금증이 있음
  - 사용자가 브라우저를 업데이트하지 않으면 잘못된 시간을 볼 수 있음

- 시간대 변경 시 이벤트를 추가해야 한다고 제안함
  - 많은 사람들이 매일 시간대를 이동함

- Temporal이라는 이름이 일반적인 시간 객체와의 충돌을 피하기 위해 사용되었지만, 처음에는 쓰레기 수집 제어로 오해할 수 있음

- PHP의 Carbon 클래스는 DateTime에서 상속받아 가변 타임스탬프 작업의 문제를 설명함
  - CarbonImmutable을 사용하여 항상 새로운 인스턴스를 반환하는 것이 좋음
  - Laravel에서 CarbonImmutable과 Carbon을 별칭으로 가져오는 방법을 제안함

- JavaScript Temporal과 관련된 다양한 기사와 논의가 있음
