🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
Memo
Blog
Nextra를 이용해 블로그 만들기

1. Nextra를 이용해 블로그 만들기

naver 블로그 → 티스토리 → jekyll github blog → velog → hexo blog → nextra blog까지 여러가지 블로그 플랫폼을 사용해왔다. 티스토리를 쓰다보니 디자인은 마음대로 수정할 수 있었지만, 마크다운 지원이 아쉬워서 직접 블로그를 만들기로 했고, jekyll로 만들었으니나 ruby를 잘 몰라 수정하는데 약간의 제약이 있었다.

이후 velog로 넘어갔으나 디자인을 마음대로 수정못해 아쉬웠고, hexo로 넘어가 디자인하고 잘 수정하면서 만족했으나, mdx가 써보고 싶어져서 이참에 next.js로 넘어가기고 했다가 발견한 것이 nextra이다. 결론은 굉장히 만족하면서 쓰고 있다.


1.1 Nextra란?

Nextra is a framework on top of Next.js, that lets you build content focused websites. It has all the great features from Next.js, plus extra power to create Markdown-based content with ease.

Next.js와 MDX를 합쳐놓은 프레임워크이다. next.js를 만든 vercel 팀에서 관리하는 정적 사이트 생성기이다.

1.2 테마를 이용해 빠르게 시작하기

nextra에서는 현재 Documentation과 Blog 두 개의 테마를 제공한다. 이 중 Docs 테마가 좀 더 다양한 기능을 제공하고 더 마음에 들어서 Docs 테마를 사용했다.

1.2.1 Install

Next.js , React , Nextra 및 Nextra Blog Theme 를 설치한다.

1
yarn add next react react-dom nextra nextra-theme-docs

1.2.2 Next.js 구성 추가

프로젝트 루트 디렉터리에 next.config.js를 만든다.

1
const withNextra = require('nextra')({
2
theme: 'nextra-theme-blog',
3
themeConfig: './theme.config.jsx',
4
})
5
6
module.exports = withNextra()
7
8
// If you have other Next.js configurations, you can pass them as the parameter:
9
// module.exports = withNextra({ /* other next.js config */ })

1.2.3 블로그 테마 구성 만들기

프로젝트 루트 디렉터리에 theme.config.jsx 파일을 만든다. 해당 파일은 Nextra 블로그 테마를 구성하는데 사용된다.

1
export default {
2
logo: <span>My Nextra Documentation</span>,
3
project: {
4
link: 'https://github.com/shuding/nextra',
5
},
6
// ... other theme options
7
}

1.2.4 준비 완료!

이제 yarn start 명령어를 통해 시작할 수 있다.

해당 명령어를 사용하기 위해서는 package.json에 아래와 같이 설정을 추가해야한다.

1
"scripts": {
2
"dev": "next",
3
"build": "next build",
4
"start": "next start"
5
},

여기까지 수행하면 Nextra를 사용하기 위한 기본 구성을 마칠 수 있다. 이제 간단한 글을 올려볼 수 있다.


2. 페이지 구성

pages 폴더에 _meta.json를 생성하여 페이지에 대한 구성을 정의할 수 있다.

"type": "page"를 사용하면 사이드바가 아닌 내비케이션 바에 특수 페이지로 표시된다. 즉, 여러 개의 하위문서 또는 연락처와 같은 특수 페이지나 링크를 가질 수 있게 된다.

About과 Posts 두 개의 메뉴를 갖도록 구성할 수 있다.

1
{
2
"index": {
3
"title": "About",
4
"type": "page"
5
},
6
"posts": {
7
"title": "Posts",
8
"type": "page"
9
}
10
}

2.1 About 글 작성

Nextra를 사용하면 pages 디렉토리 안의 모든 파일이 MDX로 렌더링 된다. 즉 페이지에 표시될 글은 .mdx 파일에 Markdown으로 작성하면 된다.

예로 About 페이지에 띄울 글을 아래와 같이 작성할 수 있다.

