Trawling

Ubuntu 26.04 전환 뒤 일본 연호 날짜 테스트가 예외로 실패한 이유

Zenn 사용자 xin9le는 `ubuntu-latest`가 Ubuntu 26.04로 바뀐 뒤 일본 연호 날짜 테스트가 `ToString`의 예외로 중단된 경험을 공개했습니다. 원인으로 지목한 것은 CLDR 수정이 반영된 ICU 데이터입니다. 메이지 시작일이 양력 1868년 10월 23일로 바뀌면서 9월 8일 입력이 일본 달력의 지원 범위 밖에 놓였습니다.

Zenn 사용자 xin9le는 ubuntu-latest를 쓰던 CI에서 Ubuntu 24.04일 때 통과한 C# 단위 테스트가 Ubuntu 26.04로 바뀐 뒤 실패했다고 공개했습니다. 테스트는 DateOnly(1868, 9, 8)을 JapaneseCalendar로 ggy年M月d日 형식에 맞춰 문자열로 만들고 明治元年9月8日과 비교합니다. Ubuntu 26.04에서는 ToString가 ArgumentOutOfRangeException을 던져 비교문에 도달하지 못했습니다.

이 형식은 날짜의 연호와 연호 기준 연도, 월, 일을 요청합니다. JapaneseCalendar는 날짜에 해당하는 연호를 찾아 형식화하는데, 1868년 9월 8일은 새 데이터가 정한 메이지 시작일보다 앞서 있어 연호를 찾는 과정에서 예외가 납니다.

xin9le가 원인으로 지목한 것은 로케일 데이터 변화입니다. 여러 언어와 지역의 데이터를 관리하는 CLDR의 이전 자료는 음력 날짜인 메이지 원년 9월 8일을 양력 날짜처럼 기록했습니다. xin9le는 이를 양력으로 환산한 메이지 시작일이 1868년 10월 23일이라고 설명했습니다. 이 수정 제안(CLDR-11375)은 2025년 5월 7일 채택됐습니다.

작성자는 수정된 데이터가 반영된 ICU가 Ubuntu 26.04에 포함되면서 문제가 나타났다고 설명합니다. 입력을 양력 10월 23일로 바꾸자 결과는 明治元年10月23日로 나왔습니다. Microsoft 문서에 따르면 .NET의 Unix 환경에서는 ICU가 문화권 처리에 쓰이며, ICU의 문화권 데이터는 대체로 CLDR에서 관리됩니다. 따라서 Ubuntu 이미지가 바뀌면 실행 도구뿐 아니라 날짜·언어 동작을 결정하는 데이터도 달라질 수 있습니다.

GitHub는 ubuntu-latest 러너를 Ubuntu 24.04에서 26.04로 2026년 10월 19일부터 11월 19일까지 단계적으로 전환한다고 공지했습니다. 11월 7일 현재 전환이 진행 중이며, 이전 이미지에 머물러야 하는 워크플로에는 ubuntu-24.04 레이블을 지정할 수 있습니다. ubuntu-latest는 특정 버전을 고정하는 레이블이 아니어서, 이 레이블을 쓰는 워크플로는 전환에 따라 실행 환경이 바뀝니다.

.NET 11 Preview 1에는 별도로 JapaneseCalendar.MinSupportedDateTime을 1868년 9월 8일에서 10월 23일로 바꾸는 수정도 들어갔습니다. Microsoft 호환성 문서는 새 최소 지원일보다 앞선 날짜를 일본 달력의 유효 범위에서 제외한다고 설명합니다. Ubuntu 사례에서는 .NET이 사용하는 ICU 데이터가 바뀌었고, .NET 11에서는 달력 자체의 최소 지원일이 바뀌었습니다. 두 변화 모두 메이지 시작일을 1868년 10월 23일로 반영합니다.

참고 자료

오류 제보