WinSW는 Windows Service Wrapper의 줄임말이다.
이는 Java로 작성된 애플리케이션을 윈도우 서비스로 실행할 수 있도록 도와주는 도구이다.
이를 통해 애플리케이션의 시작, 중지, 재시작 등의 서비스 생명주기 관리를 쉽게 할 수 있다.
WinSW는 XML 설정 파일을 통해 구성되며, 이 설정 파일에서 애플리케이션의 실행 경로
, 인수
, 작업 디렉토리
, 서비스 이름
등을 지정할 수 있다. 이러한 설정을 통해 애플리케이션이 윈도우 서비스로 실행될 때 필요한 세부 사항들을 지정해 줄 수 있다.
또한, 우리는 이 기능을 사용할 것인데 바로 로그 관리 기능이다.
이를 통해 애플리케이션의 표준 출력 및 에러 출력을 로그 파일로 리다이렉션할 수 있다.
이는 어플리케이션의 문제를 진단하고 해결하는데 매우 유용하다.
winsw github에 들어가서 베타 버전 말고 정식 버전 중 가장 최신 버전을 받아준다.
나는 sample-minimal.xml
, WinSW-x64.exe
를 받아줬다.
위에서 받은 sample-minimal.xml 을 설정해줘야한다.
참고는 config 파일 설정 페이지를 들어가서 확인해보면 된다.
간략하게 위 xml 파일을 설명해주자면
<logpath>%BASE%\logs</logpath>
이런식으로 줘도 되나 혹시 안 먹는다면 아래 예시처럼 구체적인 경로를 잡아줘버리면 100% 먹는다.<?xml version="1.0" encoding="UTF-8"?>
<service>
<id>프로젝트_ID</id>
<name>프로젝트_Name (powered by KJW)</name>
<description>프로젝트 설명</description>
<executable>C:\Program Files\ojdkbuild\java-17-openjdk-17.0.3.0.6-1\bin\java.exe</executable>
<arguments>-Xrs -Xmx256m -jar "C:\본인이 설치한 jar 파일 경로\web-backend-1.0.0.jar"</arguments>
<onfailure action="restart" />
<logpath>C:\본인이 설치한 jar 파일 경로\logs</logpath>
<logmode>roll</logmode>
<log mode="roll">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
<sizeThreshold>10240</sizeThreshold>
<keepFiles>10</keepFiles>
<file>C:\본인이 설치한 jar 파일 경로\logs\프로젝트이름.log</file>
<error>C:\본인이 설치한 jar 파일 경로\logs\프로젝트이름.err.log</error>
</log>
</service>
참고로 java 경로는 이렇게 상세하게 잡아주면 더 좋다.
로그 모드 페이지를 가보면 확인할 수 있다.
*한계값이란 로그가 지정한 메모리를 넘으면 뒤에서부터 순차적으로 삭제해 나가는 것이다.
아까 winsw github에서 받은 winsw.exe를
설정 해 놓은 곳에 이동시키고 위에서 작성한 .xml과 같은 이름으로 변경한다.
winsw command 페이지에 가보면 여러 커맨드들이 있다.
뭐 install 은 어떤 옵션을 주고 서비스를 설치할 것인지, 또 어떤 옵션으로 시작할 것인지 등등..
순서는 install -> start로 진행한다.
또 yml 파일의 설정이 바뀌면 재시작을 하고
xml 옵션이 바뀌면 삭제하고 다시 install 하면 된다.
반드시 PowerShell 에서 실행해야한다.
CMD 와 PowerShell 은 명령어와 앨리어스, 스크립팅 언어 지원 수준, 파이프라인 등 에서 굉장히 차이가 나기 때문에 반드시 PowerShell 에서 실행하길 바란다.
아까 .exe 가 설치되고 서비스가 시작되면 xxx.out.log 파일이 생성이 되는게 해당 path에 가서 아래 명령어를 입력하면 된다.
Get-Content -Wait -Encoding UTF8 -Tail 1000 .\xxx.out.log
Get-Content 관련 옵션은 MS 홈페이지에 잘 설명되어있다.
참고로 서비스 등록이 이상하게 되어 삭제하고 다시 등록하려면
sc delete 서비스이름
명령어를 넣어주면 된다.
참고로 서비스 삭제는 CMD 에서 해야지 POWERSHELL 에서 하면 그냥 delete 라는 파일이 생성되고 실제 서비스가 삭제되진 않는다.