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에 대한 글을 참조하십시오.