-
[04] 독립으로 실행가능한 JAR fileSpring/Spring boot 2020. 5. 26. 08:57반응형
Spring boot project를 build하여 생성된 JAR file은 독립적으로 실행할 수 있습니다. application을 배포하거나 docker image로 만들 때는 JAR package로 packaging된 JAR file을 실행하는 것이 유용합니다. 1
[JAR packaging과 실행 방법]
build plugin을 사용하여 build 시 JAR packaging을 진행 합니다. build plugin 중 하나인 maven을 통해 packaging하고 실행하는 방법은 다음과 같습니다.
- mvn clean package 명령으로 target 아래 있는 모든 것을 삭제합니다.
- mvn package -DskipTests 명령으로 packaging을 진행합니다. (-DskipTests option으로 test를 skip하도록 했습니다.)
- java -jar ?????.jar 명려이으로 ?????.jar file을 사용하여 application을 실행합니다.
[JAR file의 구조와 실행원리]
Jar file은 여러 구성 요소들이 압축된 형태의 file이며 압축을 풀어보면 구조는 다음과 같습니다.
실행 가능한 Jar file의 압축을 풀어보면 BOOT-INF/lib 안에 Jar file 형태로 external library들이 포함돼 있기 때문에 모든 의존성을 받아 실행할 수 있게 됩니다. Spring boot는 loader(org.springframework.boot.loader.jar.JarFile)를 사용하여 실행 가능한 Jar file 안에 포함된 external library에 해당하는 Jar file을 읽어옵니다.
META-INF/MANIFEST.MF file 안에는 application의 구현과 실행에 필요한 정보가 들어가 있데 그중 Main-Class에는 application을 load할 launcher를 지정합니다. launcher를 통해 application의 main method를 실행하게 됩니다. Jar file의 경우 org.springframework.boot.loader.util.JarLauncher를 이용하여 main method를 실행합니다. 다음은 Jar file 안에 정의된 MANIFEST.MF file의 예입니다.
Manifest-Version: 1.0 Implementation-Title: spring-boot-example_0523 Implementation-Version: 1.0-SNAPSHOT Start-Class: me.dave.Application # ② Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/ Build-Jdk-Spec: 1.8 Spring-Boot-Version: 2.2.7.RELEASE Created-By: Maven Archiver 3.4.0 Main-Class: org.springframework.boot.loader.JarLauncher # ①
- Container 기반의 open source 가상화 platform으로 application이 배포되는 실제 platform과 상관없이 실행 할 수 있는 conainter를 만들어주는 기술입니다.
참고: https://sarc.io/index.php/cloud/728-what-is-docker [본문으로]
'Spring > Spring boot' 카테고리의 다른 글
[06] 외부 설정 file (Property) (0) 2020.06.01 [05] Spring Application (0) 2020.05.28 [03] 내장 Web Application Server (0) 2020.05.20 [02] Spring boot 자동 설정 (0) 2020.05.15 [01] Spring boot 의존성 관리 (0) 2020.05.12