MDX로 Markdown에 컴포넌트 삽입하기 — 코드블럭, 이미지도 자유롭게!

2025. 6. 21. 09:00·Next.js
728x90
반응형

Markdown 기반 블로그를 만들다 보면, 문서 안에 React 컴포넌트를 넣고 싶은 순간이 오죠.
예를 들어, 설명 중간에 <CustomAlert />나 <CodeBlock /> 같은 컴포넌트를 삽입하고 싶을 때 말이에요.

이럴 때 MDX를 사용하면 Markdown과 React의 조합으로 무한한 확장성을 가진 블로그를 만들 수 있습니다.


💡 MDX란?

MDX는 Markdown + JSX의 합성어로, Markdown 문서 안에서 React 컴포넌트를 바로 사용할 수 있게 해주는 포맷입니다.

  • 기존 Markdown 문법 그대로 사용 가능
  • 필요한 위치에 컴포넌트만 삽입 가능
  • 예: .mdx 파일에서 <MyComponent /> 사용

즉, 블로그의 글 안에 **동적인 인터랙션**도 추가할 수 있어요!


📦 1. MDX 관련 패키지 설치

npm install @next/mdx @mdx-js/loader @mdx-js/react

그리고 next.config.js를 수정합니다:

const withMDX = require('@next/mdx')({
  extension: /\.mdx?$/,
});
module.exports = withMDX({
  pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
});

이렇게 하면 .mdx 파일도 페이지나 포스트로 인식할 수 있어요.


📝 2. MDX 파일 작성하기

예시로 posts/mdx-intro.mdx 파일을 만들어보겠습니다.

---
title: "MDX로 컴포넌트 넣기"
date: "2025-06-10"
---

# MDX란 무엇인가요?

기존 Markdown처럼 작성하면서...

<CustomAlert message="🚨 중요 내용이에요!" />

그 사이에 이런 컴포넌트를 넣을 수 있어요.

이제 CustomAlert이라는 컴포넌트를 렌더링하기 위한 준비가 필요하죠.


🧩 3. 컴포넌트 바인딩 (MDXProvider)

pages/_app.tsx 또는 layout 파일에서 MDXProvider를 사용해 컴포넌트를 등록합니다.

// pages/_app.tsx
import { MDXProvider } from '@mdx-js/react';
import CustomAlert from '../components/CustomAlert';

const components = {
  CustomAlert,
};

function MyApp({ Component, pageProps }: any) {
  return (
    <MDXProvider components={components}>
      <Component {...pageProps} />
    </MDXProvider>
  );
}
export default MyApp;

이제 MDX 파일 안에서 <CustomAlert /> 사용 가능!


🌈 4. 코드블럭, 이미지, UI까지 자유롭게

MDX에서는 컴포넌트를 다양하게 활용할 수 있어요:

  • <CodeBlock>: 문법 강조된 코드 출력
  • <Image src="..." />: 최적화된 이미지 삽입
  • <InteractiveQuiz />: 인터랙션 요소 삽입

글을 “읽는 것”에서 “체험하는 것”으로 바꿔줍니다.


✅ 마무리하며

MDX를 도입하면 블로그의 표현력은 상상 이상으로 확장됩니다.
복잡한 튜토리얼, 라이브 컴포넌트, 데모 삽입도 이제 가능하죠.

다음 글에서는 스타일링과 레이아웃 정리를 통해 블로그를 더 감각적으로 만들어볼게요.

“글은 코드처럼, 코드도 글처럼.”

728x90
반응형

'Next.js' 카테고리의 다른 글

블로그에 다크모드 적용하기 — next-themes로 UX 높이기  (2) 2025.06.23
스타일링 선택하기 — Tailwind CSS vs Styled Components  (2) 2025.06.22
동적 라우팅으로 글 URL 구조 잡기 — [slug].tsx 완전 이해하기  (2) 2025.06.20
정적 블로그 구조 만들기 — Markdown 기반 포스트 렌더링하기  (2) 2025.06.19
📘 Next.js로 블로그 프로젝트 시작하기 — 설치부터 폴더 구조까지  (1) 2025.06.18
'Next.js' 카테고리의 다른 글
  • 블로그에 다크모드 적용하기 — next-themes로 UX 높이기
  • 스타일링 선택하기 — Tailwind CSS vs Styled Components
  • 동적 라우팅으로 글 URL 구조 잡기 — [slug].tsx 완전 이해하기
  • 정적 블로그 구조 만들기 — Markdown 기반 포스트 렌더링하기
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백엔드개발
    flutter게시판
    날씨앱
    flutter상태관리
    flutter앱개발
    캘린더앱
    flutterui
    북마크기능
    모바일앱개발
    UI디자인
    flutter개발
    감성앱
    rails보안
    ActiveRecord
    openweather
    Nextjs
    flutter디자인
    코드를걷는사람
    개발블로그
    Firebase
    flutter기초
    Flutter
    메모앱
    fluttertips
    다크모드
    table_calendar
    UIUX
    뉴스앱
    RubyOnRails
    정적사이트
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
MDX로 Markdown에 컴포넌트 삽입하기 — 코드블럭, 이미지도 자유롭게!
상단으로

티스토리툴바