Post

#02_Sprig Boot의 원리(gradle 지시어, @SpringBootApplication, Tomcat)

✏️ Edit
#02_Sprig Boot의 원리(gradle 지시어, @SpringBootApplication, Tomcat)

2. 스프링 부트 원리

gradle dependencies 이해

  • gradle 기본 참고 : https://velog.io/@sa1341/Gradle-%EA%B8%B0%EB%B3%B8-%EB%8B%A4%EC%A7%80%EA%B8%B0-1%ED%8E%B8

  • dependencies 에 정의되는 각 지시어 의미

    • Compile classpath - JDK가 java code를 .class files로 컴파일 할때 필요로 하는 의존 리스트이다.
    • Runtime classpath - 컴파일된 자바 코드가 실제로 실행할때 필요로 하는 의존 리스트이다.
    • complieOnly - 컴파일 패스에만 설정

    • runtimeOnly - 런타임 패스에만 설정

    • implementation - 위 두개의 패스에 둘다 설정 + 해당 의존성을 직/간접적으로 의존하고 있는 모든 의존성 재빌드

    • complie - 위 두개의 패스에 둘다 설정 + 해당 의존성을 직접적으로 의존하고 있는 의존성만 재빌드

    • 💡 위 네 개의 지시어는 앞에 test를 붙여 테스트 환경에서만 사용하게 할 수도 있다.

    • annotationProcessor - lombok 사용 시 필수 추가 지시어

자동 설정 이해

@SpringBootApplication 구성

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

    • ==> 두 단계로 다뉘어 읽힘

      • 1단계: @ComponentScan

      • 2단계: @EnableAutoConfiguration

  • @ComponentScan

    • @Component 어노테이션을 가진 클래스를 스캔하여, 빈으로 등록

    • ex) @Configuration @Repository @Service @Controller @RestController

  • @EnableAutoConfiguration

    • spring.factories
    • org.springframework.boot.autoconfigure.EnableAutoConfiguration
      • @Configuration
      • @ConditionalOnXxxYyyZzz

❗web application 서버로 사용하지 않는다면 아래 두 개의 설정으로도 띄울 수 있다.

  • @Configuration

  • @ComponentScan

=> 별도의 ServletWebServerFactory 생성 필요 (=> @EnableAutoConfiguration 에서 자동 생성해줌)

독립적으로 실행 가능한 JAR

  • gradle의 tasks의 build로 들어가보면 아래 항목들이 존재

    • build : executable jar, plain jar 두 개로 빌드

    • bootJar : executable jar만 빌드

    • clean : build된 jar파일을 삭제

  • jar 파일?

3_내장-웹-서버

자동 설정으로 생성되는 Tomcat

Tomcat이란 ?

  • 자바 기반 웹 애플리케이션을 구동하기 위한 서버 소프트웨어
  • JSP/서블릿(HTTP 요청을 받고, 응답을 되돌려주는 자바 웹 기술) 등의 동적 요청을 처리할 뿐 아니라, 빌드된 정적 리소스(HTML, JS, CSS 등)의 서버 역할을 해준다.
  • Spring Boot는 내부적으로 이 Tomcat을 내장해 두어, 별도 설정 없이 단일 애플리케이션으로 별도 웹 서버 구축 필요 없이, 쉽게 구동 및 배포할 수 있다.
  • build.gradle에 springboot를 의존성에 주입해두면, 프로젝트의 External Libraries에 org.springframework.boot:spring-boot-autoconfigure 가 생성된다.

  • 하위의 META-INF > spring.factories에 여러 자동 설정들을 볼 수 있다.

    • 자세한 정보는 spring-autoconfigure-metadata.properties 파일에서 볼 수 있다.

    • ServletWebServerFactoryAutoConfiguration 에 웹 서버(톰캣)과 컨텍스트가 정의되어 있다.

      • 내부에 TomcatServletWebServerFactoryCustomizer로 서버 커스터마이징도 한다.
    • DispatcherServletAutoConfiguration에 서블릿이 정의되어 있다.