티스토리 뷰
부제: Excutable JAR AutoConfiguration 문제 해결, Spring boot JAR 배포, Spring boot 원격 서버에 배포하기
Spring boot가 기존의 Spring에 비해 편리한 점은 꽤 많을 것이다. 그 중에서도 대표적인 것 하나를 꼽으라면 실행가능한 JAR(Executable JAR)라고 할 수 있다.
Maven, Gradle등의 dependency tool을 이용하여 WAR파일을 생성한 후(build) tomcat과 같은 WAS에 배포하여 웹 애플리케이션을 구동하는 것이 기존의 Spring이었다. 반면에 Spring boot는 JAR파일에 내장 톰캣이 존재하여, JAR파일을 빌드하고 단순히 실행하는 것만으로 웹 애플리케이션 구동이 가능하다.
▶ JAR의 사전 속 의미는 "(꿀, 잼 등을 주로 담아놓는) 병"이다.
로컬에서 개발하며 테스트하는 경우, 내장된 gradle을 통해 아래와 같은 간단한 명령어로 애플리케이션을 실행할 수 있었다.
1 | ./gradlew bootrun | cs |
하지만 다른 서버에 배포하려면 JAR파일을 따로 생성하는 방법밖에 없다. 이번 포스팅에서는 그 방법에 대해 다루려고 한다. 필자는 Intelli J와 gradle을 사용한다. 이걸 해내려고 꼬박 4일을 해맸다.
먼저 build.gradle에 아래와 같은 문구를 추가한다.
위 코드는 buildscript작성을 통해 Spring boot에서 제공하는 Gradle-plugin을 적용하는 설정이다.
이 코드는 manifest를 정의하는 작업인데, 이 작업없이 그냥 JAR를 만들면, manifest정보가 없다는 오류를 뱉어내기 때문에 반드시 위 작업을 수행해야한다.
그후, Intelli J의 우측하단 'gradle'탭에서 jar task를 찾아 더블클릭으로 실행하면 될 줄 알았는데...
spring-factories에서 AutoConfiguration관련 오류가 발생했다. 이 문제를 해결하려고 수십시간을 씨름한 것 같은데, 생각보다 해결방법은 간단했다. gradle build task jar를 사용해 산출된 JAR파일은 우리가 가장 먼저 했던 gradle-plugin을 사용하지 않고 생성된 JAR이었다.
이미 JAR가 생성된 후, gradle build task build로 다시 진행해보면 xxxx.jar.original 이라는 파일이 생성된다. (아까처럼 인텔리제이의 좌측하단 gradle 탭을 이용하면 편리하게 'build'를 더블클릭하여 task를 시작할 수 있다.)
jar파일이 생성된 상태에서 build task를 진행해야만 original 파일이 생기는 것 같다. (이유는 조금 더 찾아봐야 한다.) 그리고 완성된 jar 파일 (jar.original 파일이 아님!!)을 아래 명령어를 사용하여 실행하면 정상적으로 내장 톰캣이 동작하며 앱이 배포된다.
1 | java -jar XXXXXX.jar | cs |
-끝-
참고 및 출처
https://spring.io/
http://theeye.pe.kr/archives/tag/gradle
https://stackoverflow.com/questions/38792031/springboot-making-jar-files-no-auto-configuration-classes-found-in-meta-inf
'IT > 삽질로그' 카테고리의 다른 글
[삽질로그] 네이버 지도 API 활용하기 (Spring Boot RestTemplete 활용) (0) | 2017.08.10 |
---|---|
[삽질로그] JPA & MySQL 연동 시 Auto Reconnect 설정하기 (1) | 2017.07.31 |
[삽질로그] Spring boot에서 다중 파일업로드 처리하기 (0) | 2017.05.14 |
[삽질로그] SpringApplicationConfiguration 과 SpringBootTest의 사용 (0) | 2017.04.28 |
[삽질로그] IntelliJ에서 properties 파일 Encoding 바꾸는 법 (0) | 2017.03.23 |