목차
- Auto Configuration이란?
- Auto Configuration 동작 방식
2-1. main 메소드
2-2. SpringBootApplication
2-3. EnableAutoConfiguration
2-4. AutoConfigurationImportSelector
2-5. 동작 정리
- 결론
1. Auto Configuration이란?
- 스프링부트는 자동 구성(Auto Configuration) 기능을 제공하는데, 일반적으로 수많은 빈들을 자동으로 등록해주는 기능이다.
- 이러한 기능으로 인해 반복적으로 빈을 등록하고 설정하는 부분을 줄이고 편리한 개발을 할 수 있게 도와주며 스프링 부트의 핵심적인 장점이라 할 수 있다.
2. Auto Configuration 동작 방식
1. main 메소드
스프링 부트 프로젝트를 처음 생성했을때 main 메소드를 살펴보자

클래스에 @SpringBootApplication
이 붙어 있는 것을 볼 수 있다. 이 어노테이션이 없다면 평상시 자바소스를 작성하는 것과 별 다르지 않을 것이다.
run()
을 보면 HelloSpringApplication.class
를 넘겨주며, 이 클래스를 설정 정보로 사용하겠다는 것과 같다
@SpringBootApplication
으로 인해 톰캣이 뜨고 서버가 열리고 포트가 열리는 등 일처리를 해주는 것을 보게 된다. 즉, 해당 어노테이션은 중요한 설정정보를 가지고 있다는 것이고 이 어노테이션을 자세히 살펴보자.
2. SpringBootApplication

빈의 등록이 크게 2가지 단계를 걸쳐 이루어지는데, 먼저 @ComponentScan
을 통해 @Component
가 붙어있는 객체들을 스캔하면서 자동으로 빈을 등록해주게 된다.
이 후, @EnableAutoConfiguration
을 통해 스프링에서 자주 사용되는 빈들을 자동적으로 컨테이너에 등록해준다.
3. EnableAutoConfiguration

@EnableAutoConfiguraion
이 AutoConfiguration을 활성화 하는 기능이 된다.
여기서 @Import
는 스프링 설정정보를 포함할때 사용하는데 AutoConfigurationImportSelector
를 봐보자.
4. AutoConfigurationImportSelector

구현체에 있는 ImportSelector를 살펴보자.

앞서 본 스프링 설정정보를 포함할 때 @Import
를 이용해 ImportSelector
를 설정으로 사용할 대상을 동적으로 선택할 수 있다.
여기서 사용되는 selectImports
를 구현체 쪽에서 사용해서 아래 경로에 있는 파일을 읽어서 스프링 부트 자동 구성으로 사용된다.

쭉 따라 가다 보면 파일을 읽어 스프링 빈으로 등록되어지고 Auto Configuration으로 설정이 된 것을 볼 수 있다.

해당 파일의 위치는 아래와 같이 경로를 탐색하여 읽어준다.

resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

가져온 구성정보를 필요한지 아닌지 판단하여 유효한 설정이라면, AutoConfiguration으로 등록이 되어지게 된다.
5. 동작 정리
즉, 스프링 부트 AutoConfiguration의 동작하는 방식은 이와 같다.
@SpringBootAppliction
→ @EnableAutoConfiguration
→ @Import(AutoConfigurationImportSelector.class)
→ resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일을 열어서 설정 정보를 가져와 유효하다면 스프링 컨테이너에 등록되어 사용된다.
3. 결론
- AutoConfiguration으로 인해 개발자가 매우 편리하게 개발을 하도록 도와준다. 개발자가 직접 의존성을 설정하고 버전을 관리하는 번거로움을 줄여주며 일관된 구성 방식을 유지하는데 강력한 기능이다.
- AutoConfiguration은 라이브러리를 제공할 때 주로 사용하고, 그 외에는 사용하는 일이 거의 없긴 하다. 그 이유는 우리가 코딩 하면서 필요한 빈들은 컴포넌트스캔을 하거나 직접 등록해서 사용하면 되기 때문이다.
참고
'Spring' 카테고리의 다른 글
객체 지향 프로그래밍의 4대 특성 (캡! 상추다) (0) | 2023.06.28 |
---|---|
서블릿(Servelet)이란? (0) | 2023.06.20 |
Statement vs PreparedStatement (0) | 2023.05.22 |
단위테스트 vs 통합테스트 vs 인수테스트 (0) | 2023.05.16 |
테스트코드는 무엇이고 왜 작성해야 할까요? (0) | 2023.05.15 |