MDX를 사용하기 위한 라이브러리들 설치 및 환경 설정
개발 블로그 개발 여정
reactnextjsmdx
Fri May 31 2024
이 글은 개발 블로그 개발 여정의 게시글이예요
해당 포스트는 NextJS를 이용하여 개발 블로그를 만들며 작성한 포스트입니다.
기술 블로그의 전체 코드는 🪢 yonglog github 에서 확인 하실 수 있습니다.
- 1 . 개발블로그 제작을 시작하며
- 2 . CI/CD 파이프라인 구성하기
- 3 . tailwind 환경 설정 및 디자인 레퍼런스 찾기
- 4 . / 경로 레이아웃 , 페이지 디자인 생성하기
- 5 . [BUG] Build 시 발생하는 typeError 해결하기
- 6 . MDX를 사용하기 위한 라이브러리들 설치 및 환경 설정
- 7 . Post들이 저장된 FileSystem 파싱하기
- 8 . PageNavigation UI 만들기
- 9 . tag , series Identifier 만들기
- 10 . / 경로 UI 디자인 하기
- 11 . 서버 컴포넌트에 Dynamic Routing 추가하기
- 12 . Post/page.tsx 생성하기
- 13 . 마크다운 파일 코드블록 꾸미기
- 14 . [BUG] Vercel 에 환경 변수 추가하기
- 15 . Loading Suspense 구현하기
- 16 . generateStaticParams 이용해 SSR 에서 SSG로 넘어가자
- 17 . SSG를 이용한 블로그에서 테마 변경하기
- 18 . 인터렉티브한 사이드바 만들기
- 19 . 기술블로그에 giscus를 이용하여 댓글 기능을 추가하기
- 20 . 기술 블로그의 SEO를 최적화 하기 위한 방법 Part1
- 21 . 기술 블로그의 SEO를 최적화 하기 위한 방법 Part2
- 22 . 바닐라 자바스크립트로 깃허브 OAuth 를 구현해보자
- 23 . 라이브러리 없이 깃허브 API를 이용해 댓글창을 구현해보자
- 24 . 리팩토링 : Promise 패턴을 이용하여 비동기 처리중인 전역 객체에 접근하기
- 25 . NextJS로 만든 기술블로그에서 검색 기능 구현하기
MDX 를 사용하기 위한 라이브러리 설치하기
이전 docs
들에서 열심히 ContentLayer
를 이용하기 위해 공부하고 설치하려 했으나 ContentLayer
의 개발팀의 투자가 끊긴 후 업데이트가 되지 않아 NextJS 14
버전 이후부턴 ContentLayer
를 설치 할 수 없게 되었다.
개발 시장은 차갑다 ..
그래서 .. 눈물을 머금고 다른 라이브러리들을 사용하기로 했다.
대부분의 내용들은 NextJS
의 공식문서인 Configuring:MDX
를 참고했다.
NextJS 공식문서 : Configuring : MDX
라이브러리 소개
@next/mdx
@next/mdx-npm
해당 라이브러리는 MDX
파일을 NextJS
에서 컴포넌트처럼 이용 할 수 있게 도와주는 라이브러리이다.
MDX
?
MDX
는MarkDown + JSX
의 파일 형식으로JSX
를 내부에서 사용 가능한 마크다운 파일을 의미한다.개발 블로그를 이용 할 때 주로
MDX
를 이용하곤 하는데 이는JSX
를MDX
내부에서 사용함으로서 페이지를 마크다운 내에서 렌더링 하거나
MDX
파일을 컴포넌트처럼 불러와 브라우저에 렌더링 하도록 하기 위함이다.
next.config.js
에 해당 라이브러리를 감싸줌으로서 MDX
파일을 컴포넌트처럼 import
하여 사용하거나 컴포넌트 내부에 사용해줄 수 있다.
MDX
를 파일 시스템 기반 라우팅을 활용하여 import
해오는 것이 가능하며 이 때 리액트 컴포넌트처럼 불러오는 것을 가능하게 한다.
@mdx-js/loader
@mdx-js/loader
해당 라이브러리는 MDX
를 바벨 로더를 이용해 MDX
파일을 자바스크립트로 컴파일 시켜주는 라이브러리이다.
next-mdx-remote
next-mdx-remote해당 라이브러리는 파일 기반 라우팅 뿐 아니라 다양한 서버에 존재하는 MDX
파일을 가져올 수 있게 도와주는 라이브러리이다.
나는 웬만한 MDX
파일들을 모두 파일 기반 라우팅을 이용해 가져올 것이지만 , 혹시 모르니 해당 라이브러리를 이용해주도록 하자
라이브러리 설치하기
위에서 설명한 라이브러리들과 타입들을 설치한다.
환경 설정하기
next.config.js
파일에서 다음과 같이 @next/mdx
라이브러리를 불러와 config
파일을 감싸 사용한다.
이 때 withMDX
함수의 extension
옵션은 MDX
파일을 처리 할 때 사용할 파일 확장자를 정의한다. 정규 표현식을 이용해 .mdx
확장자의 파일들을 대상으로 MDX loader
를 적용하도록 한다.
즉, next.config.js
에서 .mdx
확장자를 가진 모든 파일명들을 대상으로 MDX loader
를 이용하도록 한다.
nextConfig.pageExtension
은 Page
컴포넌트로 인식 할 수 있는 확장자명들을 정의한다.
해당 배열에 존재하는 확장자명을 가진 파일들은 Page
컴포넌트로서 단독적으로 이용 될 수 있다.
하지만 나는
layout
내에서 호출해 사용 할 것이기 때문에mdx
파일이 단독으로Page
컴포넌트로 사용 될 일은 없을 것이다.
이후 tsconfig.json
에서 mdx
파일들에서도 타입 스크립트가 컴파일 하도록 만든다.
그 이유는 MDX
파일에선 컴포넌트를 호출해 사용 할 수도 있기 대문에 타입 체크를 하도록 한다.
MDX 파일들 생성하기
이제 해당 하얀 빈 부분들에 mdx
파일들의 리스트를 렌더링 하면 된다.
그렇기 위해서 가장 먼저 필요한 것은 mdx
파일들이다.
때 마침 현재 개발블로그를 개발하면서 docs
들을 준비해뒀기 때문에 해당 docs
들을 이용해 렌더링 해보도록 하자
프로젝트 루트 디렉토리에 posts
라는 폴더를 만들어두고 해당 폴더 내에 개발 블로그 개발 여정 이란 폴더를 생성해주었다.
앞으로는 posts
폴더 이하의 폴더들은 시리즈 -> 게시글들의 순서로 갈 듯 싶다. 추후 변경 될 수도 있지만 ..
각 post
들의 생김새는 다음과 같다.
상단에 meta data
를 YAML front matter
형식을 이용해 적어준다. YAML front matter
형식이란 content
의 상단에 ---
로 구분되는 블록에 메타 데이터를 적는 방식을 의미한다.
다음과 같이 mdx
파일들을 정의해준 후 마무리하도록 하자