티스토리 뷰

개요

  • CentOS(RHEL)에서 특정 기능을 수행하는 서비스를 만드려면 start(), stop()이 정의된 Bash 스크립트를 /etc/init.d 디렉토리에 작성하거나 심볼릭 링크를 생성하면 된다. Java 애플리케이션 또한 이 방식을 따르면 nohup java -jar {some_project} &으로 직접 실행하거나 스크립트를 작성하지 않아도 서비스로 작동하게 만들 수 있다.
  • Spring Boot는 이러한 서비스를 실행하기 위한 Bash 스크립트를 빌드 옵션을 통해 제공하고 있다. 개발자는 따로 서비스 스크립트를 작성하지 않아도 편리하게 이용하기만 하면 돤다. 다만, 버전마다 다른 설정이 필요하다.

Spring Boot 1.x

  • Spring Boot 1.x에서는 /build.gradle 파일에 아래 내용을 추가하면 된다.
bootRepackage {
    executable = true
}

Spring Boot 2.x

  • Spring Boot 2.x에서는 /build.gradle 파일에 아래 내용을 추가하면 된다.
bootJar {
    launchScript()
}

서비스 스크립트 등록

  • 이제 프로젝트를 빌드하고 등록할 차례이다.
# 프로젝트 빌드
$ ./gradlew build

# 빌드된 프로젝트를 서비스로 등록
$ sudo ln -s ./build/libs/some-project.jar /etc/init.d/some-project

## 등록한 서비스에 실행 권한 부여
$ sudo chmod 0755 /etc/init.d/some-project

# 서비스 실행시 적용될 JVM 옵션 설정
$ nano ./build/libs/some-project.conf
PID_FOLDER='/home/some-project'
LOG_FOLDER='/dev'
LOG_FILENAME='null'
JAVA_OPTS='-server -Xms8g -Xmx8g -XX:MaxMetaspaceSize=512m -Dspring.profiles.active=prod'
  • LOG_FOLDERLOG_FILENAME 옵션을 사용하면 기본적으로 콘솔에 출력되는 로그를 실시간으로 파일에 남길 수 있다. 하지만 Spring Boot에 기본 내장된 Logback을 이용한 파일 로깅(logback.xml에 로그 처리 정책을 정의하는 방법)이 훨씬 강력하고 다양한 기능을 제공하기 때문에 위와 같이 /dev/null을 지정하여 서비스 레벨에서의 로그 기능을 비활성화하는 방법을 추천한다.

서비스 실행

  • 등록된 서비스는 아래와 같이 실행, 종료, 재시작 등의 제어가 가능하다.
# 애플리케이션 시작
$ service some-project start

# 애플리케이션 종료
$ service some-project stop

# 애플리케이션 재시작
$ service some-project restart

# 애플리케이션 상태 확인
$ service some-project status

# 운영체제 재시작시 자동 시작
$ sudo chkconfig some-project on 
  • chkconfig on 명령어를 사용하면 서버 재시작시 애플리케이션을 자동으로 실행되도록 설정할 수 있다. 서버 전원을 껐다 켜는 상황 등에 유용하게 대처할 수 있다.

참고 글

댓글
댓글쓰기 폼