needhelp
← Back to blog

Astro 6.4 딥다이브: 플러거블 마크다운 파이프라인, Rust 기반 Sätteri, Cloudflare 배포 혁명

by needhelp
AstroFrontendRustCloudflareMarkdownSSGWeb Development

2026년 5월 28일, Astro가 6.4를 출시했다. 일상적인 기능 업데이트도, 단순한 버그픽 모음도 아니다 — 구조적 변곡점이다.

세 가지 핵심 변화, 각각 깊은 트렌드 라인을 따라간다:

  • 마크다운 프로세서 인터페이스 — unified의 10년 독점 종말
  • Sätteri — 처음부터 만든 Rust 마크다운/MDX 프로세서, CI 빌드 시간 120초에서 55초로 단축
  • cf() 헬퍼 — 6개 이상의 Cloudflare 바인딩과 컨텍스트 주입을 한 줄로 압축

프로세싱이 인터페이스로

역사적 배경

처음부터 Astro의 마크다운 파이프라인은 unified 생태계에 하드코딩되어 있었다 — 특히 remark(마크다운 AST 파싱) + rehype(HTML AST 변환)와 수천 개의 플러그인. 그것 자체로 문제는 아니다 — unified는 방대하고 유연하다. 문제는 하드코딩이라는 점이다.

교체할 수 없다. GFM과 헤딩 앵커만 필요해도 전체 remark → rehype → stringify JS 파이프라인이 end-to-end로 실행된다.

6.4의 markdown.processor API는 이를 고정 의존성에서 교체 가능한 인터페이스로 바꾼다.

아키텍처 변경

6.4+: 플러거블 파이프라인6.4 이전: 하드코딩파이프라인고정markdown.processorastro.configastro.configUnified 엔진프로세서 인터페이스remarkPluginsUnified기본 프로세서rehypePluginsSätteriRust 프로세서마크다운 AST커스텀 엔진JS 플러그인 생태계네이티브 Rust 파이프라인사용자 정의 AST

핵심 변경: astro.config가 더 이상 최상위 remarkPlugins / rehypePlugins를 직접 받지 않는다. 대신 통합된 processor() 호출이 있다.

새 설정 문법

// ✅ Astro 6.4+ 권장
import { defineConfig } from 'astro/config';
import { unified } from '@astrojs/markdown-remark';
import remarkToc from 'remark-toc';
import rehypeSlug from 'rehype-slug';
export default defineConfig({
markdown: {
processor: unified({
remarkPlugins: [remarkToc],
rehypePlugins: [rehypeSlug],
smartypants: true,
gfm: true,
}),
},
});

지원 중단 일정

6.4에서 8.0까지의 기간은 약 12-18개월이다. 늦게 마이그레이션할수록 업그레이드가 더 고통스럽다.


Sätteri: Rust가 마크다운 파이프라인에 진입

무엇인가

@astrojs/markdown-sätteri는 처음부터 다시 작성한 Rust 마크다운/MDX 프로세서다. unified의 Rust 가속 버전이 아니다 — 자체 AST 사양, 자체 파서, 자체 직렬화기를 가진다. 즉, remark 플러그인을 더 빠르게 실행하는 것이 아니라 아예 실행하지 않는다.

성능 벤치마크

사이트 Unified (기준) Sätteri 속도 향상
Astro 문서 사이트 142초 63초 2.25×
Cloudflare 문서 사이트 120초 55초 2.18×
중간 규모 마케팅 사이트 38초 22초 1.73×

호환성이 문제

Sätteri는 remark/rehype 플러그인과 호환되지 않는다. 이는 버그가 아니라 Rust AST 파이프라인의 아키텍처적 필요성이다.

Astro 6.4의 로드맵은 Sätteri가 향후 메이저 버전에서 기본 프로세서가 될 것이라고 명시한다.


Cloudflare 배포: 6개 바인딩을 하나로 압축

cf() 추상화

cf(state, env, ctx)는 6개 바인딩을 단일 호출로 압축한다:

// ✅ Astro 6.4+
import { defineConfig } from 'astro/config';
import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
output: 'server',
adapter: cloudflare({
advancedRouting: {
cf: true,
},
}),
});

advancedRouting.cf: true는 모든 바인딩을 자동 주입한다. 수동 컨텍스트 연결이 필요 없다.


안전한 업그레이드 경로

체크리스트

확인 항목 Unified 경로 Sätteri 경로
빌드 시간 기준 ~50% 더 빠름
remarkPlugins ✅ 작동 ❌ 포팅 필요
rehypePlugins ✅ 작동 ❌ 포팅 필요
gfm ✅ 플러그인 ✅ 네이티브
smartypants ✅ 플러그인 ✅ 네이티브
directive 문법 ❌ 플러그인 필요 ✅ 네이티브

이스케이프 해치: 혼합 사용

export default defineConfig({
markdown: {
processor: unified(),
contentCollections: {
docs: { processor: sätteri() },
blog: { processor: unified() },
},
},
});

References

Share this page