스프링 부트와 내장 톰캣

존스노우·2023년 9월 25일
0

내장톰캣 - 설정

  • 이전 방법은 너무 불편해..
  • 그래서 라이브러리처럼 내장 톰캣을 제공해보자

  • 설정
  • 흠 이런거 없이도 프로젝트는 동작했는데?

  • 실행 완료

내장톰캣 - 스프링

  • 코드를 보면 앞에 거와 비슷하다.

내장 톰캣4 - 빌드와 배포

  • 설정에 추가 되어있는 코드 자동으로 jar 된다.

  • 스프링 프레임워크가 없다?
  • 라이브러리에 다넣었는데?

  • 그래들에서 설정한대로 만들어짐

  • 우리가만든 소스코드만있고 라이브러리가 없으니까 오류!!!

  • 이런 이유때문에 오류가 나는것..
  • 그럼어캐 하지?

  • 이런게 있구나 이런 과정이구나
  • 라이브러리를 다풀어서 그거를 갖다가 풀어서 다넣어주겟따 이런 뜻?

  • 용량이 10메가..

  • 어마어마하게 풀려있다.

장점?

  • 필요한 라이브러리 다 내장 할 수 있게 함.
  • 내장 톰캣 라이브러리를 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)를 실행 해준다. (메서드를 직접!)

  • 기존 알고 있떤 정보들 !

profile
어제의 나보다 한걸음 더

0개의 댓글