Spring Boot 애플리케이션을 Linux에서 백그라운드로 실행하는 방법

Spring Boot 애플리케이션을 실행하는 일반적인 방법은 다음과 같습니다.

  • 메인 메서드를 직접 실행
  • mvn spring-boot:run 명령 사용
  • mvn package로 JAR 파일 생성 후 java -jar 명령으로 실행

개발 시에는 앞의 두 가지 방법을 주로 사용하지만, 배포 시에는 세 번째 방법인 JAR 파일을 실행하는 방식을 선호합니다. 하지만 java -jar 명령만으로는 애플리케이션이 백그라운드에서 실행되지 않습니다.

이 문서에서는 Linux 서버에서 Spring Boot 애플리케이션을 백그라운드로 실행하는 두 가지 유용한 방법을 소개합니다.

1. nohup과 쉘 스크립트 활용

nohup 명령어는 터미널 세션이 종료되어도 프로세스가 계속 실행되도록 합니다. nohup 명령어에 대한 자세한 내용은 다음과 같습니다.

nohup 명령어

용도: 명령을 중단 없이 실행합니다.

구문: nohup Command [Arg ...] [&]

설명: nohup 명령어는 지정된 명령과 인수를 실행하며, 모든 hangup(SIGHUP) 신호를 무시합니다. 로그아웃 후에도 백그라운드에서 실행하려면 명령 끝에 &를 추가합니다.

예시:

nohup java -jar your-app.jar &

위 명령을 실행하면 nohup.out 파일에 실행 결과 로그가 저장됩니다. 특정 경로에 로그 파일을 저장하고 싶다면 다음과 같이 리디렉션을 사용할 수 있습니다.

nohup java -jar your-app.jar > /path/to/your/catalina.out 2>&1 &

로그 출력이 필요 없다면 다음과 같이 /dev/null로 리디렉션할 수 있습니다.

nohup java -jar your-app.jar > /dev/null 2>&1 &

따라서 nohup java -jar your-app.jar & 명령을 사용하면 애플리케이션을 백그라운드에서 실행할 수 있습니다. 관리를 용이하게 하기 위해 쉘 스크립트를 작성할 수도 있습니다. 다음은 애플리케이션 시작, 중지, 재시작을 위한 스크립트 예시입니다.

  • 애플리케이션 중지 스크립트 (stop.sh):
    #!/bin/bash
        APP_NAME="your-app.jar"
        PID=$(ps -ef | grep ${APP_NAME} | grep -v grep | awk '{ print $2 }')
    
        if [ -z "$PID" ]; then
          echo "${APP_NAME} is already stopped."
        else
          echo "Stopping process ${PID}..."
          kill ${PID}
          echo "${APP_NAME} stopped."
        fi
        
  • 애플리케이션 시작 스크립트 (start.sh):
    #!/bin/bash
        nohup java -jar your-app.jar --server.port=8888 &
        echo "${APP_NAME} started in background."
        
  • 시작 및 중지 통합 스크립트 (run.sh):

    이 스크립트는 먼저 애플리케이션을 중지시킨 후 다시 시작하여 포트 충돌 등의 문제를 방지합니다. CI/CD 환경에서 반복적으로 호출하기에 적합합니다.

    #!/bin/bash
        echo "Stopping application..."
        source stop.sh
        echo "Starting application..."
        source start.sh
        

2. 시스템 서비스로 등록

Spring Boot Maven 플러그인은 실행 가능한 JAR 파일을 생성하는 기능을 제공합니다. 이를 통해 java -jar 명령 없이도 JAR 파일을 직접 실행할 수 있으며, 시스템 서비스로 등록하여 백그라운드에서 관리할 수 있습니다.

  • pom.xml에 Spring Boot 플러그인 설정:

    executable 설정을 true로 지정합니다.

    
        <build>
          <plugins>
            <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <configuration>
                <executable>true</executable>
              </configuration>
            </plugin>
          </plugins>
        </build>
        
  • 패키징:

    위 설정을 추가한 후 mvn install 명령을 실행하여 실행 가능한 JAR 파일을 생성합니다.

  • 시스템 서비스 등록:

    생성된 JAR 파일을 /etc/init.d/ 디렉토리로 심볼릭 링크를 생성합니다.

    sudo ln -s /path/to/your/your-app.jar /etc/init.d/your-app
        
  • 애플리케이션 제어:

    심볼릭 링크 생성 후 다음과 같은 명령어로 애플리케이션을 시작, 중지, 재시작할 수 있습니다.

    sudo /etc/init.d/your-app start|stop|restart
        

요약:

일반적으로 nohup java -jar your-app.jar & 명령으로 JAR 파일을 백그라운드에서 실행할 수 있습니다. 프로덕션 환경에서는 자체 로그 설정을 사용하므로 기본 nohup.out 로그 파일 생성이 불필요할 수 있습니다. 이 경우 다음 명령을 사용합니다.

nohup java -jar your-app.jar > /dev/null 2>&1 &

이 명령어에 대한 자세한 설명은 Linux의 리디렉션 및 /dev/null 2>&1에 대한 글을 참조하십시오.

태그: java SpringBoot linux nohup shell script

7월 29일 08:52에 게시됨