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