윈도우 환경에서 애플리케이션을 서비스로 등록하여 컴퓨터가 부팅될 때 자동으로 실행되게 하고 싶다면, NSSM(Non-Sucking Service Manager)이 최적의 선택입니다. 일반 실행 파일이나 스크립트를 윈도우 서비스로 변환하고 관리할 수 있는 이 강력한 도구의 사용법을 상세히 알아보겠습니다.
NSSM이란 무엇인가?
NSSM은 "Non-Sucking Service Manager"의 약자로, 윈도우에서 일반 애플리케이션을 서비스로 변환하여 실행할 수 있게 해주는 오픈소스 도구입니다. 기본 윈도우 서비스 관리자와 달리, 다양한 설정 옵션과 직관적인 인터페이스를 제공하며 크래시 자동 복구 기능까지 갖추고 있습니다.
NSSM의 주요 특징
- 콘솔 애플리케이션을 윈도우 서비스로 변환
- 서비스 시작/중지/재시작 기능
- 서비스 충돌 시 자동 재시작
- 상세한 로그 관리
- 서비스 종속성 설정
- 환경 변수 및 작업 디렉터리 구성
- 다양한 입출력 리디렉션 옵션
NSSM 설치하기
방법 1: 공식 웹사이트에서 다운로드
- NSSM 공식 웹사이트에서 최신 버전(현재 2.24)을 다운로드합니다.
- 다운로드한 ZIP 파일을 원하는 위치에 압축 해제합니다.
- 시스템 아키텍처에 맞는 버전(32비트 또는 64비트)의 실행 파일을 사용합니다.
방법 2: Chocolatey 패키지 관리자 사용
Chocolatey가 설치되어 있다면, 다음 명령어로 간단히 설치할 수 있습니다:
choco install nssm
설치 확인
명령 프롬프트(관리자 권한)에서 다음 명령어를 실행하여 NSSM이 제대로 설치되었는지 확인합니다:
nssm --version
새 서비스 생성하기
NSSM을 사용하여 서비스를 만드는 방법은 GUI 모드와 명령줄 모드 두 가지가 있습니다.
GUI 모드로 서비스 생성
- 관리자 권한으로 명령 프롬프트를 실행합니다.
- 다음 명령어를 입력합니다:
nssm install
- NSSM 설치 대화상자가 나타납니다:
- 다음 필드를 차례로 입력합니다:
- Service name: 서비스 이름 (예: MyNodeApp)
- Path: 실행 파일 경로 (예: C:\Program Files\nodejs\node.exe)
- Startup directory: 작업 디렉터리 (예: C:\MyNodeApp)
- Arguments: 명령줄 인수 (예: app.js)
- 필요에 따라 다른 탭에서 추가 설정을 구성합니다:
- Details: 서비스 표시 이름, 설명, 시작 유형 등
- Log on: 서비스 실행 계정 설정
- I/O: 표준 입출력 리디렉션
- File rotation: 로그 파일 순환 설정
- Environment: 환경 변수 설정
- Dependencies: 서비스 종속성 설정
- Process: 프로세스 우선순위 및 CPU 선호도 설정
- Shutdown: 종료 관련 옵션 설정
- Exit actions: 종료 시 실행할 작업 설정
- "Install service" 버튼을 클릭하여 서비스를 생성합니다.
명령줄로 서비스 생성
GUI 없이 직접 명령줄로 서비스를 생성할 수도 있습니다:
nssm install MyNodeApp "C:\Program Files\nodejs\node.exe" "C:\MyNodeApp\app.js"
기본 설정 이외에 추가 매개변수를 설정하려면:
nssm set MyNodeApp AppDirectory "C:\MyNodeApp"
nssm set MyNodeApp AppStdout "C:\MyNodeApp\logs\output.log"
nssm set MyNodeApp AppStderr "C:\MyNodeApp\logs\error.log"
nssm set MyNodeApp Description "My Node.js Application Service"
nssm set MyNodeApp Start SERVICE_AUTO_START
서비스 관리하기
서비스 상태 관리
NSSM이나 Windows 서비스 관리자를 통해 서비스를 제어할 수 있습니다.
NSSM 명령어 사용
# 서비스 시작
nssm start MyNodeApp
# 서비스 중지
nssm stop MyNodeApp
# 서비스 재시작
nssm restart MyNodeApp
# 서비스 상태 확인
nssm status MyNodeApp
Windows 서비스 관리자 사용
- Win + R 키를 누르고 services.msc를 입력하여 서비스 관리자를 엽니다.
- 등록한 서비스를 찾아 마우스 오른쪽 버튼으로 클릭하여 '시작', '중지', '다시 시작' 등의 작업을 수행할 수 있습니다.
서비스 구성 수정
이미 설치된 서비스의 설정을 GUI로 수정하려면:
nssm edit MyNodeApp
명령줄에서 개별 설정을 수정하려면:
nssm set MyNodeApp AppParameters "--production --port=3000"
서비스 제거
더 이상 필요하지 않은 서비스를 제거하는 방법:
# 확인 없이 제거
nssm remove MyNodeApp confirm
# 대화 상자로 확인 후 제거
nssm remove MyNodeApp
고급 설정 옵션
로그 파일 리디렉션
서비스 출력을 로그 파일로 리디렉션하여 문제 해결에 활용할 수 있습니다:
nssm set MyNodeApp AppStdout "C:\MyNodeApp\logs\output.log"
nssm set MyNodeApp AppStderr "C:\MyNodeApp\logs\error.log"
로그 파일 순환(rotation) 설정:
# 파일 크기가 1MB를 초과하면 순환
nssm set MyNodeApp AppRotateFiles 1
nssm set MyNodeApp AppRotateBytes 1048576
# 최대 로그 파일 수 설정 (0은 무제한)
nssm set MyNodeApp AppRotateOnline 1
nssm set MyNodeApp AppRotateSeconds 86400
자동 재시작 설정
애플리케이션 충돌 시 자동으로 재시작하도록 설정:
# 프로세스 종료 시 재시작 (항상)
nssm set MyNodeApp AppRestartDelay 5000
특정 종료 코드에 대해서만 재시작:
# 종료 코드 1, 255에 대해서만 재시작
nssm set MyNodeApp AppThrottle 5000
nssm set MyNodeApp AppExit Default Restart
nssm set MyNodeApp AppExit 0 Exit
환경 변수 설정
애플리케이션에 필요한 환경 변수를 설정할 수 있습니다:
nssm set MyNodeApp AppEnvironmentExtra "NODE_ENV=production
PORT=3000
DB_HOST=localhost
DB_USER=admin"
서비스 종속성 설정
다른 서비스가 먼저 시작된 후에 실행되도록 종속성을 설정:
# MySQL 서비스에 종속
nssm set MyNodeApp DependOnService MySQL
여러 종속성을 설정하려면:
nssm set MyNodeApp DependOnService "MySQL PostgreSQL"
실제 활용 예제
예제 1: Node.js 애플리케이션 서비스
Node.js 애플리케이션을 윈도우 부팅 시 자동으로 실행되는 서비스로 등록:
# 서비스 생성
nssm install MyNodeApp "C:\Program Files\nodejs\node.exe" "C:\MyNodeApp\server.js"
# 작업 디렉터리 설정
nssm set MyNodeApp AppDirectory "C:\MyNodeApp"
# 환경 변수 설정
nssm set MyNodeApp AppEnvironmentExtra "NODE_ENV=production
PORT=3000"
# 로그 파일 설정
nssm set MyNodeApp AppStdout "C:\MyNodeApp\logs\output.log"
nssm set MyNodeApp AppStderr "C:\MyNodeApp\logs\error.log"
nssm set MyNodeApp AppRotateFiles 1
nssm set MyNodeApp AppRotateBytes 1048576
# 자동 재시작 설정
nssm set MyNodeApp AppRestartDelay 10000
# 서비스 설명 추가
nssm set MyNodeApp Description "Node.js 웹 애플리케이션 서비스"
# 서비스 시작
nssm start MyNodeApp
예제 2: Python 스크립트 서비스화
Python 스크립트를 윈도우 서비스로 등록:
# 서비스 생성
nssm install PythonService "C:\Python39\python.exe" "C:\Scripts\myservice.py"
# 작업 디렉터리 설정
nssm set PythonService AppDirectory "C:\Scripts"
# 로그 파일 설정
nssm set PythonService AppStdout "C:\Scripts\logs\output.log"
nssm set PythonService AppStderr "C:\Scripts\logs\error.log"
# 서비스 시작 유형 설정 (지연된 자동 시작)
nssm set PythonService Start SERVICE_DELAYED_AUTO_START
# 서비스 시작
nssm start PythonService
예제 3: 배치 파일 서비스화
배치 파일을 서비스로 등록하여 정기적인 작업 실행:
# 서비스 생성
nssm install BatchService "C:\Windows\System32\cmd.exe" "/c C:\Scripts\daily-backup.bat"
# 작업 디렉터리 설정
nssm set BatchService AppDirectory "C:\Scripts"
# 로그 설정
nssm set BatchService AppStdout "C:\Scripts\logs\batch-output.log"
nssm set BatchService AppStderr "C:\Scripts\logs\batch-error.log"
# 서비스 시작
nssm start BatchService
문제 해결 및 팁
서비스가 시작되지 않는 경우
- 로그 파일 확인
- type "C:\MyNodeApp\logs\error.log"
- 이벤트 뷰어 확인
- Win + R → eventvwr.msc → Windows 로그 → 애플리케이션
- 직접 실행 테스트
- "C:\Program Files\nodejs\node.exe" "C:\MyNodeApp\app.js"
- 권한 문제 확인
- 서비스 계정이 필요한 파일과 디렉터리에 접근 권한이 있는지 확인
성능 최적화 팁
- CPU 선호도 설정:
- nssm set MyNodeApp AppPriority NORMAL_PRIORITY_CLASS
- 메모리 사용량이 높은 서비스의 경우 자동 재시작 고려:
- nssm set MyNodeApp AppThrottle 3600000
- 종료 시간 설정 (기본값보다 길게):
- nssm set MyNodeApp AppStopMethodConsole 15000
보안 관련 팁
- 최소 권한 원칙 적용 - 서비스 계정 설정:
- nssm set MyNodeApp ObjectName ".\ServiceUser" "Password"
- 중요한 비밀번호나 API 키는 환경 변수 대신 보안 저장소 활용
- 서비스 파일과 로그에 적절한 접근 제한 설정
NSSM 명령어 전체 참조
명령어 설명 사용 예
install | 새 서비스 설치 | nssm install ServiceName |
remove | 서비스 제거 | nssm remove ServiceName confirm |
start | 서비스 시작 | nssm start ServiceName |
stop | 서비스 중지 | nssm stop ServiceName |
restart | 서비스 재시작 | nssm restart ServiceName |
status | 서비스 상태 확인 | nssm status ServiceName |
edit | 서비스 설정 편집 | nssm edit ServiceName |
get | 서비스 매개변수 조회 | nssm get ServiceName AppDirectory |
set | 서비스 매개변수 설정 | nssm set ServiceName AppDirectory C:\App |
reset | 매개변수 기본값으로 재설정 | nssm reset ServiceName AppDirectory |
결론
NSSM은 윈도우 환경에서 애플리케이션을 서비스로 관리하는 강력하고 유연한 도구입니다. 이 글에서 살펴본 것처럼, 간단한 명령어로 다양한 종류의 애플리케이션을 신뢰성 있는 윈도우 서비스로 변환할 수 있습니다.
특히 서버 애플리케이션, 백그라운드 작업, 모니터링 스크립트 등을 운영하는 환경에서 NSSM은 시스템 관리자와 개발자에게 필수적인 도구입니다. 자동 재시작, 로그 관리, 종속성 설정 등의 고급 기능을 통해 서비스의 안정성과 가용성을 크게 향상시킬 수 있습니다.
이 가이드를 통해 NSSM의 기본 사용법부터 고급 설정까지 충분히 이해하셨기를 바랍니다. 윈도우 서버 환경에서 더 안정적이고 관리하기 쉬운 서비스를 구축하는 데 NSSM이 큰 도움이 될 것입니다.
'자동화' 카테고리의 다른 글
네이버 스마트스토어 리뷰 크롤링 프로그램 (2) | 2024.09.20 |
---|---|
쿠팡 상품 리뷰 크롤링 프로그램 (3) | 2024.09.09 |