100log

About

Next.js 기반 나만의 개발 블로그 제작기

blog 제작기

Next.js 기반 블로그

계기

1. 커스텀 디자인

2. 애정

3. FE 개발자

과정

1. 기능 정리

2. 기술 스택

3. 디렉토리 구조

main-img

본 포스트는 Next.js 14.2버전, app 라우터 방식을 기준으로 작성되었습니다.
소스코드는 Github Repository 에서 확인할 수 있습니다.

Next.js 기반 블로그

계기

여러 블로그 플랫폼들이 서비스하고 있지만 이를 사용하지 않고 직접 제작하게 된 이유는 간단하다.


1. 커스텀 디자인

평소 간결하고 깔끔한 디자인을 선호하는 편인데 원하는 대로 커스터마이징 할 수 있다는게 좋았다.
물론 서비스중인 블로그들도 커스터마이징이 가능하지만 좀 더 완벽하게 나만의 취향이 들어간 디자인을 만들고 싶었다.


2. 애정

내가 직접 만든 블로그이기에 다른 서비스들보다 더 애정을 갖고 꾸준히 작성하게 되지 않을까? 라는 생각이 들었는데 정말 애정을 갖고 관리하게 되었다.


3. FE 개발자

FE 개발자로 성장하고 싶은 나에게 스터디 겸 또 하나의 작업물이 될 수 있다는게 장점이다.
요새 개발자라면 직접 만든 블로그나 사이트 하나씩은 갖고 있던데, 나만 빠지면 섭하잖아요?


과정

이미 많은 분들이 Next.js 기반 블로그를 만들었고 레퍼런스를 공유해주셔서 참고하여 stack 및 기능들을 정했다.


1. 기능 정리

주요 기능

  • 전체 & 카테고리별 게시글 목록
  • 게시글 상세 페이지
  • 게시글 상세 내용 목차(사이드 바)
  • 댓글 기능
  • 자기소개 페이지(about)

부가 기능

  • 최근 게시글 고정
  • 게시글 목차(사이드 바)
  • 라이트 & 다크 모드
  • 현 위치 날씨 정보

2. 기술 스택

  • Framework: Next.js(14)
    프론트앤드 개발자라면 현재 필수라고 여겨지는 프레임워크인 것 같다.
    Next.js를 사용하는 회사도 늘어나고 있고 이번 기회에 Next.js에 대해 공부도하고 친해질 수 있는 기회라고 생각해 선택했다.

  • Design: Tailwind css & MUI
    핫한 디자인 라이브러리 Tailwind css, 처음엔 어색했지만 Tailwind css를 기반으로 작성한 전역 스타일을 혼합하여 사용하니 정말 편리하다고 느꼈다.
    추가로 간단하게 import하여 사용할 수 있는 MUI(Material-UI)를 사용해 Dialog와 같은 컴포넌트를 구현했다.
    * MUI: 구글의 디자인 철학인 Material Design 원칙을 기반으로 한 React UI 라이브러리

  • 게시글 관련: MDX(작성) & gray-matter, next-mdx-remote(파싱)
    gray-matter: Markdown 파일에서 제목, 날짜, 태그 등의 메타데이터 추출
    next-mdx-remote: 메타데이터와 콘텐츠를 분리한 후 콘텐츠를 HTML과 React 컴포넌트로 변환
    mdx(Markdown with jsx)로 작성된 파일의 메타 정보와 본문을 파싱해주는 gray-matter, next-mdx-remote를 사용했다.
    처음 접해보는 라이브러리지만 Next.js나 Markdown 기반 콘텐츠를 다루는 프로젝트에서 자주 사용되어 관련 정보를 쉽게 찾아볼 수 있었다.

  • 댓글: Giscus
    Github Discussions를 사용해서 댓글 시스템을 구현할 수 있게 해주는 라이브러리다.
    오픈 소스스에 데이터베이스도 필요 없고 간단하게 댓글 기능을 구현할 수 있었다.

  • 날씨 정보: Openweathermap api
    Openweathermap api를 사용해 현재 위치의 날씨 정보를 구현했다.
    부분적 무료이지만 무료버전을 사용해도 무리가 없을거라 생각해 선택했다.

  • 상태 관리: SWR & Zustand
    SWR은 자동 캐싱 및 재검증이 가능하고 에러 핸들링 시 재시도 로직과 같은 기능들이 쉽게 구현이 가능하여 선택했다.
    Zustand 또한 간결하고 직관적이며 보일러플레이트 없이 전역 상태를 쉽게 관리할 수 있다.
    * 보일러플레이트: 애플리케이션의 핵심 로직과 크게 관련 없는, 반복적이고 템플릿처럼 사용되는 코드

  • 배포: Vercel
    Vercel은 Next.js 개발 팀에서 만든 호스팅 서비스다.
    Github Repository와 연동하면 매번 push를 진행할 때 마다 자동으로 빌드 후 배포해주기 때문에 관리가 편하다.


3. 디렉토리 구조

project
├── app
│   ├── public/Image // 컴포넌트에서 사용할 이미지
│   ├── components
│   ├── store // 상태관리
│   ├── utils // 상수 및 함수파일
├── posts // 게시글 mdx 파일
├── public
│   ├── images // 게시글 내부에서 사용할 이미지
│   ├── project_images // about 페이지 프로젝트 정보에서 사용할 이미지
├── libs
├── type // 타입파일

블로그 제작 관련 기본적인 사항은 여기서 마치고 기능 개발 및 구현 과정은 다음 게시글에서 다뤄볼 예정입니다.
빈약하지만 읽어주셔서 감사합니다.☺️

profile_img백종민
1993
Seoul
커리어 발전을 위한 새로운 기회를 찾고있습니다.