개요
스프링 부트 프로젝트를 진행중인데 인텔리제이를 사용하여 개발을 한다.
문제는 디버깅이 아닌 릴리즈 상태에서 스프링부트 프로젝트를 실행하기 위해서는
매번 인텔리제이를 키고 프로젝트를 실행하였었다.
이런 절차와 과정으로 서버를 사용하기엔 다소 무겁다고 느낌을 받았다.
IntelliJ 혹은 STS IDE 툴 없이 프로젝트를 실행하면 훨씬 가벼울텐데...
"더 가볍고 효율적인 방법으로 스프링 부트 프로젝트를 실행할 수는 없을까?"
이 글을 작성하게 된 계기이다.
이번 포스팅에서는 IDE 툴 없이 프로젝트를 실행할 수 있도록 JAR 파일로 만들어서 빌드 및 배포하는 방법을 다룬다.
왜 JAR 파일을 사용해야 하는지, 어떻게 빌드하고 배포하는지에 대해서도 알아보자.
스프링부트 프로젝트는 왜 JAR파일로 배포해할까?
JAR(Java ARchive) 파일은 자바 애플리케이션을 패키징하는 표준 방식이다.
물론 특성과 운영 환경에 따라 JAR 또는 WAR 중 선택할 수 있다.
JAR vs WAR 차이점은?
우선 JAR와 WAR의 차이부터 간단히 알아보자.
JAR 파일은 자체적으로 실행 가능한 자바 애플리케이션을 독립적으로 실행할 수 있다.
즉, 스프링 부트의 내장 웹 서버인 톰캣을 활용하여 독립적으로 실행될 수 있다는 것이다.
반면, WAR 파일은 기존 외부 웹 서버에 배포되어 웹 애플리케이션으로 실행된다.
독립적인 실행은 되지 않지만 웹 서버 설정에 따라 자유자재로 설정 변경이 가능하다는 장점이 있다.
스프링 부트는 자체 내장 서버가 포함되어 있는 프레임워크이다.
즉, 독립적으로 실행하는 것이 간편하고 효율적인 선택이 될 수 있다.
물론 무엇은 선택하든 괜찮다.
이는 개발자의 선호도, 서버 운영 상황에 따라 정석은 없다.
스프링 부트 문서에도 JAR 형식을 기준으로 기술되어 있고,
일반적으로 스프링 부트 프로젝트는 JAR 형식을 권장한다.
JAR 파일을 권장하는 이유
물론, 스프링 부트는 무조건 JAR 파일로 해야한다는 강제성은 없다.
하지만 JAR 파일을 이용할 경우 다음과 같은 이점을 가질 수 있다.
독립성
- 스프링 부트와 같이 내장 서버를 이용하여 독립적으로 실행할 수 있는 웹 애플리케이션이다.
효율성
- WAR 파일에 비해 JAR 파일이 더 경량화가 가능하다.
편의성
- 필요한 모든 것을 하나의 파일에 담아 관리가 편리하다.
배포 용이성
- JAR 파일 하나로 모든 필요한 라이브러리와 코드를 포함하며 간단하게 배포 할 수 있다.
- 하지만 상황에 따라 규모가 커질 경우에는 WAR 형식이 더 적합할 수 있다.
인텔리제이 없이 스프링 부트의 프로젝트를 실행하려면?
IDE 개발 툴 없이 스프링 부트의 프로젝트를 실행하려면 위에서 언급한 JAR 혹은 WAR 파일을 이용한다.
아래의 내용은 아래의 기준으로 설명하겠다.
- Windows 운영체제 사용
- JAR 파일로 패키징
- Gradle 사용
gradlew를 사용한 JAR 파일 만드는 방법 (빌드 및 배포 파일 만들기)
1. 명령 프롬프트를 통해 프로젝트 루트 디렉토리로 이동한다.
# cd 프로젝트 디렉토리
cd C:\WorkSpace\SpringBoot\test-spring-boot-with-kotlin
2. 아래의 명령어를 이용하여 그레이들을 통해 빌드를 진행한다.
gradlew build
이미지와 같이 BUILD SUCCESSFUL 메시지가 출력되었다면 배포 파일이 생성된 것이다.
배포 파일(JAR)는 프로젝트 디렉토리에서 "build - libs" 경로에 생성된다.
JAR 파일 실행하는 방법 (배포 파일 실행하기)
JAR 파일이 위치한 경로로 이동한다.
자신이 편한 위치에 파일을 이동시켜도 되지만 포스팅에서는 JAR 파일이 빌드된 위치에서 실행해보겠다.
# cd 프로젝트 디렉토리\build\libs\
cd C:\WorkSpace\SpringBoot\test-spring-boot-with-kotlin\build\libs\
java를 통해 jar 파일을 실행한다.
# java -jar 배포파일명
java -jar devbabys-0.0.1-SNAPSHOT.jar
스프링 부트의 문자가 뜬다면 실행이 된 것이다.
위와 같이 하면, IDE 툴에서의 프로젝트 실행 없이 JAR 파일로만 프로젝트를 실행할 수 있다.