Jaejinally
dev··2분 읽기

Next.js + MDX로 3개 국어 블로그 만들기

Next.js 14 App Router와 MDX, next-intl을 조합해서 한/영/일 3개 국어 개인 블로그를 만든 과정을 정리했어.

왜 직접 만들었을까?

기존 블로그 플랫폼(Medium, Velog, 티스토리)을 다 써봤는데 항상 아쉬운 점이 있었어. 다국어 지원이 안 되거나, 코드 하이라이팅이 맘에 안 들거나, 디자인 커스터마이징이 제한적이거나.

그래서 내가 원하는 걸 다 넣을 수 있는 블로그를 직접 만들기로 했어.

기술 스택

  • Framework: Next.js 14+ (App Router, SSG)
  • Styling: Tailwind CSS + @tailwindcss/typography
  • Content: MDX via next-mdx-remote + gray-matter
  • i18n: next-intl (/ko, /ja, /en 라우팅)
  • Deploy: Vercel (GitHub push → 자동 배포)
  • Theme: next-themes (다크모드 지원)

핵심: MDX 파이프라인

MDX 파일을 읽어서 프론트매터를 파싱하고, 글 목록을 만드는 유틸리티를 작성했어.

// src/lib/mdx.ts — 글 하나 읽기
export function getPostBySlug(locale: Locale, category: Category, slug: string) {
  const filePath = path.join(contentDir, locale, category, `${slug}.mdx`);
  const fileContent = fs.readFileSync(filePath, "utf-8");
  const { data, content } = matter(fileContent);
  return { ...data, content, readingTime: readingTime(content) };
}

포인트는 content/[locale]/[category]/[slug].mdx 구조야. 로케일과 카테고리 조합으로 파일 시스템 기반 라우팅을 구현한 거지.

다음 단계

  • giscus 댓글 시스템 연동
  • RSS 피드 자동 생성
  • Vercel Analytics 붙이기
  • OG Image 자동 생성

하나씩 진행하면서 다 기록할 예정이야. 기대해줘!

관련 글

dev2026년 3월 16일

내 API 키가 털렸다

앱에 심어둔 API 키가 해커에게 털려서 20만엔 넘는 청구서가 날아왔다. 1인 개발자가 겪은 보안 사고의 기록.

life2026년 3월 16일

이 블로그를 시작하는 이유

왜 2026년에 개인 블로그를 시작하게 됐는지, 이 블로그에서 어떤 이야기를 하려고 하는지 적어봤어.

새 글을 이메일로 받아보세요

매주 새로운 개발 이야기, 여행기, 일상 에세이를 이메일로 배송해드립니다.