본문 바로가기
Spring/Spring-detail

Jar 파일에 대해

by YoonJong 2023. 3. 1.
728x90

김영한님의 스프링 부트 - 핵심 원리와 활용 편을 보고 간단히 정리한 내용입니다.

강의를 직접 들어보시는 것을 추천합니다.


스프링부트로 생성한 프로젝트를 빌드하면 Jar 파일이 생성됩니다.

Jar 파일을 확인하기 위해 cmd 창에서 해당 프로젝트 경로로 들어가서 빌드를 합니다.

gradlew clean build 를 입력하고 jar 파일을 찾아들어갑니다.

 

build -> libs 에서 확인할 수 있습니다.

 

boot-0.0.1-SNAPSHOT.jar 파일의 크기를 보면 약 18M 인 것을 확인할 수 있습니다.

작지 않은 크기인데, jar 에 어떤 내용이 있는지 확인해보겠습니다.

압축을 푸는 방법은 jar -xvf boot-0.0.1-SNAPSHOT.jar 를 입력합니다.

 

BOOT-INF 와 META-INF 와 org 폴더가 들어있는 것을 확인할 수 있습니다.

해당 폴더가 어떤 구조로 되어있는지 폴더를 열어서 확인해보겠습니다.

cmd 창에서 start . 를 입력하면 현재 경로인 폴더를 열수 있습니다.

 

해당 폴더는 아래와 같은 구조로 되어있습니다.

BOOT-INF
	ㄴ classes
    	ㄴ 생성한 클래스들
    ㄴ lib
    	ㄴ 다양한 jar 파일들

META-INF
	ㄴ MANIFEST.MF

org
	ㄴ springframework
    		ㄴ boot
        		ㄴ ...

 

원래 jar 파일 안에는 jar 파일을 가지고 있을 수 없는 구조로 되어있습니다.

따라서, 모든 jar 파일안에 있는 class 들을 전부 꺼내어 하나의 jar 파일 안에 넣어주어야 했습니다.

이렇게 되니, 이름이 중복되는 class 에 대해서는 하나만 실행되는 현상이 일어났습니다.

 

하지만, 스프링 부트는 이런 문제를 해결하기 위해서 jar 파일 내부에 jar 파일을 가지고 있을 수 있도록 실행가능 Jar 를 제공해줍니다.

따라서 위와 같은 폴더 구조 lib 안에 설정에 필요한 jar 파일을 가지고 있을 수 있습니다.

 

 

폴더에서 관심을 갖을 파일은 META-INF 에 있는 MANIFEST.MF 입니다.

메모장으로 열어보겠습니다.

Manifest-Version: 1.0
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: hello.boot.BootApplication
Spring-Boot-Version: 3.0.2
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Build-Jdk-Spec: 17

위와 같은 구조로 되어있는데, 여기서 Main-Class 와 start-Class 를 확인해보겠습니다.

Main-class 는 우리가 모르는 것이 설정되어있습니다.

JarLauncher 의 의미는 설정 jar 파일을 실행시켜 프로젝트에 필요한 설정을 진행한다는 것입니다.

 

Main-class 를 진행하고 나서 Start-Class 순으로 진행하며, 우리의 프로젝트인 BootApplication 의 main() 을 실행하게 됩니다.

@SpringBootApplication
public class BootApplication {

   public static void main(String[] args) {
      SpringApplication.run(BootApplication.class, args);
   }

}

 


많은 부분이 자동화되어 있어, 어떤 흐름으로 가는지 궁금했는데 강의를 보고 정리했습니다.

War 파일에 관련된 내용도 있고 더욱 깊게 들어갈 수 있지만, 선택과 집중을 통해 이후 필요할 때 추가로 진행하고

흐름을 파악하고 넘어가겠습니다.

728x90

댓글