Rust로 파싱하고 JavaScript로 확장하는 Markdown 도구, Satteri

Satteri는 Markdown과 MDX를 Rust에서 파싱하고, JavaScript나 TypeScript로 플러그인을 작성할 수 있게 만든 오픈소스 도구예요. 콘텐츠 빌드 속도를 높이면서 기존 JavaScript 개발 방식과 AST 구조를 이어 쓰려는 접근이에요. 1
핵심 요약
| 구분 | 핵심 | 왜 볼 만한가요 |
| 실행 구조 | 파싱과 컴파일은 Rust가 맡고 플러그인은 JavaScript에서 실행해요 | 빠른 네이티브 처리와 익숙한 플러그인 개발 방식을 함께 쓸 수 있어요 |
| 지원 형식 | CommonMark, GFM, MDX와 frontmatter, 수식, directive를 다뤄요 | 기술 문서와 콘텐츠 사이트에 필요한 문법을 한 파이프라인에서 처리해요 |
| 확장 방식 | MDAST와 HAST 노드를 방문하는 TypeScript 플러그인 API를 제공해요 | remark와 rehype를 써 본 개발자가 구조를 이해하기 쉬워요 |
| 실행 환경 | macOS, Linux, Windows용 네이티브 바이너리와 WASI 대체 경로를 제공해요 | 서버뿐 아니라 브라우저와 엣지 환경도 고려할 수 있어요 |
1. Markdown 파서는 Rust, 플러그인은 JavaScript가 맡아요
JavaScript의 Markdown 도구는 remark와 rehype를 중심으로 큰 플러그인 생태계를 갖고 있어요. 다만 문서가 많아지거나 빌드 과정이 복잡해지면 파싱과 AST 변환 비용이 커질 수 있어요. Satteri는 이 구간을 Rust로 옮기고, 프로젝트별 변환 규칙은 JavaScript나 TypeScript로 작성하게 설계했어요. 2
기본 패키지는 Markdown을 HTML로 바꾸는 `markdownToHtml`과 MDX를 JavaScript로 컴파일하는 `mdxToJs`를 제공해요. MDAST 플러그인은 Markdown AST에서, HAST 플러그인은 HTML AST에서 동작해요. 각 플러그인은 이름과 노드 유형별 방문 함수를 가진 객체로 만들 수 있어요. 타입 추론을 돕는 `defineMdastPlugin`과 `defineHastPlugin`도 함께 제공해요. 3
이 구조는 기존 도구를 통째로 버리고 새 문법을 배우게 하는 방식과 거리가 있어요. 프로젝트 문서는 unified 생태계와 같은 MDAST·HAST 형태를 재사용한다고 설명해요. remark나 rehype 플러그인을 그대로 호환한다고 단정할 수는 없지만, 노드 구조와 방문 방식이 익숙해 전환 비용을 줄이는 데 도움이 돼요.
문서 사이트에 필요한 형식을 넓게 다뤄요
파서는 CommonMark와 GitHub Flavored Markdown, MDX를 지원해요. frontmatter와 수식, remark-directive 컨테이너도 처리할 수 있어요. 마크다운 문서, JSX 컴포넌트가 들어간 MDX, 코드 블록 변환처럼 서로 다른 작업을 별도 파서로 나누지 않아도 돼요. 1
배포 대상도 데스크톱 운영체제에만 묶이지 않아요. macOS와 Linux, Windows에서는 네이티브 바이너리를 쓰고, 브라우저나 엣지 환경에서는 WASI 경로를 제공해요. Vite에서 `.md`와 `.mdx` 파일을 가져오기 위한 별도 플러그인도 저장소에 포함돼 있어요. 패키지는 npm, yarn, pnpm으로 설치할 수 있고 MIT 라이선스로 공개됐어요. 2
성능 수치는 프로젝트에 맞춰 확인해야 해요
Satteri는 고성능 처리를 목표로 내세우고 라이브 플레이그라운드에서 초당 처리 문서 수를 보여줘요. 다만 저장소의 소개 문서만으로 모든 프로젝트에서 같은 속도 향상을 보장할 수는 없어요. 실제 차이는 문서 크기와 MDX 사용량, 플러그인 수, 네이티브 모듈을 불러오는 비용에 따라 달라져요.
도입을 검토한다면 현재 빌드 파이프라인과 같은 문서 묶음으로 비교하는 편이 좋아요. 결과 HTML과 AST가 기존 처리기와 같은지 먼저 보고, 전체 빌드 시간과 증분 빌드 시간, 메모리 사용량을 함께 재면 돼요. 브라우저나 엣지 배포가 필요하다면 네이티브 바이너리 대신 WASI 경로를 쓸 때의 번들 크기와 초기 실행 시간도 확인해야 해요.
왜 중요한가요
Markdown 도구를 빠르게 만들기 위해 Rust로 전부 옮기면 기존 JavaScript 플러그인과 팀의 작업 방식이 끊길 수 있어요. Satteri는 계산량이 큰 파싱과 컴파일을 Rust에 두면서 프로젝트별 확장은 JavaScript에 남겼어요. 콘텐츠 플랫폼이나 문서 사이트 팀은 성능을 시험하면서도 익숙한 TypeScript 코드로 변환 규칙을 관리할 수 있어요. 2
아직 도입 초기에는 호환 범위를 꼼꼼히 볼 필요가 있어요. 기존 remark·rehype 플러그인의 직접 호환 여부, 네이티브 바이너리가 지원하는 실행 환경, WASI 대체 경로의 차이를 확인해야 해요. 이 조건이 맞는 프로젝트라면 대규모 Markdown·MDX 처리에서 파서를 교체할 현실적인 선택지가 하나 더 생겼어요.
참고 자료
- satteri - JavaScript 생태계를 위한 고성능 Markdown 및 MDX 처리기 — GeekNews
- bruits/satteri — GitHub
- satteri JavaScript package README — GitHub
'IT & AI' 카테고리의 다른 글
| CDN 없이 봇을 줄이는 방법, HTTP·IP·TLS 신호를 함께 봐요 (0) | 2026.07.30 |
|---|---|
| 송재경의 OpenMMO, 인간과 AI가 같은 서버에 접속하는 게임 실험 (1) | 2026.07.30 |
| 500달러로 학습한 9B 모델, 상품 검수에서 프런티어 모델을 앞섰어요 (0) | 2026.07.29 |
| Codex Security 오픈소스 공개, 코드 보안 검사를 CLI와 CI로 가져왔어요 (0) | 2026.07.29 |
| 독립 웹사이트를 원본으로, Substack은 배포 채널로 쓰는 POSSE 전략 (1) | 2026.07.29 |