Node.js 운영 개요¶
운영 서버(Production Server) 에서 Node.js 애플리케이션을 안정적으로 실행하기 위한 운영 기준과 구조적 원칙을 정의함. 설치 명령이나 코드 예제를 나열하지 않음. “왜 이렇게 운영해야 하는가”에 대한 기준 문서임.
1. Node.js의 운영상 위치¶
운영 환경에서 Node.js는 다음 역할을 가짐.
- HTTP 요청을 직접 받지 않음
- TLS, 인증, 접근 제어를 담당하지 않음
- 비즈니스 로직 실행에만 집중함
즉,
**운영 환경에서 Node.js는 항상 Nginx 뒤에서 동작하는 Application Runtime 임
외부 트래픽 진입점은 반드시 Nginx가 담당함.
[ Client ]
↓
[ Nginx ] ← TLS / Routing / Security / Rate Limit
↓
[ Node.js ] ← Application Logic
2. 개발 환경과 운영 환경은 완전히 다름¶
Node.js는 개발 환경과 운영 환경의 성격이 크게 다름.
개발 환경¶
- 빠른 버전 전환
- 개인 PC / 로컬 환경
- nvm 사용 일반적
- 직접 실행 허용
운영 환경¶
- 안정성 최우선
- 장기 실행 프로세스
- systemd / PM2 연동 필수
- 예측 가능한 경로와 권한 필요
운영 환경 기준으로만 작성됨.
3. 운영 서버에서 nvm을 사용하지 않는 이유¶
운영 서버에서는 nvm 사용을 권장하지 않음.
요약하면, nvm은 개발 도구이며 운영 서버의 장기 실행 프로세스를 책임질 수 있는 도구가 아님.
이유¶
- nvm은 사용자 쉘 환경 전용 도구임
- systemd 서비스에서 nvm 환경이 로드되지 않음
- root 계정에 설치된 nvm을 일반 사용자에게 공유하는 구조는
- 권한 충돌
- PM2 실행 실패
- 보안 문제를 유발함
운영 환경에서는 다음 조건이 중요함.
/usr/bin/node와 같이 전역 경로가 명확할 것- systemd, PM2에서 환경 의존성 없이 실행 가능할 것
따라서 운영 서버에서는:
NodeSource 기반 전역 Node.js 설치만 허용함
4. Node.js 실행 경로 분리 원칙¶
운영 서버에서는 개발 경로와 실행 경로를 분리함.
권장 구조¶
/home/[User]/[ProjectName] → 서버 직접 빌드 / 원격 접속 개발 / 검증 경로
/var/www/[ProjectName]/current → 운영 실행 경로
이유¶
- 실수로 운영 파일을 수정하는 사고 방지
- 권한 및 SELinux 충돌 예방
- 운영 디렉터리를 “실행 기준점”으로 고정 가능
Node.js 애플리케이션의 실제 실행은
반드시/var/www/[ProjectName]/current기준으로 이루어져야 함.
5. Node.js 직접 실행을 허용하지 않는 이유¶
운영 서버에서 다음 방식은 허용하지 않음.
node index.js
npm run start
이유¶
- 프로세스 종료 시 자동 복구 불가
- 서버 재부팅 시 서비스 미기동
- 로그, 상태, 메모리 관리 불가
- 장애 발생 시 원인 추적 어려움
운영 환경의 표준 실행 방식¶
운영 환경에서 Node.js는 반드시 프로세스 매니저 하에서 실행함.
본 문서의 운영 표준은 PM2 사용을 전제로 함.
- PM2 (권장, 표준)
- systemd 기반 서비스 (예외적 사용)
PM2를 표준으로 사용하는 이유¶
- Node.js 프로세스 특성에 최적화됨
- 자동 재시작, 클러스터, 로그 관리 내장
- 환경 변수 및 실행 옵션 관리 용이
- 다수 Node 서비스 운영에 적합함
systemd를 직접 사용하는 경우¶
- PM2 사용이 제한된 특수 환경
- 단일 Node 프로세스만 운영하는 경우
- OS 레벨 서비스 통합이 반드시 필요한 경우
일반적인 Node.js 운영 환경에서는
PM2를 사용하는 것이 안정성과 운영 효율 측면에서 가장 적합함
따라서 이후 문서에서는
PM2 기반 운영을 기본 전제로 설명함.
6. Node.js와 Nginx의 책임 분리¶
| 항목 | Nginx | Node.js |
|---|---|---|
| TLS / HTTPS | ⭕ | ❌ |
| 접근 제어 | ⭕ | ❌ |
| Rate / Conn Limit | ⭕ | ❌ |
| 정적 파일 | ⭕ | ❌ |
| 비즈니스 로직 | ❌ | ⭕ |
Node.js는 네트워크 레이어가 아니라
애플리케이션 레이어에만 집중함.
7. 보안 및 네트워크 기본 원칙¶
- Node.js 포트는 외부에 노출하지 않음
127.0.0.1또는 내부 네트워크에서만 수신- 방화벽에서 Node 포트 오픈하지 않음
- 외부 접근은 Nginx만 허용함
- Node.js는 외부에서 직접 접근 가능한 서비스로 간주하지 않음
8. 정리¶
- Node.js는 운영 서버의 핵심 프로세스임
- 그러나 외부 진입점은 아님
- 안정성은 “설치 방법”이 아니라 “운영 구조”에서 결정됨
Node.js 운영의 기준선이며
이후 모든 설정의 전제가 됨.