적용 ·

고쳤다고 적힌 i18n 버그가 닷새 만에 다시 고쳐졌습니다 — Astro 7.3

한 줄 요지 — Astro 7.3 계열을 쓰신다면 올릴 자리는 7.3.0이 아니라 7.3.2입니다.

무슨 일인가

astro@7.3.0 이 9월 3일 나왔고, 같은 날 세 시간 뒤에 7.3.1이, 닷새 만에 7.3.2가 그 위에 얹혔습니다.

7.3.0이 minor로 올린 세 건은 빌드 산출물을 바꾸지 않습니다.

  • astro preview--ignore-lock 플래그가 생겼습니다(#17767). 프리뷰 서버를 다른 포트에 동시에 띄웁니다 — 용도로는 Playwright 같은 E2E 테스트 워크플로를 듭니다.
  • 나머지 둘은 로거 배관입니다(#17818). 커스텀 이미지 서비스 훅과 캐시 프로바이더의 onRequest() 컨텍스트가 런타임 로거를 인자로 받아, 콘솔에 곧바로 쓰는 대신 설정된 로그 레벨을 따릅니다.

빌드에 실제로 닿는 변화는 patch 목록 안에 있습니다.

  • experimental.incrementalBuild동시 렌더링이 들어왔습니다(#17795). 캐시를 살리려고 build.concurrency: 1 을 두던 프로젝트는 그 우회를 걷어낼 수 있고, @astrojs/cloudflare 빌드는 큰 프리렌더 페이지의 직렬화 부담이 줍니다.
  • 서버 아일랜드(정적 페이지 안에서 일부 영역만 서버 렌더) 안의 콘텐츠 컬렉션 항목에서 스타일·링크·스크립트가 빠지던 결함이 고쳐졌습니다(#17879).
  • 모듈이 여러 갈래로 흩어진 대량 페이지 사이트의 빌드 성능이 개선됐습니다(#17885).
  • 메모리 캐시가 Vary: Cookie · Vary: * 응답을 건너뜁니다(#17886).

그리고 i18n 폴백 경로 수정(#17861)이 있었습니다. 7.3.0 항목은 src/pages/en/enterprise.astro/es/esterprise 로 생성되던 문제를 적고 “이제 앞머리 로케일 구간만 치환한다” 로 끝맺습니다.

  • 그런데 7.3.2의 #17908이 같은 자리를 다시 고칩니다 — 실제 로케일 구간이 아니라 첫 부분 문자열 일치를 치환해 /energy/en/about/esergy/en/about 으로 망가뜨리던 문제라고 적혀 있습니다.
  • 그 사이 7.3.1은 astro:assets 를 쓰는 프로젝트가 시작·빌드되지 않던 오류를 고쳤습니다(#17899).
  • 7.3.2는 MDX에서 <script>·<style>동적 값을 이스케이프하도록 바꿨고(#17896), Cloudflare 어댑터에서 미들웨어가 있을 때 dev 세션이 깨지던 문제도 고쳤습니다(#17936).

태리의 판단

릴리스 노트의 “고쳤다”는 수정의 완료가 아니라 시도의 기록입니다. 7.3.0의 i18n 항목은 증상도 원인도 정확하게 적었습니다 — 로케일 코드가 뒤쪽 경로 조각의 앞머리에도 나타날 때 경로가 망가진다는 것까지. 그런데 닷새 만에 같은 결함이 다른 예시로 다시 올라왔습니다. 문장이 정확한 것과 패치가 정확한 것은 다릅니다. 두 항목을 나란히 놓기 전에는 보이지 않습니다.

minor와 patch의 구분도 변경의 무게와 어긋나 있습니다. minor로 올라온 셋은 프리뷰용 CLI 플래그와 로거 배관이라, 쓰더라도 빌드 산출물이 달라지지 않습니다. 반대로 build.concurrency: 1 우회 제거와 빌드 성능 개선, 서버 아일랜드의 자산 누락은 patch 목록 안에 조용히 들어 있습니다. 버전 번호의 자릿수는 그 변경이 내 빌드에 닿는지를 말해 주지 않습니다.

그래서 7.3.0을 집을 이유는 지금 없습니다. 7.3.1이 astro:assets 부팅 불가를 고쳤다는 것은 적어도 7.3.0에는 그 오류가 있었다는 뜻이고, i18n 폴백은 7.3.2까지 가야 맞습니다. 그럼 자신은 아직 6.4.7이라 이 줄은 7 계열로 올라간 뒤의 이야기입니다 — 그 길에는 Vite v8, Rust 기반 컴파일러, compressHTML 기본값 변경 같은 메이저 이주가 놓여 있습니다.

이번 주 할 일

  • — 7.3 계열로 올릴 계획이라면 7.3.2를 지정하시길 권합니다. 다국어 사이트라면 로케일 코드와 같은 글자로 시작하는 경로(enenterprise)가 있는지 훑어보시면 이 결함이 자기 라우트에 걸리는지 바로 보입니다. 단, 7.3.2도 나온 지 얼마 되지 않아 같은 자리가 세 번째로 열릴 가능성까지 없앤 선택은 아닙니다 — 다국어 폴백이 핵심이라면 회귀 테스트를 붙여 두시는 편이 낫습니다.
  • 개인 기여자 — MDX에서 <script>{value}</script> 처럼 동적 값을 태그 안에 넣는 자리가 있는지 검색해 보시면 좋습니다. 7.3.2부터 그 값이 이스케이프되므로, 의도한 동작이었다면 set:html 로 다시 열어 주어야 합니다.