원문 제목: Under the hood of MDN's new frontend 원문 링크: https://developer.mozilla.org/en-US/blog/mdn-front-end-deep-dive/ 번역일: 2026-04-18 KST
MDN은 오래된 CRA + React 래퍼 구조를 버리고, 정적 콘텐츠 중심 아키텍처에 웹 컴포넌트와 서버 렌더링 템플릿을 결합하는 방향으로 프론트엔드를 재구성했다.
- 예전 MDN 프론트엔드는 CRA에서 시작한 React 앱이었고, 설정을 eject한 뒤 Webpack과 빌드 스크립트가 점점 복잡해졌다.
- 문서 본문은 정적 HTML인데, React 앱은 그 바깥을 감싸는 래퍼에 가까웠다. 그래서 본문 내부에 작은 인터랙션을 넣으려면 React와 별도로 DOM API 코드를 유지해야 했다.
- CSS도 Sass와 최신 CSS 문법이 뒤섞였고 스코프가 약해서, 한 컴포넌트를 수정하면 다른 부분이 쉽게 깨졌다. 결국 큰 render-blocking CSS 번들을 사용자에게 내려보내는 구조가 되었다.
- 팀은 이런 문제를 줄이기 위해 Lit 기반 웹 컴포넌트를 도입했다. Scrimba 임베드, interactive example 같은 콘텐츠 내부 인터랙션을 커스텀 엘리먼트로 삽입할 수 있게 만들었다.
- 이 접근의 장점은 정적 콘텐츠 파이프라인과 인터랙션 컴포넌트를 자연스럽게 연결할 수 있다는 점이다. 문서 빌드 단계는 그대로 두고, 필요한 위치에만 상호작용 가능한 섬(island)을 꽂아 넣는다.
- 기존 Playground도 여러 개의 작고 독립적인 custom element로 쪼개서 재사용 가능하게 만들었다. 코드 에디터, 콘솔 렌더러, 상태 전달 컨트롤러를 분리해 복잡도를 낮췄다.
- 글 후반부에서 MDN은 React Server Components의 문제의식도 언급한다. 모든 UI를 SPA처럼 감싸는 구조에서는 정적인 콘텐츠까지 클라이언트 JS로 다시 검증해야 하므로 비용이 크다고 본다.
- MDN의 결론은 단순하다. 대부분의 문서는 HTML과 CSS로 충분하고, 상호작용이 필요한 몇 군데만 웹 컴포넌트로 다루면 된다. 즉, 사이트 전체를 거대한 앱으로 만들 필요가 없다는 것이다.
- 문서/콘텐츠 중심 서비스라면 전체를 SPA로 감싸는 습관부터 의심하는 게 좋다.
- 콘텐츠 안쪽 인터랙션이 드문 서비스는 웹 컴포넌트나 island architecture가 React 전면 도입보다 더 유지보수 친화적일 수 있다.
- CSS 스코프가 약한 상태에서 디자인 시스템을 키우면 결국 빌드와 성능 비용이 한꺼번에 터진다.
- React를 쓰더라도, 무엇을 React로 렌더링해야 하는지부터 다시 정의하는 게 핵심이다.
이 글의 제일 큰 메시지는 "React를 버렸다"가 아니라 "사이트의 본질에 맞는 렌더링 모델로 돌아갔다"에 가깝다. 문서형 제품, 마케팅 페이지, 학습 콘텐츠 서비스라면 꽤 직접적으로 참고할 만하다.