Spring Boot는 개발자가 명시적으로 Bean을 하나하나 등록하지 않아도 애플리케이션에 필요한 Bean들을 자동으로 구성하고 등록해주는 다양한 메커니즘을 제공한다. 이 기능의 핵심은 @SpringBootApplication 어노테이션에서 출발한다.

1. @SpringBootApplication의 동작 방식 이해

@SpringBootApplication은 Spring Boot 애플리케이션의 진입점에 붙는 핵심 어노테이션으로, 실제로는 아래 세 가지 어노테이션을 조합한 메타 어노테이션이다:

스크린샷 2025-04-21 025358.png

flowchart TD
    A["애플리케이션 시작<br>SpringApplication.run()"] --> B[@SpringBootApplication]
    B --> C[@EnableAutoConfiguration]
    B --> D[@ComponentScan]
    C --> E[조건 기반 Bean 자동 등록]
    D --> F[명시된 패키지 하위의<br>컴포넌트를 스캔]
    E --> G[IoC 컨테이너에 Bean 등록]
    F --> G

@SpringBootApplicationSpring Boot가 "자동으로 실행되는 것처럼 보이게" 만드는 핵심 구문이다. 이 어노테이션 하나만으로 수백 개 이상의 Bean이 자동 등록될 수 있다. 이렇게 자동 등록된 Bean은 Spring Boot 내부에 내장된 AutoConfiguration 클래스들에 의해 결정된다.

예를 들어, spring-boot-starter-web 의존성을 추가하면 DispatcherServlet, requestMappingHandlerMapping 등의 웹 관련 Bean이 자동 등록된다. 이들은 WebMvcAutoConfiguration에 의해 설정된다.


2. 자동 등록된 Bean 덮어쓰기

Spring Boot는 @EnableAutoConfiguration을 통해 필요한 Bean을 자동으로 구성하지만, 개발자가 직접 정의한 Bean이 있으면 자동 등록보다 우선적으로 적용된다. 이를 활용하면 기본 설정을 유지하되, 필요한 부분만 명시적으로 오버라이드할 수 있다.

2-1. 자동 등록된 Bean의 종류 살펴보기

자동 설정된 Bean들은 다음과 같은 클래스를 통해 등록된다: