이론 1) 스프링부트 자동설정 - EnableAutoConfiguration, ComponentScan
- 의존성
: POM.xml 파일에서 왼쪽에 'o' 표시 뜨면 관리되고 있는 의존성임, 안 뜨면 버전을 꼭 써줘야 함
: dependency에 버전이 없고, 두 개밖에 없음
: parent -> dependencies : 버전들이 쭉 들어있고, 이 중에서 사용하면 따로 버전을 명시하지 않아도 됨
: 우측 maven 창에서 의존성 관계를 볼 수 있음
: 우리가 관리해야할 의존성이 줄어듦(버전 관리를 할 필요없음)
: 특별히 원하는 버전이 있으면 써주면 됨
만약, parent를 사용하지 않는다면 레퍼런스에 방법에 따르면 됨
but, parent가 그 밖의 다른 설정들도 해주기 때문에 parent POM 쓰는 것을 추천
- 의존성 버전 변경하는 법
: parent -> dependencies 에서 버전 복사해서
: POM.xml의 properties 에 버전 변경해서 추가
- @EnableAutoConfiguration, 자동 설정
: @SpringBootApplication = @SpringBootConfiguration + @ComponentScan + @EnableAutoConfiguration
: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
-> @EnableAutoConfiguration 에서 자동으로 만들어주는 빈
-> WebApplicationType.NONE으로 설정해주면 됨
: @ComponentScan 에서 먼저 빈을 불러들이고, @EnableAutoConfiguration 에서 두번째로 추가적인 빈을 등록해줌
- @ComponentScan
: @Component @Configuration @Repository @Service @Controller @RestController라는 어노테이션을 가진 클래스들을 스캔해서 빈으로 등록하는 것
: TypeExcludeFilter과 AutoConfigurationExcludeFilter는 제외하고 빈으로 등록함
: me.whiteship 밑에 있는 아이들만 빈으로 등록해 줌
- @EnableAutoConfiguration
: spring.factories
: org.springframework.boot.autoconfigure.EnableAutoConfiguration 키값에 해당하는 모든 클래스를 빈에 등록함 -> 조건에 맞으면
- autoconfiguration
1. 의존성 추가
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. @Configuration 파일 작성 -> HolomanConfiguration.class
package me.whiteship;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HolomanConfiguration {
@Bean
public Holoman holoman(){
Holoman holoman = new Holoman();
holoman.setHowLong(5);
holoman.setName("keesun");
return holoman;
}
}
- 톰캣 내장 웹서버
스프링 부트는 서버가 아니다.
톰캣 객체 생성
포트 설정
톰캣에 컨텍스트 추가
서블릿 만들기
톰캣에 서블릿 추가
컨텍스트에 서블릿 맵핑
톰캣 실행 및 대기
: 이 모든 과정을 보다 상세히 또 유연하고 설정하고 실행해주는게 바로 스프링 부트의 자동 설정.
ServletWebServerFactoryAutoConfiguration (서블릿 웹 서버 생성)
TomcatServletWebServerFactoryCustomizer (서버 커스터마이징)
DispatcherServletAutoConfiguration (서블릿 만들고 등록)