Ubuntu에서 Spring Boot 애플리케이션 systemd 서비스로 자동 실행하기

AWS Lightsail에서 Ubuntu 서버를 사용하여 Spring Boot 애플리케이션을 운영할 때,
서버가 재부팅되거나 애플리케이션이 비정상 종료되더라도 자동으로 실행되도록 systemd 서비스를 활용하는 방법을 정리해 보겠습니다.

systemd 서비스를 활용하면?

  • 서버 재부팅 시 자동 실행
  • 프로세스가 비정상 종료되면 자동 재시작
  • nohup, screen 없이 백그라운드 실행 가능
  • 운영 환경에서 보다 안정적인 애플리케이션 실행 가능

1. Spring Boot 실행용 사용자 계정 생성 (보안 강화)

Ubuntu의 기본 ubuntu 계정 대신 전용 계정(springboot)을 생성하여 애플리케이션을 실행하면 보안성이 강화됩니다.

1.1 springboot 사용자 생성

# 새로운 사용자 계정 생성
sudo useradd -m -s /bin/bash springboot

# sudo 권한 제거 (보안 강화)
sudo usermod -L springboot
  • -m : 홈 디렉토리 생성 (/home/springboot/)
  • -s /bin/bash : 기본 쉘을 bash로 설정
  • usermod -L : springboot 계정이 sudo 사용을 못하게 제한 (보안 강화)

1.2 애플리케이션 배포 디렉토리 생성

sudo mkdir -p /opt/mustard
sudo chown -R springboot:springboot /opt/mustard
  • /opt/mustard/에 JAR 파일을 배포하고 실행할 예정
  • springboot 계정만 접근 가능하도록 설정

2. systemd 서비스 파일을 사용한 Spring Boot 자동 실행

Lightsail 인스턴스가 재부팅되더라도 Spring Boot 애플리케이션을 자동으로 실행하도록 systemd 서비스를 설정합니다.

systemd 서비스 파일 작성

sudo nano /etc/systemd/system/mustard.service

서비스 설정 파일 (mustard.service)

[Unit]
Description=Mustard Spring Boot Application
After=network.target

[Service]
User=springboot
WorkingDirectory=/opt/mustard
ExecStart=/usr/bin/java -Duser.timezone=Asia/Seoul -jar /opt/mustard/Mustard-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

3. systemd 서비스 파일 상세 설명

3.1 [Unit] 섹션

[Unit]
Description=Mustard Spring Boot Application
After=network.target
  • Description=Mustard Spring Boot Application → 서비스 설명
  • After=network.target네트워크가 활성화된 후 서비스 실행
    • Spring Boot 애플리케이션은 보통 데이터베이스와 연결되므로, 네트워크 활성화 후 실행되도록 설정

3.2 [Service] 섹션

[Service]
User=springboot
WorkingDirectory=/opt/mustard
ExecStart=/usr/bin/java -Duser.timezone=Asia/Seoul -jar /opt/mustard/Mustard-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
RestartSec=5
  • 실행 계정 (User=springboot)
    • Spring Boot 애플리케이션을 실행할 계정을 springboot로 지정 (보안 강화)
    • root로 실행하면 보안 문제가 발생할 수 있음
  • 실행 위치 (WorkingDirectory=/opt/mustard)
    • /opt/mustard/에서 JAR 파일을 실행하도록 지정
    • 애플리케이션이 필요한 파일을 WorkingDirectory 내에서 찾을 수 있음
  • 애플리케이션 실행 명령 (ExecStart)
    • /usr/bin/java → Java 실행 경로
    • -Duser.timezone=Asia/Seoul → JVM이 KST 시간대를 사용하도록 설정
    • /opt/mustard/Mustard-0.0.1-SNAPSHOT.jar → 실행할 JAR 파일 경로
  • 정상 종료 코드 (SuccessExitStatus=143)
    • Spring Boot 애플리케이션이 SIGTERM(143) 신호를 받으면 정상 종료로 간주
    • 기본적으로 systemctl stop을 실행하면 SIGTERM을 보냄
  • 자동 재시작 (Restart=always)
    • Restart=always → Spring Boot 애플리케이션이 예기치 않게 종료되면 자동으로 재시작
    • RestartSec=5 → 5초 후 다시 실행

3.3 [Install] 섹션

[Install]
WantedBy=multi-user.target
  • WantedBy=multi-user.target → 서버 부팅 시 자동으로 실행

4. 서비스 등록 및 실행

서비스 파일을 저장한 후 systemd에 등록 및 실행합니다.

# systemd 서비스 설정 반영
sudo systemctl daemon-reload

# Spring Boot 애플리케이션 실행
sudo systemctl start mustard

# 서버 재부팅 시 자동 실행 설정
sudo systemctl enable mustard

서비스 상태 확인:

sudo systemctl status mustard

이제 서버가 재부팅되어도 Spring Boot 애플리케이션이 자동으로 실행됩니다!

5. Spring Boot 애플리케이션 수동 실행 & 종료

Lightsail에서 직접 애플리케이션을 실행/종료하고 싶다면 아래 명령어를 사용하세요.

5.1 Spring Boot 서비스 수동 실행

sudo systemctl start mustard

5.2 Spring Boot 서비스 안전하게 종료

sudo systemctl stop mustard

또는

kill $(pgrep -f 'Mustard-0.0.1-SNAPSHOT.jar')

5.3 서비스 자동 실행 해제

만약 서버 재부팅 시 자동 실행을 중지하고 싶다면:

sudo systemctl disable mustard

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top