일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- tomcat
- jvm
- g1
- load balancing
- JWT
- 스프링 부트
- Spring
- java
- 비동기
- Producer
- 페이징
- gdg
- assertj
- 권한
- 리팩토링
- JPA
- GC
- apache
- clean code
- 스프링부트
- 스프링
- OAuth
- spring boot
- 클린코드
- Refactoring
- RabbitMQ
- oauth2
- 시큐리티
- Security
- 페이스북
Archives
- Today
- Total
허원철의 개발 블로그
Spring Boot - jar로 Deploy(배포)하기 본문
Spring Boot를 jar로 배포하면서 생긴 이슈들을 공유하기 위한 글입니다.
Apache와 Tomcat 조합에서는 Tomcat에서 정의한 위치에 war를 올려 사용했습니다. 하지만 Spring Boot에서는 기존 방식과 달리 jar파일로 배포가 가능하다는 것입니다. (기본적으로 Tomcat이 내장되어 있고, Jetty나 Undertow로 대체할 수 있습니다.)
Server : Centos v6.5
1 . properties(yaml) 구분하기
2 . service 구성
1 . properties(yaml) 구분하기
- Spring Boot로 프로젝트를 구성하게 되면, 리소스폴더에 application.properties 가 생성 되는데, 어지간한 설정은 다 할 수 있습니다. (톰캣, DB 등등..) 그리고 구분이 필요한 프로퍼티는 아래와 같이 추가할 수있습니다.
1 | application-{custom}.properties | cs |
만약 로컬(개발) 설정과 서버 설정이 다르고 로컬에서는 실서버를 바로 볼 수 없는 상황이라고 생각해봅니다. 그리고 Spring Boot에서 jar를 만들 때 서버를 바라보게 하고 빌드를 하게 되면 빌드 과정에서 Exception를 내뿜으면서 실패하고 맙니다. 그래서 환경에 따라 설정을 달리하기 위해 profile을 이용하여 대처할 수 있습니다.
1) 로컬환경과 서버환경이 다를 경우, 각각의 프로퍼티 추가
1 2 | application-local.properties application-server.properties | cs |
2) application.properties에 초기 설정을 추가
1 | spring.profiles.active=local | cs |
3) 실행
1 | java -Dspring.profiles.active=server -jar myApp.jar | cs |
2 . service 구성
- Putty로 java -jar myApp.jar 로 실행하고 Putty를 내리게 되면 jar 역시 꺼지게 됩니다. 그래서 service에 등록하여 손쉽게 끄고 킬 수 있게 할 수 있습니다. Centos 7 이상에서는 Spring Guide를 보시면 systemd를 이용하여, 각각 설정과 service를 손쉽게 등록 할 수 있습니다.(공식 가이드)
하지만!! Centos 7 미만에서는 지원을 하지 않아, 직접 service에 등록하여 사용할 수 있습니다. (다른 더 좋은 방법이 있을 수도 있으니.. 이런 방법도 있다라는 것을 참고만 하셔도 될 것 같습니다.)
1) 서비스 등록
1 | sudo vi /etc/init.d/myApp | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/bin/sh SERVICE_NAME=myApp PATH_TO_JAR=/usr/local/myApp.jar PID_PATH_NAME=/tmp/myApp-pid JAVA_OPTS="-server -Dspring.profiles.active=server" case $1 in start) echo "Starting $SERVICE_NAME ..." if [ ! -f $PID_PATH_NAME ]; then nohup java $JAVA_OPTS -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is already running ..." fi ;; stop) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stoping ..." kill $PID; echo "$SERVICE_NAME stopped ..." rm $PID_PATH_NAME else echo "$SERVICE_NAME is not running ..." fi ;; restart) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stopping ..."; kill $PID; echo "$SERVICE_NAME stopped ..."; rm $PID_PATH_NAME echo "$SERVICE_NAME starting ..." nohup java $JAVA_OPTS -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is not running ..." fi ;; esac | cs |
2) 권한 설정
1 | sudo chmod +x /etc/init.d/myApp | cs |
3) 실행/중지/재시작
1 2 3 | sudo service myApp start sudo service myApp stop sudo service myApp restart | cs |
'web' 카테고리의 다른 글
Spring Boot - Security + JWT (423) | 2017.02.13 |
---|---|
Spring Boot - QueryDSL (410) | 2017.01.25 |
Spring Boot - Apache proxy를 이용한 로드밸런싱 (437) | 2017.01.17 |
Spring Boot - RabbitMQ (395) | 2017.01.10 |
메시지 큐(Message Queue) 훑어보기 (441) | 2017.01.08 |
Comments