23년 12월 기준 Next가 App Router
로 변경되면서, 이 글은 deprecated되었습니다.
제 블로그는 Next App Router
로 업데이트되었습니다. 코드 보러가기
이 블로그 miryang.dev 는 Next.js로 만들어졌습니다.
어떻게 만드는지 궁금해하시는 분들이 많아서 가이드와 핸즈온음 준비했습니다.
Next.js로 나만의 블로그 만들기 핸즈온 세션 참여자 대상으로 작성된 안내서로
자세한 설명은 핸즈온에서 구두로 합니다.
핸즈온 후기!
- 혼자 했으면 오래 걸리거나 중간에 그만뒀을텐데 자세히 설명도 해주시고 실시간으로 보여주셔서 잘 만들 수 있었습니다
- 좋은 강의 감사합니다 덕분에 next.js 영업당했어요!ㅋㅋㅋㅋㅋ 다음에도 또 참여하고싶어요!!
- 만족스러운 강의였습니다. 다음 강의도 기다리겠습니다 :)
- 아직 next.js나 ts 지식이 부족해서 따라가기 힘든 점은 있었지만 이런식으로 구성되어 있다는걸 알 수 있는 점이 좋았어요!
- next.js 블로그 만들기를 예전에 도전했다가 실패한 경험이 있었어요. 미량님 강의를 들으니까 next.js가 어떻게 동작하는지 (라우팅, seo...) 에대해 감을 잡을 수 있었습니다. 너무 감사해요.
목표
- Next.js를 간단하게 알아봅니다.
- mdx를 사용하는 방법을 알아봅니다.
- seo를 간단하게 알아봅니다.
- 블로그를 만드는 흐름
- 프로젝트가 만들어지는 흐름
배울 수 없는 것
- Next.js의 자세한 사용법
- 스타일링을 하는 방법
- 코드를 어떻게 작성해야하는 지
준비물
- Node.js v16.14.2 이상
- Git
- vscode
- yarn
이런 걸 만듭니다.
Next.js 특징
- SSR (Server-Side-Rendering)
- SSG (Static-Site-Generation)
- File-system Routing
pages/index.js
-> /
pages/blog/article.js
-> /blog/article
왜 Next.js를 사용하나요?
- Pre-rendering을 사용하므로 SEO 최적화에 유리
- 블로그의 경우 정적 컨텐츠이므로 SSG로 빠른 렌더링을 제공
React
의 경우 네트워크탭에서 index.html
을 보면 컨텐츠가 포함되어 있지 않음
즉, CSR로 빌드된 React
앱의 경우 크롤링을 했을 때
모든 페이지에서 컨텐츠가 포함되어 있지 않은 index.html
만 읽게 됨.
Next
의 경우 네트워크탭에서 index.html
을 보면 컨텐츠가 포함되어 있음
즉, SSG로 빌드된 html
을 렌더링해 컨텐츠까지 크롤링 가능
1️⃣ 1. 시작하기
- 해당 브랜치
git clone -b 1/start https://github.com/MiryangJung/Build-Own-blog-With-Next.js
보일러플레이트 설치
불필요 폴더 및 파일 삭제
- pages/api
- styles/Home.module.css
- pages/index.tsx
tsconfig 설정
유연한 진행을 위해 strict false 사용
tailwind 설정
vscode 확장프로그램 설치
- dbaeumer.vscode-eslint
- bradlc.vscode-tailwindcss
- esbenp.prettier-vscode
tailwind nextjs quide
Dev 모드로 실행
2️⃣ 2. 라우팅
- 해당 브랜치
git clone -b 2/routing https://github.com/MiryangJung/Build-Own-blog-With-Next.js
페이지 생성
/
페이지
/blog
페이지
GNB 만들기
GNB : Global Navigation Bar
next/link
next-js-link-vs-router-push-vs-a-tag
nav 링크들을 쉽게 관리하기 위해 navlinks
생성
navlinks
를 읽는 Nav
컴포넌트 생성
Container
생성
Container
적용
3️⃣ 3. 스타일링
- 해당 브랜치
git clone -b 3/styling https://github.com/MiryangJung/Build-Own-blog-With-Next.js
쉬운 데이터 관리를 위해 metadata.ts
생성
public
폴더에 logo.jpg
생성, Header 스타일링
/home 에서 사용할 최근 게시물 목록 컴포넌트 생성
public
폴더에 home.jpg
생성, /home 스타일링
/blog 글 목록에 사용될 컴포넌트 생성
/blog 스타일링
4️⃣ 4. contentlayer
- 해당 브랜치
git clone -b 4/contentlayer https://github.com/MiryangJung/Build-Own-blog-With-Next.js
contentlayer
"contentlayer": "^0.2.6" 버전 사용
Tip! 아직 베타단계인 라이브러리라서 Who is using Contentlayer? 초반에 블로그 이름 올릴 수 있음
contentlayer
설치
contentlayer
설정
Next.js 플러그인으로 설정
.mdx
파일 생성
path 설정
서버를 재실행하면 아래와 같은 문구가 나타남
.contentlayer/generated/Post 에서 생성된 document를 확인할 수 있음
Generated 1 documents in .contentlayer
BlogPost
를 title, des 를 props로 받도록 변경
생성된 posts를 읽어서 Blog 목록으로 반환
getStaticeProps : 사전 렌더링 프로세스 동안 이 함수를 실행, 즉 빌드할 때 실행
똑같은 방법으로 최근게시물에도 적용
RecentPosts도 컴포넌트를 분리 가능하나, 실습을 위해 아래와 같은 형태 사용
5️⃣ 5. Blog Post
- 해당 브랜치
git clone -b 5/post https://github.com/MiryangJung/Build-Own-blog-With-Next.js
blog 글 페이지 생성
post code를 html로 변환
getStaticePaths
: 빌드되어야할 동적 라우트들을 명시
기본 html 컨텐츠에 스타일을 추가해주는 tailwind 플러그인 설치
@tailwindcss/typography
6️⃣ 6. SEO
- 해당 브랜치
git clone -b 6/seo https://github.com/MiryangJung/Build-Own-blog-With-Next.js
Search Engine Optimization
검색 엔진에서의 노출도를 높이도록 사이트를 개선하는 최적화 작업
참고 코드
핸즈온에서 다루지 않지만 사용하면 좋은 라이브러리
next-seo
metadata에 값 추가
Head에 custommeta를 적용할 수 있게 수정
blog post에 custommeta 설정
sitemap 생성
7️⃣ 7. 배포
vercel
- 블로그 코드를 github에 올리기
- vercel 접속 후 로그인
- New Project 클릭
- 블로그 repo import
- project name 설정
- deploy