Next.js 블로그 배포 흐름: PM2와 Nginx로 운영하기
Next.js Markdown 블로그를 PM2 내부 포트와 Nginx 프록시로 운영하는 기본 흐름을 정리했습니다.
요약
Next.js 블로그를 운영할 때 개발 서버로만 실행하면 안 됩니다. 실제 운영에서는 production build를 만들고, PM2 같은 프로세스 매니저로 실행하고, Nginx가 공개 도메인으로 프록시하도록 구성하는 편이 안정적입니다. Futory도 이 구조로 운영합니다.
핵심은 역할을 나누는 것입니다. Next.js는 앱을 렌더링하고, PM2는 프로세스를 살려두며, Nginx는 외부 요청과 HTTPS를 처리합니다. 각 계층을 따로 검증하면 문제가 생겼을 때 원인을 찾기 쉽습니다.
기본 구조
Futory 같은 개인 기술 블로그는 다음 구조로 충분합니다.
- Next.js 앱: Markdown 글을 읽어 페이지 생성
- 내부 포트:
127.0.0.1:8042 - PM2 프로세스:
futory-wordblog - Nginx:
https://futory.oig.kr요청을 내부 포트로 전달 - Certbot: HTTPS 인증서 관리
이 구조는 단순하지만 실전 운영에 필요한 요소를 갖추고 있습니다. 데이터베이스가 없는 Markdown 블로그라면 관리 포인트도 적습니다.
배포 순서
일반적인 배포 순서는 다음과 같습니다.
1. 수정한 파일을 서버 경로에 반영한다.
2. npm install 또는 npm ci로 의존성을 맞춘다.
3. 콘텐츠 검증 스크립트를 실행한다.
4. npm run build로 production build를 만든다.
5. PM2 프로세스를 재시작한다.
6. 내부 포트가 응답하는지 확인한다.
7. 공개 도메인이 새 화면을 보여주는지 확인한다.
이 순서에서 하나라도 빠지면 “로컬에서는 바뀌었는데 사이트는 그대로” 같은 문제가 생깁니다.
PM2를 쓰는 이유
PM2는 Node.js 앱을 계속 실행해주는 도구입니다. 터미널을 닫아도 프로세스가 살아 있고, 재시작이나 로그 확인도 편합니다. 작은 블로그에는 Kubernetes 같은 큰 시스템보다 PM2가 더 현실적일 때가 많습니다.
다만 PM2가 실행 중이라고 해서 앱이 최신 상태라는 뜻은 아닙니다. 코드를 바꾼 뒤에는 빌드와 재시작이 필요합니다. 환경 변수가 바뀌었다면 --update-env 옵션도 함께 확인해야 합니다.
Nginx에서 확인할 것
Nginx는 외부 사용자가 접속하는 입구입니다. 내부 포트가 정상이어도 Nginx 설정이 잘못되면 공개 도메인은 실패할 수 있습니다. 반대로 공개 도메인이 정상이어도 내부 포트를 잘못 확인하면 엉뚱한 서비스를 보고 있을 수 있습니다.
그래서 배포 후에는 내부 포트와 공개 URL을 둘 다 확인해야 합니다. Futory에서는 8042가 맞는 포트이고, 다른 서비스가 쓰는 포트와 혼동하지 않는 것이 중요합니다.
자주 묻는 질문
Q. Next.js는 정적 export로만 운영해도 되나요?
글 구조가 단순하면 가능하지만, App Router와 서버 기능을 활용하려면 일반 Next.js 서버 운영이 편합니다.
Q. PM2 대신 systemd를 써도 되나요?
가능합니다. 중요한 것은 프로세스를 안정적으로 관리하고, 재시작과 로그 확인이 가능해야 한다는 점입니다.
Q. 배포가 성공했는지 가장 확실히 보는 방법은 무엇인가요?
공개 도메인에서 새 문구나 새 글이 실제로 보이는지 확인하는 것입니다. 빌드 성공만으로는 충분하지 않습니다.
결론
Next.js 블로그 운영은 어렵게 시작할 필요가 없습니다. PM2와 Nginx만으로도 충분히 안정적인 구조를 만들 수 있습니다. 중요한 것은 배포와 검증을 단계별로 나누고, 어떤 포트와 프로세스가 어떤 서비스를 담당하는지 명확히 기록하는 것입니다.