This is a demo post

โฑ๏ธ 5 min read


This is a demo post created by LLM.

MDX, Next.js, ๊ทธ๋ฆฌ๊ณ  React๋กœ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•

Blog Banner

์†Œ๊ฐœ

์•ˆ๋…•ํ•˜์„ธ์š”! ์ด ๊ธ€์—์„œ๋Š” MDX, Next.js, ๊ทธ๋ฆฌ๊ณ  React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ  ์Šคํƒ์€ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๋ชฉ์ฐจ

  1. MDX๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  2. Next.js๋กœ ํ”„๋กœ์ ํŠธ ์„ค์ •ํ•˜๊ธฐ
  3. React ์ปดํฌ๋„ŒํŠธ์™€ MDX ํ†ตํ•ฉ
  4. SEO ์ตœ์ ํ™”
  5. ๊ฒฐ๋ก 

MDX๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

MDX๋Š” Markdown๊ณผ JSX๋ฅผ ๊ฒฐํ•ฉํ•œ ํฌ๋งท์œผ๋กœ, Markdown ๋ฌธ์„œ ๋‚ด์—์„œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ •์  ์ฝ˜ํ…์ธ ์™€ ๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•

// ์˜ˆ์ œ: MDX ํŒŒ์ผ์—์„œ React ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ
export const metadata = {
  title: "MDX์™€ React์˜ ํ†ตํ•ฉ",
  isPublished: true,
};

# ์ด๊ฑด ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค

<MyComponent prop="value" />

Next.js๋กœ ํ”„๋กœ์ ํŠธ ์„ค์ •ํ•˜๊ธฐ

Next.js๋Š” React ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)๊ณผ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. MDX์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ๊ฐ•๋ ฅํ•œ ๋ธ”๋กœ๊ทธ ํ”Œ๋žซํผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. Next.js ์„ค์น˜

npx create-next-app my-blog
cd my-blog
npm install @next/mdx @mdx-js/loader

2. MDX ์„ค์ •

next.config.js ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ MDX๋ฅผ ์ง€์›ํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

// filepath: /Users/choems/stonechoe/www/next.config.js
const withMDX = require('@next/mdx')({
  extension: /\.mdx?$/,
});

module.exports = withMDX({
  pageExtensions: ['js', 'jsx', 'md', 'mdx'],
});

React ์ปดํฌ๋„ŒํŠธ์™€ MDX ํ†ตํ•ฉ

MDX ํŒŒ์ผ์—์„œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ importํ•œ ํ›„ Markdown ๋ฌธ์„œ ๋‚ด์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


SEO ์ตœ์ ํ™”

๋ธ”๋กœ๊ทธ์˜ SEO๋ฅผ ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด ๋ฉ”ํƒ€ ํƒœ๊ทธ์™€ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Next.js์˜ Head ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// filepath: /Users/choems/stonechoe/www/src/components/SEO.js
import Head from 'next/head';

export default function SEO({ title, description }) {
  return (
    <Head>
      <title>{title}</title>
      <meta name="description" content={description} />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    </Head>
  );
}

๊ฒฐ๋ก 

์ด ๊ธ€์—์„œ๋Š” MDX, Next.js, ๊ทธ๋ฆฌ๊ณ  React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ  ์Šคํƒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ •์  ์ฝ˜ํ…์ธ ์™€ ๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ž๋ฃŒ


๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด GitHub์—์„œ ์ €๋ฅผ ํŒ”๋กœ์šฐํ•ด์ฃผ์„ธ์š”. ๐Ÿ˜Š