반응형
백기선님의 스프링 부트 2.0 유튜브 강의를 보고 정리한 내용입니다
스프링 부트 2.0 Day 2. Executable JAR 어떻게 만들고 어떻게 동작하는가 - 백기선
해당 영상은 spring-boot 공식 reference를 보며 학습하는 내용입니다.
Creating on Executable Jar
- 실행 가능한 jar 파일 만들기
- fat JAR
- jar 파일안에 여러 jar파일들이 들어있고, 실행 가능한 의존성 관련 컴파일된 클래스들이 packaging 되어있다.
Springboot의 fat Jar 만들기
- Springboot ClassLoader module에는 실행 가능한 jar 파일이나 war 파일을 지원해주는 기능이 들어있다.
- maven이나 gradle plugin을 이용하면 자동으로 생성 시켜준다.
Nested Jar 파일
- Jar파일 안에 여러 jar 파일들이 packaging 되어 있는 경우 java(JVM)만으로는 읽어낼 방법이 없다.
- Springboot에서는 org.springframework.boot.loader.jar.JarFile, 자체 loader를 통해
Nested Jar 파일들을 읽어온다. - 처음 로딩될때 Fat Jar 파일의 각 클래스를 물리적인 주소로 나눠서 offset을 기록해두고, load가 될때 해당 주소의 컴파일된 클래스를 불러온다
Launching Executable Jar file
- org.springframework.boot.loader.Launcher( Jar or War )
Executable Jar 파일을 실행시키는 main class - @SpringbootApplication 어노테이션이 붙은 클래스를 찾아 main method를 실행시킨다.
Build System
- dependency, 의존성 관리를 지원하는 Build System을 사용하길 강력히 권장한다고 한다
- Maven 중앙 저장소에 공개된 아티팩트(jar파일)를 가져와 사용할 수 있는 시스템, Maven, Gradle중 하나를 선택해서 사용하길 권장한다
- 그외의 시스템도 사용 가능하나, 특별히 지원하진 않는다. ( 권장하지 않음 )
Dependency Management
- SpringBoot가 관리하는 의존성 목록을 지원한다
- parent version은 명시해야하나, 이외의 version은 custom을 할 경우가 아니면 명시할 필요가 없다
spring-boot-starter-parent
- Maven 시스템을 사용하는 어플리케이션은, spring-boot-starter-parent을 상속받아서 사용할 수 있는데 센스있는 default값들을 사용할 수 있다
- Java version, encoding, dependencyManaging, resource filtering, plugin, profile등을 설정해주며, 필요하면 해당 설정을 override해서 custom할 수 있다
부가 설명
Springboot는 slf4j Facade를 앞에 두고 logback, log4j, log4j2등을 사용한다
그러나 다른 ClassLoader를 사용하는 java.util.Logging(시스템 클래스 로더)을 쓰면 안된다
스냅샷, M 버전, RC 버전의 차이
- 스냅샷: 데일리 빌드 수준 ( 개발 버전 )
- M 버전: 적당한 개발 버전 (마일스톤 버전)
- 스냅샷과 M 버전에 추가된 Class나 interface는 바뀔 가능성이 있다
- RC 버전: 마일스톤 버전을 한번 더 정리한 버전 ( Release Candidate )
- GA 버전: 메이븐 저장소에 올라가는 최종 릴리즈 버전
resource filtering( spring-boot-starter-parent )
<resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/application*.yml</include> <include>**/application*.yaml</include> <include>**/application*.properties</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>**/application*.yml</exclude> <exclude>**/application*.yaml</exclude> <exclude>**/application*.properties</exclude> </excludes> </resource> </resources>
ClassPath내 yml, yaml, properties 파일들을 자동으로 읽는다.
728x90
반응형
'Study > 백기선님의 스프링 부트 강의' 카테고리의 다른 글
Day 4. @SpringBootApplication과 XML 빈 설정 파일 사용하기 (0) | 2021.08.07 |
---|---|
Day 3. 스프링 부트 스타터 (0) | 2021.08.07 |
Day 1. 스프링 부트 시작하기 정리 (0) | 2021.08.07 |