2021.07.27 추가
* 해당 방법으로 실행되는 경우도 있겠지만 본인의 경우 해당 방법으로 프로젝트 실행에 실패했고, 해결 방안을 맨 하단 새로 포스팅하여 올렸습니다. 참고 부탁드리겠습니다.
마무리 중인 Spring Boot 프로젝트 배포를 위해 작업된 프로젝트를 jar 파일로 만드는 법을 기록합니다.
(큰 틀에서의 이론을 먼저 살펴보고 생성 방법에 대해서 알아보겠습니다.)
먼저 Java 기반의 Application 배포 형태는 JAR, WAR 두 가지 방법이 있습니다.
두 가지 방법 모두 Java jar tool을 이용하여 압축한 같은 형태의 압축 파일이지만 사용 목적이 다릅니다.
그리고 둘의 눈에 띄는 가장 큰 차이점은 내장 WAS를 사용하는 것과 외장 WAS를 사용하는 것이 아닐까 생각합니다.
JAR (Java Archive)
자바 클래스 파일들과 클래스들이 이용하는 관련 리소스 (텍스트, 그림 등) 및 메타 데이터를 하나의 파일로 모아 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷입니다.
WAR (Web Applicaion Archive)
JSP, Servlet, Class, XML, 파일, 태그, 라이브러리, 정적 웹페이지 (HTML, CSS) 및 웹 어플리케이션을 구성할 때 필요한 자원을 압축한 jar 파일으로 실행하기 위해서 웹 서버 (WEB) 또는 웹 컨테이너 (WAS)가 별도로 필요합니다.
Spring Boot에서는 spring-boot-starter-web 라이브러리가 spring-boot-starter-tomcat을 포함하고 있기 때문에 WAS가 내장되어 배포시에 별도의 웹 서버(Tomcat 등) 없이 바로 운영이 가능합니다.
(별도의 외장 WAS를 사용하는 것도 가능합니다.)
* WAS (Web Application Server)
Tomcat, Jetty, Undertow, Netty 등
빌드 도구는 Maven을 사용하였습니다.
빌드란 소스 코드를 컴파일, 테스트, 정적 분석 등을 실행하여 실행 가능한 어플리케이션으로 만들어주는 과정입니다.
잘 알려진 빌드 도구로는 Ant, Maven, Gradle 이 있습니다.
세가지 빌드 도구에 대해 간단하게 이야기하면 Apache Ant가 가장 먼저 나온 빌드 도구이고, Ant의 단점을 보완하여 다음으로 나온 것이 Maven, 그리고 Ant의 장점과 Maven의 기능을 결합하여 가장 최근에 나온 것이 Gradle 입니다.
Gradle은 Android OS 빌드 도구로 채택되었으며, 빌드 속도도 Maven 보다 빠르고 코드의 가독성도 좋다는 장점이 있고, 메모리를 많이 잡아먹는다는 단점이 있습니다.
현재 구글 트랜드를 보면 Gradle 보다 Maven에 대한 사용도가 훨씬 높은 것을 볼 수 있습니다.
어떤 빌드 툴을 사용하느냐에 대한 정답은 없고, 또 프로젝트 마다 다르겠지만 지금까지 Maven만 써봤기 때문에 다음 프로젝트에서는 Gradle을 사용해보려고 합니다.
여기부터 본격적인 jar 파일 생성 방법입니다.
pom.xml 파일에서 packaging 부분을 jar 로 설정합니다.
File > Project Structure (단축키 ⌘ ;)
Artifacts > JAR > From modules with dependencies...
Main Class 부분이 비어 있을 것인데, 우측 폴더를 열어 프로젝트에서 Main Class 를 찾아서 설정해줍니다.
Build > Build Artifacts
Build Artifact > Action > Build 를 클릭하면
IntelliJ 하단 부분에 프로젝트가 Building 되는 것을 볼 수 있습니다.
빌드가 완료되면 프로젝트 폴더 내부에 out > artifacts > 프로젝트 이름 > jar 파일이 생성된 것을 볼 수 있습니다.
jar 파일 생성에 이어 서버 설정 등, 프로젝트를 실제로 배포하는 과정을 이어 가도록 하겠습니다.
잘못된 부분이나 부족한 부분은 댓글 남겨주시면 공부하고 수정하겠습니다. 감사합니다.
2021.07.27 추가
* 해당 방법으로 생성된 .jar 파일을 실행하여 'No auto configuration classes found in META-INF/spring.factories' 에러가 발생하였고 해결 방법을 다시 포스팅 하였습니다.
'Programming > Spring Boot' 카테고리의 다른 글
IntelliJ Community version Spring Boot Project 생성하는 방법 (0) | 2021.08.10 |
---|---|
Spring MVC 프론트에서 컨트롤러로 input name 으로 값 여러개 전달하기 Ajax (0) | 2021.08.08 |
springboot 개발 환경에 따른 properties 사용 방법 (local, dev, prod) (0) | 2021.07.31 |
No auto configuration classes found in META-INF/spring.factories 오류 해결 (0) | 2021.07.27 |
Swagger 사용하여 RESTful API 문서 자동화하기 (SpringBoot) (0) | 2021.07.17 |