ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [04] 독립으로 실행가능한 JAR file
    Spring/Spring boot 2020. 5. 26. 08:57
    반응형

    Spring boot project를 build하여 생성된 JAR file은 독립적으로 실행할 수 있습니다. application을 배포하거나 docker[각주:1] image로 만들 때는 JAR package로 packaging된 JAR file을 실행하는 것이 유용합니다. 

     

     

     

     

    [JAR packaging과 실행 방법]

    build plugin을 사용하여 build 시 JAR packaging을 진행 합니다. build plugin 중 하나인 maven을 통해 packaging하고 실행하는 방법은 다음과 같습니다.

     

    1. mvn clean package 명령으로 target 아래 있는 모든 것을 삭제합니다.
    2. mvn package -DskipTests 명령으로 packaging을 진행합니다. (-DskipTests option으로 test를 skip하도록 했습니다.)
    3. java -jar ?????.jar 명려이으로 ?????.jar file을 사용하여 application을 실행합니다.

     

     

     

    [JAR file의 구조와 실행원리]

    Jar file은 여러 구성 요소들이 압축된 형태의 file이며 압축을 풀어보면 구조는 다음과 같습니다.

    Jar file directory 구조

    실행 가능한 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	#	①

     

    1. 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

    댓글

Designed by Tistory.