📌 PM2 란?
PM2는 Node.js 애플리케이션을 백그라운드에서 안정적으로 관리하는 프로세스 매니저입니다.
Next.js 서버를 PM2로 실행하면, 애플리케이션이 예기치 않게 종료되더라도 자동으로 재시작되며,
서버 로그 관리와 실시간 모니터링이 가능합니다.
Next.js 프로젝트를 먼저 빌드(npm run build)한 후, PM2로 서버를 시작합니다.
- 안정성 : 서버가 중단되면 자동 재시작하여 안정적
- 백그라운드 실행 : 터미널을 닫아도 서버가 계속 작동
- 로그 관리 : 일반 로그와 오류 로그를 관리
- 자동 재시작 : 애플리케이션이 크래시되더라도 자동으로 복구
// ▶ ⚙️package.json
"scripts": {
"dev": "npx next dev",
"build": "npx next build",
"start": "npx next start",
"test": "echo \"Error: no test specified\" && exit 1"
},
🚀 리눅스 PM2 사용
리눅스 환경에서는 PM2로 Next.js 서버를 실행하는 것이 간단합니다.
✅ PM2 설치
npm install pm2 -g
✅ Next.js 빌드
npm run build
✅ PM2로 Next.js 서버 실행
npx next start 명령으로 서버를 시작하고, PM2가 이를 백그라운드에서 관리하도록 설정합니다.
예) pm2 start npm --name "mindmood" -- start
pm2 start npm --name "my-app" -- start
✅ 자동 시작 설정
시스템이 재부팅되어도 PM2가 서버를 자동으로 시작합니다.
pm2 startup
pm2 save
➕ 리눅스 크론탭(Crontab)
Crontab은 리눅스에서 지정된 시간에 자동으로 명령어를 실행할 수 있는 스케줄러입니다.
PM2와 함께 사용하여 주기적으로 서버를 재시작하거나 로그를 정리할 수 있습니다.
1️⃣ Crontab 파일 열기
crontab -e
2️⃣ 스케줄링 형식 : "분 시 일 월 요일" 순서 설정
# 매일 자정에 PM2로 서버 재시작
# ➡️ 0 0 * * * : 매일 0시 0분에 실행
# ➡️ pm2 restart mindmood : PM2로 mindmood서버 프로세스 재시작
0 0 * * * pm2 restart mindmood
# 매주 일요일 자정에 로그 정리
0 0 * * 0 pm2 flush
🚀 윈도우 PM2 사용
Windows 환경에서는 npx next start 명령을 PM2로 직접 실행하기 어려울 수 있어,
별도의 스크립트를 사용해 간접적으로 실행하는 방법을 권장합니다.
⚙️ startscript.js 파일 생성 (ES 모듈)
'⚙️startscript.js' ➡️ 프로젝트 루트에 파일 생성
/**
* ▶ startscript.js
* Windows 환경에서 PM2로 Next.js 서버 실행
*/
import { exec } from "child_process";
exec("npx next start", (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`Stderr: ${stderr}`);
return;
}
console.log(`Stdout: ${stdout}`);
});
✅ PM2 설치
npm install pm2 -g
✅ PM2로 스크립트(startscript.js) 실행
PM2가 startscript.js를 통해, Next.js 서버를 간접적으로 실행하도록 합니다.
예) pm2 start startscript.js --name "mindmood"
pm2 start startscript.js --name "my-app"
✅ 로그 확인
실시간 로그를 확인하려면 다음 명령을 사용합니다.
pm2 logs my-app
🔎 로그 파일 확인
PM2 기본적으로 C:\Users\USER\.pm2\logs 경로에 로그 파일을 저장합니다.
- 일반 로그 : 프로젝트명-out.log
- 오류 로그 : 프로젝트명-error.log
➕ PM2 간단한 명령어
목록 보기 | pm2 list |
서버 시작 | pm2 start 앱이름 |
서버 종료 | pm2 stop 앱이름 |
서버 재시작 | pm2 restart 앱이름 |
전체 업데이트 | pm2 update |
변경사항 저장하기 | pm2 save |
로그 보기 | pm2 logs |
'📌 Front End > └ React' 카테고리의 다른 글
[React] 리액트 UI 컴포넌트 라이브러리 - Material UI, Ant Design, Chakra UI, Blueprint JS, Blueprint UI (2) | 2024.11.26 |
---|---|
[React] Next.js 다국어(next-i18next) ES모듈 사용 시 에러 해결 방법 - CommonJS (4) | 2024.10.15 |
[React] Next.js로 React와 TypeScript 환경 설정하기 (4) | 2024.10.11 |
[React] 서버리스 아키텍처와 클라우드 컴퓨팅 - IaaS, PaaS, BaaS, FaaS (7) | 2024.10.10 |
[React] 리액트에서 Nivo Chart 데이터 시각화 (3) | 2024.10.06 |