Spring Boot

Executable Jar

iksadnorth 2023. 7. 28. 16:07

👣 개요

Spring Boot에는 Executable Jar라는 개념이 존재하여
Web Application Project 빌드 결과물이 War이 아니라 Jar를 될 수 있다.
이는 Gradle or Maven으로 빌드를 한 결과물로 바로 서버를 가동시킬 수 있다.
이로서 외부 웹 서버에 의존하지 않고 내장된 웹 서버로 실행 가능하다는 장점이 있다.

 

👣 War 배포 과정

1. War 파일 생성. - Gradle 기준

- build.gradle에 war 플러그인 추가.

plugins {
    id 'war'
}

...

 

- Gradle 명령어로 War 빌드

gradle build

 

2. Tomcat에 War 파일 배포

- Tomcat 내부의 /webapps 디렉토리에 War 파일를 위치시킴.

Tomcat/
├── bin/
│   ├── startup.sh (Linux/macOS용 스크립트 파일 - Tomcat 시작)
│   ├── shutdown.sh (Linux/macOS용 스크립트 파일 - Tomcat 종료)
│   └── ... (기타 실행 파일들)
│
├── webapps/ (웹 애플리케이션 배포 디렉토리)
│   ├── ROOT/ (기본 루트 웹 애플리케이션)
│   ├── {web-app-file}.war (배포할 WAR 파일을 이 디렉토리에 복사하면 자동으로 풀림)
│   └── ...
│
└── ...

 

- Tomcat 내부의 /bin/startup.sh 프로그램 실행.

./bin/startup.sh

 

👣 Jar 배포 과정

1. Jar 파일 생성 - Gradle 기준

- build.gradle 구성.

plugins {
    id 'org.springframework.boot' version '2.5.3'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

...

 

- Gradle 명령어로 Jar 빌드

./gradlew build

 

 

2. 빌드 결과물을 Java 명령어로 실행.
보통 빌드 결과물은 ./build/lib 디렉토리 내부에 존재함.

java -jar {web-app-file}.jar

 

👣 Jar 내부 구조

주목할 디렉토리는 META-INF, BOOT-INF, org 이다.

1. BOOT-INF

개발자가 직접 작성한 클래스 파일들(classes)과, 의존성 주입을 통한 jar 파일(lib)들로 구성됨.

- classpath.idx

그림에는 없지만 classpath.idx라는 파일도 포함되어 있는데,
이는 classpath에 추가될 jar 파일들의 목록(lib 폴더 안에 있는 jar 파일)을 정의한 것이다.

이는 "일반적인 JAR 파일은 중첩된 JAR 구조를 지원하지 않는다"는 단점을 보완하기 위해
스프링 부트가 고안해 낸 방법으로, jar 파일 리스트를 확인하여 중첩된 JAR 구조를 지원할 수 있도록 한다.

- "ojdbc8.jar"
- "sitemesh-3.0.1.jar"
- "querydsl-apt-4.1.4.jar"

 

2. META-INF

프로젝트 매니페스트 파일(MANIFEST.MF)을 포함하는 폴더이다.
MANIFEST.MF 파일은 파일 그룹을 위한
메타데이터(이름, 버전 번호, 라이선스, 프로그램의 구성 등)를 포함하는 파일이다.

 

3. org

org 폴더 내부에 Springboot loader classes 모듈이 저장되어 있다.

'Spring Boot' 카테고리의 다른 글

Spring Boot HTTP2 적용  (0) 2023.07.28
Spring Boot HTTPS 적용  (0) 2023.07.28
application.yml 프로퍼티  (0) 2023.07.27
Spring Boot 버전 관리 원리  (0) 2023.07.27
Spring Boot 자동 설정 원리  (0) 2023.07.27