본문 바로가기

JAVA

[Spring Boot] Systemd Service로 자바 애플리케이션 실행하기

Systemd를 이용한 Java 응용 프로그램 관리

Linux 서버 관리 영역에서 서비스 관리 도구의 발전은 응용 프로그램의 배포 및 운영을 크게 단순화시켰습니다. 전통적으로 Java 응용 프로그램은 쉘 스크립트를 통해 실행 및 관리되었는데, 이는 효과적이긴 했지만 가독성 및 복원력 측면에서 단점이 있었습니다. 이 블로그 글에서는 Linux 운영 시스템용 시스템 및 서비스 관리자인 systemd를 사용하여 Java 응용 프로그램을 더 효율적으로 등록, 실행 및 관리하기 위한 전환을 탐구합니다.

Systemd 로의 전환

Systemd는 시스템 프로세스를 관리하기 위한 강력한 프레임워크를 제공합니다. 쉘 스크립트와 달리, 실패 시 자동으로 다시 시작하도록 구성할 수 있어 응용 프로그램의 가용성신뢰성을 높일 수 있습니다.

Systemd 서비스 등록

서비스 파일은 /etc/systemd/system에 원하는 서비스 이름으로 생성할 수 있습니다. 예를 들어, domain.service 파일을 생성했습니다.

[Unit]
Description=Java Application Service
After=network.target

[Service]
Type=simple
User=username
Group=group
WorkingDirectory=/path/to/directory
ExecStart=/bin/bash -c 'java -Djava.net.preferIPv4Stack=true -jar /path/to/directory/*.jar --spring.profiles.active=dev'
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
RestartSec=30
TimeoutStartSec=30
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=domain

[Install]
WantedBy=multi-user.target

Systemd 서비스 실행

Systemd 서비스는 nginx와 같은 다른 서비스와 같은 방식으로 실행할 수 있습니다. 또한 서비스의 상태를 확인할 수 있습니다.

root@domain:/etc/systemd/system# systemctl reload domain.service
root@domain:/etc/systemd/system# systemctl status domain.service

Systemd 서비스 로그 확인

Systemd 서비스 로그를 확인하려면, 로그 설정을 설정해야 합니다.

StandardOutput=syslog
StandardError=syslog 
SyslogIdentifier=domain

 

선택한 파일에 로그를 기록하려면 rsyslog를 구성할 수 있습니다. 매우 간단하며, /etc/rsyslog.d/domain.conf 파일을 생성하고 아래 코드를 입력한 다음, systemctl restart rsyslog 로 재시작할 수 있습니다.

if $programname == 'allso' then /var/log/app.allso.log
& stop

마무리

쉘 스크립트로 배포될 때, 가독성이 떨어지고 Java 응용 프로그램이 중단될 경우 실시간으로 처리해야 했습니다. 하지만 프로세스가 중단될 때 자동으로 재시작할 수 있는 장점이 있는 것으로 보입니다. 더 세부적인 옵션이 있으므로 관련 옵션에 대해 더 공부해야 할 것 같습니다. 그리고 Systemd 서비스에 대해 더 많이 공부할 필요가 있습니다.

'JAVA' 카테고리의 다른 글

[JPA] could not initialize proxy - no Session  (9) 2025.01.09