Next.js 블로그 만들기
June 27, 2025
Next.js 블로그 템플릿 커스터마이징
포트폴리오를 겸할 수 있는 공간을 만들고 싶어서, 기존 Next.js 블로그 템플릿을 나만의 스타일에 맞게 커스터마이징하고 필요한 기능들을 직접 추가했다. 나만의 공간이 생겨서 기쁘다.
한글이 잘리는 정규식 수정하기
function slugify(str: string) {
return str
.toString()
.toLowerCase()
.trim() // 앞뒤 공백 제거
.replace(/&/g, "-and-") // & → -and-
.replace(/[^\w가-힣\s\-]+/g, "") // 특수문자 제거 (공백과 하이픈, 한글 허용)
.replace(/\s{2,}/g, " "); // 두 칸 이상 공백 → 한 칸
}
Heading 태그 안의 텍스트가 영문일 땐 a
태그의 href
가 정상적으로 생성되는데, 한글일 땐 잘리는 현상이 발생했다. 문제를 찾아보니, mdx.tsx에서 slug
생성 시 사용한 정규식이 한글을 제외하고 있었던 게 원인이었다. 정규식을 수정해서 한글도 포함되도록 처리했고, 현재는 정상적으로 동작한다.
목차 자동 생성하기
기존에는 MDX의 Heading 태그 안에 <a>
태그가 자동으로 생성되어 앵커 기능을 처리하고 있었다. heading태그 안에 a태그를 자동으로 생성할 필요는 없기 때문에 이 부분을 제거해주고 utils.ts
에 getHeadingsFromContent()
함수를 만들어 getBlogPosts()
함수 내에서 heading 정보를 함께 반환하도록 처리했다. 이제 페이지 렌더링 시 post.headings
를 <Toc />
에 넘겨주면 본문 구조에 맞는 목차가 자동으로 생성된다.
포스트 스타일 정의하기
인용문구 예시
목록 예시
- 목록 1
- 목록 2
- 목록 2-2
순서 예시
- 순서
- 순서
글 하이라이팅은 회색 배경으로 링크와 굵은 링크는 강조된 컬러 표시와 hover
효과가 있다.
외부 링크는 새 탭을 나타내는 아이콘이 생긴다. 강조된 글씨는 이렇게 보인다.
제목1 | 제목2 |
---|---|
값1 | 값2 |
Next.js 간단 정리
1. 렌더링
SSR : Next.js 에서 제공하는 가장 기본적인 사전 렌더링. 브라우저의 요청이
있을 때 서버에서 HTML을 완성해서 브라우저로 전달.
SSG : 정적 서비스에서 많이 사용하는 사전 렌더링 기법. 데이터가 변경될 여지가
적다. HTML은 빌드 시점에 완성된다.
ISR : SSG의 단점을 보완하는 사전 렌더링 기법. ex) 게시글의 조회수 빌드 시점은
SSG와 같다.
PPR : 부분 사전 렌더링. Next.js 14버전에서 등장했다. 빌드 시점에 미리 만들어지는
정적인 영역. Shell(정적인 영역), HOles(동적인 영영)
2. 라우팅
Dynamic Routes : 동적으로 경로를 지정하는 방식. App Router : 리액트 서버 컴포넌트를 적극적으로 활용하는 라우터. Route Groups : 경로들을 묶어서 관리하는 기법. 괄호로 폴더명을 지으면 그 아래에 있는 다른 폴더들, 다른 경로들이 하나의 레이아웃을 공유하는 구조.
3. 데이터 페칭
Route Handlers : 어디서든 api를 정의할 수 있다. Server Actions : 'use server' 라는 문장이 있는 스코프의 로직은 서버에서 동작한다. 컴포넌트 안도 가능하다.
Front Matter : 상단에 3개의 하이픈으로 구분된 영역에 작성되는 값. 이후 메타데이터로 활용. remark : 라이브러리. html 플러그인을 집어 넣어서 마크다운을 HTML로 변환.