편리한 부트 클래스 만들기
부트 : 시작을 편하게 처리해주는 것
어노테이션 만들기
만든 어노테이션으로 컴포넌트를 스캔 하기 때문에 HelloConfig에 어노테이션은 주석 처리
프로젝트를 실행 시키는 main클래스 생성 (많이 본 형태임)
- 패키지 위치가 중요 (hello)
- 만든 어노테이션에 컴포넌트 스캔이 추가되어 해당 어노테이션이 붙은 클래스의 현재 패키지부터 하위 패키지까지 스캔 대상으로 사용
- MySpringApplication.run(설정 정보, args) 실행하면 됨
- @MySpringBootApplication 어노테이션과 MySpringApplication.run() 메서드만 기억하면 됨
- 내장 톰캣, 스프링 컨테이너 생성, 디스패처 서블릿, 컴포넌트 스캔까지 한번에 동작함
스프링 부트 프로젝트 생성
강의 들으면서 하기에 3.xx 사용
build.gradle
라이브러리에 버전이 없는데 스프링부트가 관리해줌
동작 확인
Whitelabel Error Page 가 나오면 정상 동작
톰캣도 내장 되어있는지 확인
스프링 부트 실행 과정
- 스프링 컨테이너 생성
- WAS (내장 톰캣) 생성
스프링 컨테이너 생성
- main() 메서드 SpringApplication.run() 을 호출
- 메인 설정 정보를 넘겨줌, @SpringBootApplication 어노테이션이 있는 현재 클래스를 지정해 줌
- @SpringBootApplication 어노테이션 안에는 컴포넌트 스캔을 포함한 여러 기능이 설정되어 있음
- 현재 패키지와 하위 패키지 모두 스캔
- 메인 설정 정보를 넘겨줌, @SpringBootApplication 어노테이션이 있는 현재 클래스를 지정해 줌
- 스프링 컨테이너 생성
- org.springframework.boot.web.servlet.context.ServletWebServerApplicationContextFact
ory
- org.springframework.boot.web.servlet.context.ServletWebServerApplicationContextFact
- new AnnotationConfigServletWebServerApplicationContext()
- 스프링 컨테이너 생성
내장 톰캣 생성
org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory
- Tomcat tomcat = new Tomcat() 으로 톰캣 생성
빌드와 배포
jar 빌드
gradlew clean build
jar 생성
jar 실행
java -jar boot-0.0.1-SNAPSHOT.jar
jar 압축 풀기
jar -xvf boot-0.0.1-SNAPSHOT.jar
- META-INF
- MANIFEST.MF
- org/springframework/boot/loader
- JarLauncher.class : 스프링 부트 main() 실행클래스
- BOOT-INF
- classes
- lib 외부 라이브러리
jar 압축을 푼 결과를 보면 FatJar 가 아닌 jar 가 포함되어 있는 새로운 구조
스프링 부트 실행 가능 jar
다시 FatJar 단점
- 어떤 라이브러리가 있는지 확인 불가능
- 파일명 중복 해결 X
실행 가능 jar
위 단점을 해결하기 위해 jar 내부에 jar 를 포함할 수 있는 구조로 jar 를 만들고 실행할 수 있게 함
이것을 실행 가능 jar (Executable Jar) 라고 함
어떤 라이브러리가 있는지 확인이 가능하고, 파일명 중복을 해결할 수 있음 (jar 는 스프링 부트에서 새롭게 정의한 것)
실행 가능 Jar 내부 구조
- jar 실행 시 META-INF/MANIFEST.MF 파일을 찾음
- Main-Class 를 읽어 main() 을 실행 함 (Main-Class: org.springframework.boot.loader.JarLaunche 의 main()) 실행)
- JarLauncher 는 스프링 부트가 빌드 시 넣어줌
- jar 내부에 jar 와 클래스 정보를 읽어옴
- Start-Class: 에 지정된 main() 을 호출함 (Start-Class: hello.boot.BootApplication 의 main())
- BOOT-INF
- 개발한 class 파일들과 리소스파일, 외부 라이브러리 관련 정보들이 있음
- JarLauncher 를 통해서 여기에 있는 classes 와 lib 에있는 jar 파일들을 읽어들임
실행 과정
- java -jar ***.jar 실행
- MANIFEST.MF 인식
- JarLauncher.main() dlstlr
- BOOT-INF/classes
- BOOT-INF/lib/
- BootApplication.main() 실행
feat. 스프링부트 - 핵심 원리와 활용 (김영한)
'다시 웹, 백엔드로 > 스프링' 카테고리의 다른 글
자동 구성 (Auto Configuration) - 1 (0) | 2023.08.23 |
---|---|
스프링 부트 스타터와 라이브러리 관리 (0) | 2023.08.18 |
스프링 부트와 내장 톰캣 - 1 (0) | 2023.08.17 |
웹 서버와 서블릿 컨테이너 - 2 (0) | 2023.08.16 |
웹 서버와 서블릿 컨테이너 (0) | 2023.08.11 |