킹의 개발일지

@SpringBootApplication 본문

Spring

@SpringBootApplication

k1ng 2022. 6. 18. 02:15

스프링부트 어플리케이션을 생성하면, 패키지 아래에 애플리케이션 이름을한 클래스가 자동으로 생성돼있는걸 볼 수 있다.

 

그리고 해당 클래스에 들어가보면 @SpringBootApplication이라는 어노테이션과 함께 main메서드에 해당 클래스를 애플리케이션 시작점으로 등록하는 스프링 훅이 있음을 볼수 있다.

 

그렇담 @SpringBootApplication이 하는 일은 무엇일까?

 

@SpringBootApplication은 자동설정, 컴포넌트 탐색 기능을 포함하는 복합 애너테이션이다.

 

해당 애너테이션이 붙은 클래스는 ‘나는 웹 컨테이너에 설치할 필요가 없는 애플리케이션이야’ 라고 말하고 있는것과 같은데, 자동설정컴포넌트 탐색이 그것을 가능케 해준다.

 

자동설정(AutoConfiguration)

스프링 부트에는 자동설정 기능이 포함돼 있다.

 

자동설정이란 스프링 부트 애플리케이션의 설정 내용을 분석해서 발견되는 정보에 맞게 다영한 빈을 자동으로 활설화하는 조건 분기 로직이다.

 

다음과 같이 스프링 부트는 자동설정에 필요한 다양한 정책을 가지고 있다.

  • 클래스패스
  • 다양한 설정파일
  • 특정 빈의 존재여뷰
  • 기타 등등

자동설정은 이와 같이 애플리케이션의 여러 측면을 살펴보고 ‘유추’ 한 다음, 다양한 컴포넌트를 자동으로 활성화한다.

 

예를 들어 WebFluxAutoConfiguration 빈은 다음 조건이 충족될 때만 활성화된다.

  1. 리액티브 컨테이너 존재
  2. 클래스패스에 스프링 웹플럭스 존재
  3. WebFluxConfigurationSupport 타입 빈의 부재

 

개발자가 커스텀하길 원한다면 WebFluxConfigurationSupport 타입 빈에 원하는 설정을 작성하면 된다.

 

이 점이 스프링 부트에서 가장 빛나는 기능중의 하나다.

 

어떤 설정 세트에 의해 활성화되던 빈이 다른 설정 세트에 의해 비활성화 되고 아무런 효력을 발휘하지 않게 된다.

 

즉, 개발자가 어떤부분에 대해 직접 지정한 설정이 없으면 스프링 부트가 알아서 필요한 빈을 적절히 생성해서 사용하고 해당 설정이 있으면 직접 지정한 대로 동작하고 그 부분에 대한 자동설정은 무효화 된다.

 

컴포넌트 탐색

스프링 애플리케이션에서 빈을 등록하는 방식은 두 가지로 나눌 수 있다.

 

빈으로 등록될 클래스의 물리적 위치와 무관하게 환경설정 클래스에서 직접 하나하나 빈으로 등록할 수 있고, 또는 그냥 빈의 존재를 플래그로 표시하기만 하고 나머지는 스프링이 ‘컴포넌트 탐색’ 을 통해서 자동으로 빈을 찾아내고 등록하게 할 수 도 있다.

 

스프링 애플리케이션이 실행되면 모든 빈은 애플리케이션 컨텍스트 에 등록된다.

 

때문에 명시적으로 @Bean 어노테이션으로 어플리케이션 컨텍스트에 등록하지 않아도 스프링의 제어역전이라든지, DI를 이용할 수 있는것이다.

 

@SpringBootApplication어노테이션 하나로 XML이나 자바 설정파일에 했어야했던 작업들이 상당히 줄어든것을 볼 수 있다.

 

아무 설정하지 않으면 디폴트로 적용되는 기능들을 좀더 세세하게 쓰길 원한다면, 특정 기능의 빈에 원하는 설정을 작성해서 원하는대로 커스텀 해서 쓸 수도 있다.

 

코드 한줄로 많은 기능들을 편히 쓸수 있게 된것이다.

'Spring' 카테고리의 다른 글

Spring Security without the WebSecurityConfigurerAdapter  (0) 2022.06.15