Computer >> 컴퓨터 >  >> 시스템 >> Windows 10

NSSM으로 Windows 서비스를 만드는 방법 – 초보자도 따라 하는 완벽 가이드

컴퓨터에 로그인했는지 여부와 상관없이 앱이나 스크립트를 계속 실행해야 할 때가 있습니다. 포트를 모니터링하는 PowerShell 스크립트일 수도 있고, 홈 네트워크에서 웹 페이지를 호스팅하는 웹 서버일 수도 있습니다.

핵심은 컴퓨터가 켜져 있는 동안 프로세스, 스크립트 또는 프로그램을 계속 실행하고 싶다면 Windows 서비스를 만들어야 한다는 점입니다.

Windows 서비스를 만들려면 무엇이 필요한가?

Windows 10에서 Windows 서비스를 만들려면 다음과 같은 사전 준비물이 필요합니다.

  • 컴퓨터에 대한 관리자(Administrator) 권한
  • 서비스로 실행할 대상(PowerShell 스크립트, 프로그램 등)
  • NSSM(Non-Sucking Service Manager) 설치

NSSM(Non-Sucking Service Manager)이란?

이 독특한 이름에 대해 설명하지 않고 넘어갈 수는 없겠죠. 이름은 다소 유치하지만, 그 의미는 정확합니다. NSSM은 높은 안정성과 뛰어난 설정 기능을 갖춘 Windows 서비스를 만들 수 있는 가장 쉬운 방법 중 하나입니다. 게다가 무료 오픈소스 소프트웨어(OSS)라는 장점도 있습니다.

NSSM은 Windows 명령 프롬프트(CMD) 또는 그래픽 사용자 인터페이스(GUI)를 통해 사용할 수 있으므로 누구나 쉽게 활용할 수 있습니다. Windows 2000을 포함한 모든 버전의 Windows에서 작동하며, 32비트와 64비트 버전이 모두 제공됩니다. 64비트 컴퓨터를 사용한다면 먼저 64비트 버전을 시도해 보고, 문제가 있으면 32비트 버전으로 전환하면 됩니다.

NSSM은 공식 웹사이트에서 다운로드하거나 Git에서 클론하거나 Chocolatey 패키지 관리자를 통해 설치할 수 있습니다. 설치 방법은 선택한 경로에 따라 다르므로 NSSM의 공식 안내 문서를 참고하세요. 이 글의 예제에서는 NSSM 웹사이트에서 다운로드하여 C:\WINDOWS\system32 폴더에 설치하는 방법을 사용합니다.

NSSM으로 Windows 서비스 만들기

이번 예제에서는 CPU 평균 부하율을 기록하는 PowerShell 스크립트를 서비스로 만들어 보겠습니다.

  1. 아래 스크립트를 복사하여 log-CPULoadPercentage.ps1이라는 이름으로 저장합니다. 다른 사람이 접근하기 어려운 위치에 저장하는 것이 좋습니다. C:/Scripts 디렉터리를 만들어 그곳에 저장하고, Scripts 폴더 안에 Logs라는 하위 폴더도 함께 생성하세요. 스크립트 경로는 C:/Scripts/log-CPULoadPercentage.ps1이 되며, 이 경로는 나중에 필요하니 기억해 두세요.

참고: 아래 코드에서 # 기호 뒤의 내용은 주석이며 스크립트 동작에는 영향을 주지 않습니다.

CLS #선택 사항. 테스트 시 터미널을 깨끗하게 정리하는 데 유용합니다.

#이 스크립트와 같은 디렉터리에 Logs라는 이름의 폴더가 있어야 합니다
#로그 파일에 기록 내용이 저장됩니다.
Start-Transcript -Path "$PSScriptRoot\Logs\log-CPULoadPercentage-$(get-date -f yyyy-MM-dd).txt" -Append

#While 루프가 수동으로 중지할 때까지 계속 실행됩니다
While ($True){
#측정 시점을 알기 위한 타임스탬프 생성
$timeStamp = get-date -f yyyy-MM-h:mm:ss

#해당 시점의 평균 부하율을 가져온 후 5초 대기 후 반복
$cpuLoadPercent = Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object Average;Start-Sleep -Seconds 5

#@{Average=13} 같은 이상한 문자열이 출력되지 않도록 평균값만 추출
$cpuLoadPercent = $cpuLoadPercent.Average

#결과를 화면, 즉 로그에 기록
Write-Host "$timeStamp CPU Load Percentage $cpuLoadPercent"
}

