완전히 실행 가능한 Spring Boot 배포
Spring Boot를 $ java -jar
명령어를 이용해 실행할 수도 있지만 spring boot 1.3.0 버전에서 추가된 기능을 이용해 별도 스크립트 없이 리눅스 환경에서 서비스로 등록해서 실행, 관리할 수 있다. 스프링 레퍼런스에서는 이런 형태를 완전히 실행 가능한 jar (fully executable jar)로 표현하고 있다.
실행 가능한 jar를 만들기 위해서는 maven에 아래 plugin을 추가해야 한다.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin>
그리고 프로젝트를 빌드해서 생성되는 아티팩트를 그냥 스크립트처럼 아래와 같이 실행하면 된다.
$ ./my-application.jar
이는 위에 추가한 플러그인으로 인해 생성되는 실행 스크립트가 jar 안에 내장됨으로써 java -jar
명령어 없이도 실행 가능한 형태의 jar가 생성된다.
이 방법은 CentOS, Ubuntu 등의 대부분 Linux 배포 환경에서 테스트 됐지만 OS X 또는 FreeBSD에서 구동하기 위해서는 embeddedLaunchScript
를 사용해야 한다.
CentOS 6 이하 버전에서 init.d를 활용한 서비스 등록
CentOS 6 이하에서 init.d를 활용해 서비스로 등록해 좀 더 쉽게 어플리케이션을 관리할 수 있다. 먼저 아래 명령어를 이용해서 init.d에 등록한다.
$ sudo ln -s /path/to/myapp.jar /etc/init.d/myapp
그리고 서비스를 실행하면 프로세스의 PID와 함께 앱이 구동됐다는 메세지가 보인다.
$ service myapp start
서비스가 동작하면서 보이지 않는 동작 몇 가지를 설명하면
- 프로세스는 jar 파일의 소유자로 실행됨.
- PID는
/var/run/<appname>/<appname>.pid
에 저장. - 로그 메세지는
/var/run/<appname>.log
에 저장된다.
실행 파라미터 및 시스템 변수
Production 환경에 맞게 몇몇 설정들을 변경하고 싶으면 <appname>.conf
파일에 시스템 변수를 입력해서 조작할 수 있다. 실행 스크립트는 jar파일이 위치한 디렉토리에서 jar파일과 이름이 같지만 확장자가 .conf
로 돼있는 파일을 찾아 안에 입력된 시스템 변수를 읽어서 기존 설정을 덮어쓴다.
##################### JVM ###################### JAVA_OPTS="-Xmx512m \ -Xms256m \ -XX:PermSize=256m \ -XX:MaxPermSize=256m -Dspring.profiles.active=production" ################## Logging ###################### LOG_FOLDER="/home/runuser/test" LOG_FILENAME="app.log"
JAVA_OPTS
는 JVM 파라미터들을 명시했다. 메모리 설정, 그리고 활성화할 프로파일을 설정했다. 그리고 LOG_FOLDER
는 로그 파일이 저장될 위치, LOG_FILENAME
은 로그 파일명이다.
그 외에 제공되는 환경변수들은 이곳에서 확인 가능하다.
application.properties
스프링 부트는 application.properties
파일을 아래 경로에서 찾는다. 순서상 위에 내용이 아래 내용을 덮어쓴다.
- 현재 디랙토리의
/config
디랙토리 하위 - 현재 디랙토리
- 클래스 패스의
/config
패키지 - 클래스 패스 루트
배포 환경에서 .jar와 같은 디렉토리에 application.properties
파일을 생성하고 설정들을 추가하면 jar에 포함된 application.properties를 덮어쓴다.