내장톰캣 - 설정
- 이전 방법은 너무 불편해..
- 그래서 라이브러리처럼 내장 톰캣을 제공해보자
- 설정
- 흠 이런거 없이도 프로젝트는 동작했는데?
내장톰캣 - 스프링
내장 톰캣4 - 빌드와 배포
- 설정에 추가 되어있는 코드 자동으로 jar 된다.
- 스프링 프레임워크가 없다?
- 라이브러리에 다넣었는데?
- 우리가만든 소스코드만있고 라이브러리가 없으니까 오류!!!
- 이런 이유때문에 오류가 나는것..
- 그럼어캐 하지?
- 이런게 있구나 이런 과정이구나
- 라이브러리를 다풀어서 그거를 갖다가 풀어서 다넣어주겟따 이런 뜻?
장점?
- 필요한 라이브러리 다 내장 할 수 있게 함.
- 내장 톰캣 라이브러리를 jar내부에 내장할 수 있게 됨.
- 덕분에 하나의 jar파일로 부터 배포부터 웹 서버 설치 실행까지 모두 단순화
- 이런 경고가 나오는 것들이 둘 중의 하나만 선택될 수 있다는 예시 다(경고!)
편리한 부트 클래스 만들자
- ComponentScan
- 스프링이 내부적으로 읽어서 컴포넌트스캔으로 인식이됨
- 컴포넌트스캔 기능이있는 애노테이션 기능 및 여러가지 기능이있는 애노테이션이 라고 가정하자
스프링 부트와 웹 서버 - 프로젝트 생성
- 프로젝트를 만들고 어떤 기능이 있는지 알아보자
스프링 부트와 웹 서버 - 실행 과정
private ConfigurableApplicationContext createContext() {
if (!AotDetector.useGeneratedArtifacts()) {
return new AnnotationConfigServletWebServerApplicationContext();
}
return new ServletWebServerApplicationContext();
}
- ServletWebServerApplicationContext 이 친구가 만들어 짐.
- 컨테이너가 만들어짐.
- 그냥 대략적으로 2개가 만들어진다 코드레벨에서 파고들면 너무 많아진다.
- 뭔가 마법 처럼 일어나는게 아니라 앞서 만든 것처럼 동일한 방식으로 만들어서 제공한다.
스프링 부트와 웹 서버 - 빌드와 배포
- boot-0.0.1-SNAPSHOT-plain.jar 라이브러리가 없고 코드만 있음.
- 그럼 라이브러리 포함된건 FatJar 인가? 흐음
- 이런 식 구성 스타크 클래스는 맞는데 왜 메인클래스가 아니지?
- 코드 있고
- jar 안에 Jar는 자바 공식스펙에 어긋나는대 있네? 뒤에서 설명
- 알고 있떤 내용이지만 새롭다, JarLauncher.class 처음 봄 !
스프링 부트 실행 가능 Jar
- 실행 가능 자르 ?
- 자바 표준은 아니고 스프링 부트에서 새롭게 정의한 것
- JarLauncher 안에 main class가 있따.
실행 정보
- 내가 만든 메인클래스는 아닌대? 스타트 클래스에는 박혀있지만..
- 실제론 Main-Class: org.springframework.boot.loader.JarLauncher
- 한개만 필요하고 나머지는 부트가 생성해줌
- 설명을 이어서 하면
- 먼저 자바스펙에 맞춰서 하면 자르를 못읽기 때문에
- JarLauncher를 통해 기능을 실행하고 메인메서드(start Class)를 실행 해준다. (메서드를 직접!)