블로그 만들기 1 - Nas에 DB 넣어 두고, 배포할 때만 참조하기

블로그를 만들기 시작한 이유, SSG

블로그 만들기 1 - Nas에 DB 넣어 두고, 배포할 때만 참조하기

블로그를 만들기 시작한 이유, SSG

작성일 : 2025.01.19

blog
Next.js
MongoDB

블로그 만들기 시작 이유

  • 회사에서 몇 분이 블로그를 만들기 시작해서, 나도 자극을 받았음.
  • TIL을 안 쓴 지 1년이 넘었고, 마침 블로그를 새로 만들어보자는 생각이 들어서 시작하게 됨.

구상

  • 최대한 돈을 안 쓰는 방법을 고민.
  • 예전에는 마크다운 파일을 직접 읽는 방식을 사용했지만, 나중에 데이터를 다양하게 활용하고 싶어서 DB를 쓰기로 결정.
  • SSR(서버 사이드 렌더링)을 구현하면 Lambda 함수 요청 시마다 리소스를 사용(= 돈 지출)하게 되니, SSG(스태틱 사이트 제너레이션) 방식을 택함.
    • 블로그 특성상 자주 변경되는 내용이 많지 않고, 댓글 기능은 별도 서비스(디스커스 등)를 붙이면 되겠다고 생각.
  • 개인 나스(NAS)를 데이터 서버로 쓰는 만큼, 클라이언트가 직접 DB에 통신하면 해킹 위험이 있다고 생각해 SSG로 결정.
    • (서버 보안 관리가 쉽지 않기도 함.)
  • 서버 개발에 익숙하지 않고, DB 설계를 깊게 하고 싶지 않아 NoSQL인 MongoDB를 선택.
  • DB에서 데이터를 긁어오는 로직은 빌드 타이밍에만 동작하도록 Next.js API로 구현할 예정.

NAS에서 MongoDB 세팅

  • 시놀로지 나스에 설치된 Docker로 MongoDB 이미지를 다운로드(CPU 문제로 4.4.9 구버전을 받음).
  • 컨테이너 세팅 후, /data/db/ 폴더를 나스 외부 폴더로 마운트해 DB 백업 및 관리를 쉽게 함.
  • 환경 변수를 통해 admin 계정을 설정한 뒤 컨테이너 실행.
  • MongoDB Compass로 정상 접속을 확인.
  • 라우터에서 27017 포트를 포트포워딩(보안을 위해 포트 번호 변경)해서 외부 접속을 열어줌.
  • 이전에 Docker에서 설정해둔 Nginx Proxy Manager로 개인 도메인을 잘 연결했는지, 그리고 SSL 처리가 정상적으로 되어 있는지도 재확인.
  • 개인 도메인 + 포트포워딩된 포트로 접속이 되는지 테스트.
  • 접속이 잘 되면 성공.

Next.js에서 MongoDB 연결

  • npm i mongodb 로 MongoDB 클라이언트를 설치.
  • app/api/post/[id]/route.ts 에서 DB에서 데이터를 가져오는 로직 구현.
  • .env.local 에 MongoDB 접속 정보를 입력.
  • API 경로는 http://localhost:3000/api 기준으로 설정.
  • 데이터를 API로 불러오는 부분에 cache: 'force-cache' 옵션을 넣어 SSG가 적용되도록 함.
  • 배포 환경에서도 .env.local과 동일하게 세팅(접속 주소만 배포용으로) 후, DB가 잘 가져와지는지 테스트.

정리

장점

  • 데이터를 파일로 직접 보유하듯이 관리 가능.
    (클라우드에 두고 백업해도 되지만, 나스에서 추가 백업 시스템으로 하드 장애를 대비 중)
  • DB 운영 비용이 발생하지 않음.
    (집 컴퓨터여도 상관없지만, 포트포워딩과 접속 주소 세팅은 조금 귀찮을 듯. 클라우드를 쓰면 추가 금액 발생)
  • Vercel 무료 플랜으로도 운영 가능.
    (정적 사이트라 리소스 사용이 많지 않아 부담이 적음)

단점

  • 실시간 정보(조회수, 댓글 등) 구현이 어려움.
  • 추후 검색 기능을 구현할 때, 저사양 컴퓨터에서 성능 문제가 생길 수 있음.
    • 사용자 브라우저 환경에서 검색 로직을 돌려야 하는데, 기기가 저사양이면 렌더링에 부담이 생길 수 있음.
    • 블로그 규모가 커지면 특히 더 걱정됨.
    • 그래도 구글 검색 등 외부 검색을 활용하는 방법도 존재.
copyright by dabin jeong