스프링 부트의 @AutoConfigure 작동 방식

LSM ·2022년 10월 10일
0

작성 배경 :

스프링 대비 스프링부트의 장점은 웹 어플리케이션 동작을 위한 DispatchServlet과 같이 기능들을 사용함에 있어 개발자가 관여하지 않고 자동으로 설정해준다는 장점을 지니고 있습니다.

이러한 자동설정은 어떻게 되는 것일까요?

탐구 과정 :

가장 먼저 스프링부트를 시작하게 되면 볼 수 있는 화면을 보겠습니다.

이처럼 @SpringBootApplication 어노테이션 만 있다면 web.xml과 같은 어떠한 Servlet 에 대한 설정 없이 이처럼 @Controller로 지정한 컨트롤러 클래스로의 접근이 가능합니다.

그렇다면 우리는 어떤식으로 스프링 부트가 자동설정 값들을 관리하고 있는지 알 필요가 있습니다.

먼저, @SpringBootApplication 어노테이션을 타고 들어가 보겠습니다.

네, @SpringBootApplication 어노테이션은 크게 3가지 어노테이션이 있습니다.

1. SpringBootConfiguration

2. EnableAutoConfiguration

3. ComponentScan

으로 구분이 가능합니다.


가장 먼저, @SpringBootConfiguration 부터 살펴보겠습니다.

보이시나요? 그냥 단순히 해당 어노테이션이 설정을 위한 인터페이스임을 알려주고 빈에 등록하는 작업입니다.


두번째로, @ComponentScan 먼저 확인하겠습니다.

ComponentScan의 역할은 특정 패키지 부터 우리가 스프링부트를 통해 개발을 진행하면서 달았던 어노테이션들 예를들어, @Component, @Service, @Repository 등 이 붙은 클래스들을 찾아서 빈에 등록하기 위해 사용합니다. 즉, 이를 통해 앞서 접근한 @Controller가 붙은 클래스가 컨트롤러 클래서로 빈에 등록될 수 있었던 것입니다.

이를 통해서 왜 Application 클래스 패키지 최상위 즉 루트에 있어야 하는지를 알 수 있습니다. 해당 루트 위치에서 @SpringBootApplication을 단 아래로 부터 Component Scan을 하기 때문이지요!


마지막으로, @EnableAutoConfiguration 입니다. 스프링부트가 자동설정 기능이 가능한 이유인데요, 이는 먼저 @ComponentScan을 통해서 어노테이션이 붙은 클래스들을 빈에 등록한 이후에 동작하게 됩니다. 그 다음으로 @EnableAutoConfiguration 을 통해서 한번 더 Component Scan이 이루어 지는데 그때 등록되는 빈들은 설정을 위해서 다양한 클래스들이 등록이 됩니다.

이를 좀 더 자세히 확인해 보겠습니다. 먼저 SpringBoot Starter 의존성을 등록하면, 하위에 정말 다양한 라이브러리들이 존재합니다. 그중에 Spring boot auto configure 라이브러리를 열어보면 Spring.factories 내부에 자동 설정을 위한 클래스들이 등록되어 있습니다. 즉 스프링부트의 자동설정은 이곳에 등록된 클래스들이 여러 조건에 따라서 빈에 등록되게 되는 것입니다.

예시로, DispatcherServletAutoConfiguration 클래스를 경로에 따라 찾아가보면,

@Configuration이라는 어노테이션을 통해 설정 값이라고 빈에 알려주고, 웹 어플리케이션이라는 조건에만 클래스가 빈에 등록되게한다와 같이 특정 조건 하에만 빈에 등록되도록 설정해놓았습니다.

이렇게 위 과정대로 진행하면, 우리는 자체적인 자동설정 역시 구성할 수 있습니다.

지금까지 평소 스프링부트가 어떤식으로 자동설정을 진행하는지 궁금함을 시작으로 공부한 흔적을 기록해 보았습니다.

자료 출처

https://www.youtube.com/watch?v=yZzUxEp97Ho

profile
개발 및 취준 일지

0개의 댓글