[04] 독립으로 실행가능한 JAR file
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 [본문으로]