1
---
2
type: page
3
title: About
4
date: 2023/12/08
5
---
6
7
# 여러분의 친절한 이웃, 베르닉트
8
9
> Email. dhktjdyd12@naver.com
10
11
사용자 중심의 개발를 지향하는 낙천주의자입니다.
12
머리 속 생각을 정리하는 글을 쓰는 것을 즐깁니다.
13
14
사람이 행복을 느끼는 알고리즘이 무엇일지 고민한 끝에,
15
중요하게 여기는 가치는 성장, 베풂이라 생각합니다.
16
17
출처를 남기려고 노력하지만, 작업을 하다가 까먹을 수 있습니다.
18
정확한 출처 표기를 하지 못했다면 죄송합니다.
19
20
> 잡설
21
>
22
> 제가 가장 좋아하는 캐릭터는 스파이더맨과 조커입니다.
23
> 두 캐릭터의 공통점은 온갖 역경과 고난이 그들에게 온다는 것입니다.
24
> 그렇지만 결정적인 차이점은 스파이더맨에게는 자신을 끝까지 믿어주는 한 사람, 메이 숙모가 있다는 것이고,
25
> 조커는 그러한 사람이 없단 점입니다.
26
>
27
> 한 사람의 인생에서 단 1명이라도 자신을 믿어준다는 것은
28
> 어마어마한 변화를 불러일으킬 수 있다는 점을 보여주는 예시가 아닐까 생각이 듭니다.
29
> 내가 사랑하는 가족, 친구들이 어려운 시기에 따뜻한 말 한마디 건네보는 건 어떨까요?

2.2 Posts 글 작성

여러 개의 하위 문서를 가질 수도 있다. posts 폴더 아래에 MDX 파일을 추가하면 된다.

1
---
2
title: Hello!
3
date: 2023/02/07
4
---
5
6
## 3. Hello!
7
8
Hello, Nextra!

글의 목록을 띄우기 위해서는 posts 폴더에 index.mdx를 추가해주면 된다.

이렇게 Nextra를 이용해 간단하게 블로그를 만들 수 있다. 자세한 내용은 아래의 글을 참고할 수도 있다.


3. SEO 적용하기

next-seo를 사용하여 손쉽게 seo를 구현할 수 있다.

3.1 Install

next-seo 를 설치한다.

1
yarn add next-seo

3.2 DefaultSeo 설정

_app.jsxDefaultSeo를 설정할 수 있다. 속성에 대해서는 여기서 확인할 수 있다.

1
import { DefaultSeo } from 'next-seo'
2
3
const DEFAULT_SEO = {
4
title: 'berenickt',
5
description: "berenickt's Dev Blog",
6
canonical: 'https://www.carrotins.com',
7
openGraph: {
8
type: 'website',
9
locale: 'ko_KR',
10
url: 'https://berenickt.vercel.app/',
11
title: "berenickt - Yewon-Noh's Dev Blog",
12
siteName: 'berenickt',
13
images: [
14
{
15
url: '/images/image.png',
16
width: 285,
17
height: 167,
18
alt: '이미지',
19
},
20
],
21
},
22
}
23
24
export default function Nextra({ Component, pageProps }) {
25
return (
26
<>
27
<DefaultSeo {...DEFAULT_SEO} />
28
</>
29
)
30
}

4. 검색 엔진에 등록하기

블로그를 만들면 바로 검색 엔진에 표시되는 것이 아니라 크롤링을 요청해야 한다.

소유권을 확인하기 위한 방법으로는 두가지가 있다.

  1. 제공되는 HTML 파일을 프로젝트에 넣는다.
  2. 사이트 홈페이지에 메타태그를 추가한다.

권장하는 방법인 1번 방법을 사용해서 설정했다. HTML 파일을 다운로드 받아 public 폴더 아래에 추가해주었다.

소유권 확인을 마치고 하루 이틀 정도 지나면 Google에서 검색 결과로 확인할 수 있다.


5. Vercel Analytics로 방문자 수 집계하기

이 블로그는 vercel를 이용해 배포하고 있다.

구글 애널리틱스와 같이 방문자 수를 집계하기 위한 설정을 해주었다.

5.1 Install

@vercel/analytics 패키지를 설치한다.

1
yarn add @vercel/analytics

5.2 App에 Analytics 컴포넌트 추가

pages/_app.jsx 파일에 아래를 추가해준다.

1
import { Analytics } from '@vercel/analytics/react'
2
3
export default function Nextra({ Component, pageProps }) {
4
return (
5
<>
6
...
7
<Component {...pageProps} />
8
<Analytics />
9
</>
10
)
11
}

수정한 코드를 배포하면 Vercel의 Analytics 탭에서 확인할 수 있다.

6. U+002C 에러

렌더링 과정에서 이유는 모르겠지만, mdx에서 <>, <> 형태같은 괄호를 그냥 쓰면 렌더링이 되질 않는다. 써야한다면 위와 같이 백틱으로 감싸서 사용하자.

1
Unexpected character `,` (U+002C) in name,
2
expected a name character such as letters, digits,
3
`$`, or `_`; whitespace before attributes; or the end of the tag

참고