시스템(Windows)

윈도우 서비스로 손쉽게 등록하고 관리할 수 있게 해주는 오픈소스 도구인 NSSM 에 대해 알아보겠습니다.

forward error correction Circle 2025. 5. 15. 08:15
반응형

Ⅰ. NSSM 이란?

 "Non-Sucking Service Manager"의 약자로, 윈도우 환경에서 일반 애플리케이션(실행 파일, 배치 파일 등)을 윈도우 서비스로 손쉽게 등록하고 관리할 수 있게 해주는 오픈소스 도구입니다. NSSM을 사용하면 서버 프로그램, 콘솔 앱, 백그라운드 작업 등을 윈도우 서비스로 실행할 수 있어, 시스템 부팅 시 자동 시작이나 장애 발생 시 자동 재시작 등 다양한 관리 기능을 활용할 수 있습니다.

Ⅱ. NSSM 필요한 이유

Windows에서는 일반적으로 서비스 형태로 동작하지 않는 프로그램은 부팅 시 자동 실행되거나 충돌 후 재시작되지 않습니다. nssm은 문제점에 대해 조치 할 수 있습니다.
 ⅰ) .exe로 배포된 서버 애플리케이션
 ⅱ) Node.js, Python, Java 애플리케이션
 ⅲ) 백업, 모니터링, 스크립트 런처 등

Ⅲ. NSSM 주요 특징 및 기능

 ⅰ) 일반 프로그램을 서비스로 등록: GUI 또는 명령행을 통해 쉽게 서비스로 등록할 수 있습니다.
 ⅱ) 자동 재시작: 서비스가 비정상적으로 종료되면 자동으로 재시작할 수 있습니다.
 ⅲ) 입출력 리디렉션: 서비스의 표준 출력/에러 로그를 파일이나 이벤트 로그로 저장할 수 있어, 문제 진단이 편리합니다.
 ⅳ) 환경 변수, 작업 디렉터리 등 다양한 설정: 서비스 실행에 필요한 환경을 세밀하게 설정할 수 있습니다.
 ⅴ) 서비스 관리 자동화: GUI와 CLI 모두 지원하여, 배포 자동화나 스크립트 관리에 활용할 수 있습니다.
 ⅵ) 종속성 및 재시작 정책: 서비스의 종속성 설정, 재시작 간격 및 횟수 등 세부 정책을 지정할 수 있습니다

Ⅳ. NSSM 사용 방법

 ⅰ) 다운로드
   ■ 공식 사이트: https://nssm.cc/download
   ■ GitHub: https://github.com/kohsuke/nssm

 ⅱ) 서비스 등록 방법 (GUI)

nssm.exe install [서비스이름]

 


실행 시 GUI 창이 뜨며 아래 항목들을 입력:

필드 예시
Application Path C:\MyApp\myapp.exe
Startup Directory C:\MyApp
Arguments (필요 시 추가)
Log on Local System, 또는 특정 사용자 계정 설정 가능
I/O 탭 stdout과 stderr 리디렉션 파일 지정 가능

→ OK 클릭하면 서비스 등록 완료


 ⅲ) 명령어로 서비스 등록 (CLI)

nssm.exe install MyServiceName "C:\MyApp\myapp.exe" --arg1 --arg2


 ⅳ) 서비스 시작/중지

net start MyServiceName
net stop MyServiceName


 ⅴ) 서비스 삭제

nssm.exe remove MyServiceName confirm


 ⅵ) 로그 설정 예시

nssm.exe install MyAppService
GUI에서 I/O 탭으로 이동하여:

Redirect stdout: C:\Logs\myapp_stdout.log

Redirect stderr: C:\Logs\myapp_stderr.log

→ 프로그램이 출력하는 콘솔 로그가 서비스 실행 중에도 저장됩니다.

Ⅴ. NSSM 사용 사례

사례 설명
Prometheus, Grafana, Fluentd 등 윈도우 환경에서 .exe로 서비스 등록
Python FastAPI 앱 uvicorn main:app 명령을 서비스로 등록
Java JAR 실행 java -jar myapp.jar 명령을 서비스화
Node.js   node app.js를 백그라운드에서 유지 실행

Ⅵ. NSSM 장점

 ⅰ)  일반 실행 파일이나 스크립트도 윈도우 서비스로 손쉽게 등록 가능
       (별도의 서비스용 프로그램이 아니어도 서비스로 실행 가능).
 ⅱ) 서비스가 비정상 종료되면 자동으로 재시작
      (애플리케이션이 죽었을 때 신속하게 복구).
 ⅲ) 서비스의 표준 출력, 표준 에러를 파일이나 이벤트 로그로 저장 가능
(문제 진단과 유지보수에 유리).

 ⅳ) GUI와 CLI 모두 지원하여, 초보자도 쉽게 설정 및 관리 가능.

 ⅴ) 서비스 실행 환경(환경 변수, 작업 디렉터리, 우선순위, CPU affinity 등) 세밀하게 설정 가능.

 ⅵ) 서비스 종료 시 다양한 방식(Graceful/강제 종료)으로 안전하게 프로세스 관리.

 ⅶ) 설치 및 제거가 간편하고, 설정 변경이 직관적.

 ⅷ) 공개 소프트웨어로, 라이선스 제한 없이 자유롭게 사용 가능.

 ⅸ) 스크립트, 콘솔 앱 등 다양한 유형의 프로그램을 서비스로 운영할 때 최적

 

반응형