Stop-Transcript
  1. 명령 프롬프트 또는 PowerShell을 관리자 권한으로 실행합니다.
  2. nssm install logCPUAvg 명령을 입력하고 실행합니다. 그러면 NSSM 서비스 설치 창이 열립니다.
  1. Path: 필드 옆의 줄임표(...) 버튼을 클릭하고, 일반적으로 C:\Windows\System32\에 위치한 powershell.exe로 이동하여 선택합니다. 그러면 Path:Startup directory: 필드가 자동으로 채워집니다.
  1. Arguments: 필드에 다음을 입력합니다. -ExecutionPolicy Bypass -NoProfile -File "C:\PathToScript\get-Script.ps1". 마지막 부분은 PowerShell 스크립트의 실제 경로와 파일명으로 바꿔 주세요.
  1. Details 탭을 선택합니다. Display name: 필드에는 Windows 서비스 관리자에 표시될 이름을 입력하고, Description: 필드에는 서비스의 용도를 입력합니다. Startup type:Automatic, Automatic (Delayed Start), Manual, Disabled 중에서 선택할 수 있으며, 이 예제에서는 Automatic으로 설정하면 됩니다.
  1. Log on 탭을 선택합니다. This account 라디오 버튼을 선택하고 서비스가 실행될 계정과 비밀번호를 입력합니다. 서비스 전용으로 새 Windows 계정을 만드는 것이 가장 좋으며, 해당 계정의 권한은 서비스에 필요한 최소한으로 제한해야 합니다. Local System account를 선택할 수도 있지만, 보안상의 이유로 권장되지 않습니다.

그 외에도 서비스를 세부적으로 사용자 지정할 수 있는 여러 탭이 있지만, 이 예제에서는 기본값을 그대로 사용해도 충분합니다. Install service 버튼을 클릭합니다.

  1. 서비스가 설치되면 Service "logCPUAvg" installed successfully! 창이 표시됩니다. OK를 클릭하여 닫으면 설치가 완료됩니다.
  1. Windows 서비스 관리자(services.msc)를 열어 서비스가 목록에 등록되어 있는지 확인합니다.
  1. 서비스를 실행하여 정상적으로 작동하는지 확인합니다.
  1. 서비스가 실제로 실행 중인지 검증하려면 파일 탐색기를 통해 로그가 저장될 위치로 이동하여 로그 파일이 생성되었는지 확인합니다.

NSSM으로 Windows 서비스 삭제하기

CPU 부하 모니터링이 더 이상 필요 없다면 서비스를 제거하고 싶을 것입니다. 다행히 NSSM을 사용하면 삭제 과정도 매우 간단합니다.

  1. Windows 서비스 관리자에서 서비스를 중지합니다. Log CPU Average Load 서비스를 선택한 후 도구 모음의 사각형(중지) 버튼을 클릭하거나 왼쪽의 Stop the service 링크를 클릭하면 됩니다.
  2. 명령 프롬프트 또는 PowerShell을 관리자 권한으로 실행합니다.
  3. nssm remove logCPUAvg 명령을 입력하고 실행합니다.
  4. NSSM이 삭제를 확인하는 메시지를 표시하면 Yes를 선택합니다.
  5. 서비스가 삭제되면 Service "logCPUAvg" removed successfully! 확인 메시지가 표시됩니다. OK를 클릭하면 완료됩니다.

이것으로 끝입니다. 서비스 관리자를 열어 해당 서비스가 더 이상 목록에 없는지 확인하는 것이 좋습니다. 여전히 서비스가 보인다면 화면을 새로 고침하면 사라질 것입니다.

Windows 서비스는 항상 실행되어야 하는 앱이나 스크립트를 운영하거나, 오류 발생 시 자동으로 재시작해야 하거나, 현재 사용자와 다른 권한이 필요한 경우에 매우 유용한 방법입니다. 이런 기능이 모두 필요 없다면 대신 예약된 작업(Scheduled Task)을 사용하는 것도 좋은 대안입니다.