툴팁 하나 제대로 만들려면 얼마나 많은 코드가 필요할까. z-index 전쟁, overflow: hidden 부모 요소의 함정, Esc 키 이벤트 핸들러, aria-expanded 상태 관리, 외부 클릭 감지 로직…. 작아 보이는 UI 하나가 실제 서비스에 들어가면 금세 수십 줄의 JavaScript 관례(convention)로 부풀어 오른다. 그리고 그 관례는 팀마다, 라이브러리마다 조금씩 달랐다. 브라우저는 그게 '툴팁'이라는 사실을 몰랐기 때문이다.
Popover API는 바로 그 지점에 개입한다. velog의 분석에 따르면, 이 API의 핵심 아이디어는 단순하다. popover 속성과 popovertarget만 선언하면, 브라우저가 버튼과 팝오버의 관계를 직접 이해한다. Esc 닫기, 외부 클릭 닫기, aria-expanded 상태 관리, 포커스 흐름—기존에 개발자가 일일이 구현하던 동작들을 브라우저가 기본값으로 처리한다. 특히 Popover 요소는 top layer에 올라가기 때문에 z-index나 overflow 충돌에서 구조적으로 자유롭다. Chrome 114+, Firefox 125+, Safari 17+ 기준 전 세계 지원율 약 88%—이미 프로덕션에 쓸 수 있는 수준이다.
물론 Popover API가 모든 걸 해결하지는 않는다. hover delay, hover intent, edge collision 같은 정밀한 포지셔닝은 여전히 Floating UI 같은 라이브러리의 영역이다. 하지만 그게 요점을 흐리지는 않는다. 진짜 변화는 코드 줄 수가 아니라 책임 소재다. '툴팁을 어떻게 동작시킬 것인가'가 JavaScript 관례에서 브라우저 표준으로 이동하고 있다. Tooltip, Menu, Teaching UI 같은 오버레이 패턴이 플랫폼 기능으로 흡수되기 시작한 것이다.
같은 흐름이 JavaScript 언어 레벨에서도 진행 중이다. 날짜와 시간 처리는 프론트엔드 개발자라면 누구나 한 번쯤 욕했던 영역이다. 1995년 Java의 Date 객체를 그대로 포팅한 Date는 30년 가까이 버그의 온상이었다—가변(mutable) 설계, 0-indexed 월 계산, 브라우저마다 다른 파싱 결과. 그래서 개발자들은 Moment.js를 썼고, 번들 크기가 늘었고, Moment.js는 유지보수 중단을 선언했다.
Temporal API는 그 30년의 기술 부채를 끊어내려는 시도다. GeekNews가 전한 Bloomberg 엔지니어링 블로그에 따르면, 2017년 TC39에 제안이 처음 제출된 이후 9년 만인 2025년, Temporal은 ECMAScript Stage 4에 도달했다. Bloomberg, Igalia, Microsoft, Google, Mozilla가 협력해 사양을 설계했고, Rust 기반 공용 구현체 temporal_rs를 통해 V8, Boa 등 여러 엔진이 코드를 공유한다. Firefox 139, Chrome/Edge 144, TypeScript 6.0 Beta에서 이미 지원이 시작됐다.
Temporal의 설계 철학은 명확하다. 불변(immutable), 명시적, 세분화. ZonedDateTime, Instant, PlainDate, PlainDateTime, Duration—타입이 나뉘어 있다는 것 자체가 설계 의도다. 런던 DST 전환 시 존재하지 않는 01:30을 자동으로 02:30으로 보정하고, 나노초 단위 정밀도를 지원하며, 히브리력 같은 비그레고리력 연산도 정확하게 처리한다. Hacker News 커뮤니티의 반응처럼, "새벽 3시에 DST 버그를 고치러 불려 나가는 것보단" 조금 장황한 API가 훨씬 낫다.
두 기술을 나란히 놓으면 하나의 테제가 보인다. 브라우저와 언어 표준이 개발자가 라이브러리로 때워왔던 복잡도를 직접 흡수하기 시작했다. Popover API는 오버레이 UI 패턴을 플랫폼 기능으로 격상시켰고, Temporal은 날짜/시간 처리의 책임을 생태계 레벨로 끌어올렸다. 두 경우 모두 '라이브러리로 우회하던 문제'가 '표준이 직접 정의하는 영역'으로 이동했다는 공통 구조를 가진다.
이 흐름이 프론트엔드 개발자에게 의미하는 바는 이중적이다. 한편으로는 반가운 변화다. 보일러플레이트가 줄고, 접근성과 일관성이 기본값으로 보장되며, 번들 크기 부담 없이 복잡한 UX를 구현할 수 있다. AI 도구로 빠르게 프로토타이핑하는 워크플로우에서 표준 기반 코드는 더 예측 가능하고, 더 안전하며, 더 리뷰하기 쉽다. 하지만 다른 한편으로는 책임의 재배치를 요구한다. 브라우저가 기본 동작을 처리해 주는 만큼, 개발자가 설계해야 할 경계는 더 명확해진다—언제 표준을 믿고, 언제 라이브러리로 보완할 것인가.
Temporal의 9년은 웹 표준화의 속도가 얼마나 느린지를 보여주는 동시에, 그 느림이 만들어낸 완성도를 증명한다. ECMAScript 역사상 가장 큰 사양 추가, 약 4,500개의 테스트 케이스, Firefox 구현 전체를 혼자 완성한 자원봉사자 André Bargull의 이야기—이 표준은 단순한 API 개선이 아니라 오픈 협업이 장기 기술 부채를 해결할 수 있다는 증거이기도 하다. Popover API 역시 마찬가지다. hint 타입 추가나 Anchor Positioning API와의 연동처럼, 표준은 아직 완성된 게 아니라 계속 진화 중이다.
앞으로의 방향은 꽤 선명하다. <input type="date">에서 Temporal 타입을 직접 지원하고, DOMHighResTimeStamp를 Temporal.Now.instant()로 대체하는 논의가 이미 진행 중이다. View Transitions, Scroll-Driven Animations, Popover API, Temporal—브라우저는 점점 더 많은 UI/UX 패턴을 플랫폼 수준에서 이해하려 한다. 개발자의 역할은 그 표준 위에서 무엇을 설계할 것인가로 이동하고 있다.