본문 바로가기
Spring

spring boot의 가장 큰 장점 Auto Configuration이란? 동작 방식은?

by Jammini 2023. 6. 16.
728x90

목차

  1. Auto Configuration이란?
  1. Auto Configuration 동작 방식

    2-1. main 메소드

    2-2. SpringBootApplication

    2-3. EnableAutoConfiguration

    2-4. AutoConfigurationImportSelector

    2-5. 동작 정리

  1. 결론

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은 라이브러리를 제공할 때 주로 사용하고, 그 외에는 사용하는 일이 거의 없긴 하다. 그 이유는 우리가 코딩 하면서 필요한 빈들은 컴포넌트스캔을 하거나 직접 등록해서 사용하면 되기 때문이다.

참고

반응형