스프링이해 3 - @SpringBootApplication 안에 실제로 뭐가 들어있는지

좋습니다 👍
이번에는 Spring Boot에서 가장 중요한 어노테이션

> @SpringBootApplication 안에 실제로 뭐가 들어있는지



설계 관점에서 설명하겠습니다.

많은 사람들이 **“그냥 붙이는 어노테이션”**으로만 알고 있지만
사실은 3개의 핵심 어노테이션 묶음입니다.


---

1️⃣ @SpringBootApplication 구조

실제로 내부는 이렇게 되어 있습니다.

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
}


@SpringBootApplication
      │
      ├─ @SpringBootConfiguration
      ├─ @EnableAutoConfiguration
      └─ @ComponentScan


---

2️⃣ @ComponentScan

이건 **Spring Framework 기능입니다.

역할

> 컴포넌트를 자동으로 스캔해서 Bean 등록



대상

@Component

@Service

@Repository

@Controller

@RestController



@Service
public class UserService {}

실행 흐름

@ComponentScan
      ↓
패키지 탐색
      ↓
@Component 발견
      ↓
Bean 등록

보통

@SpringBootApplication 위치 패키지

부터 하위 패키지를 전부 스캔합니다.


---

3️⃣ @EnableAutoConfiguration

이게 Spring Boot의 핵심입니다.

역할

> 라이브러리를 보고 자동으로 설정을 만들어줌




프로젝트에

Spring Web

JPA

H2


있으면 자동 설정

예시

DispatcherServlet
Jackson
Tomcat
Spring MVC
DataSource
JPA

이것들이 자동으로 Bean 등록됩니다.

대표 예

Apache Tomcat

Jackson

Hibernate



---

내부 동작

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

여기서

자동 설정 클래스 목록

을 읽습니다.


WebMvcAutoConfiguration
DataSourceAutoConfiguration
JpaAutoConfiguration

조건

클래스 존재 여부
라이브러리 존재 여부
프로퍼티 설정

에 따라 자동 설정됩니다.


---

4️⃣ @SpringBootConfiguration

이건 사실

@Configuration

과 거의 같습니다.


> Bean 설정 클래스



입니다.

내부 구조

@Configuration
public @interface SpringBootConfiguration {}

그래서 Spring Framework의 @Configuration 기능이 그대로 적용됩니다.


✔ @Bean 사용 가능
✔ CGLIB 프록시 적용


---

5️⃣ 전체 실행 흐름

앱 실행

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

실행 과정

SpringApplication.run()
       ↓
ApplicationContext 생성
       ↓
@ComponentScan 실행
       ↓
Bean 등록
       ↓
@EnableAutoConfiguration 실행
       ↓
자동 설정 로딩
       ↓
내장 서버 실행

그래서 Spring Boot는

설정 없이도 서버 실행 가능

합니다.


---

6️⃣ 예전 Spring과 차이

옛날 Spring

설정 지옥

<bean id="dataSource"/>
<bean id="transactionManager"/>
<bean id="dispatcherServlet"/>

수백 줄 XML


---

Spring Boot

@SpringBootApplication



---

🔥 핵심 요약

@SpringBootApplication =
    @SpringBootConfiguration
  + @EnableAutoConfiguration
  + @ComponentScan

역할

기능 설명

ComponentScan Bean 자동 등록
EnableAutoConfiguration 라이브러리 기반 자동 설정
SpringBootConfiguration 설정 클래스



---

💡 Spring Boot 진짜 핵심

> Convention over Configuration




설정보다 규약

입니다.


---

원하시면 다음도 설명해 드릴게요.
이건 Spring 내부 구조 이해의 끝판왕입니다.

1️⃣ Spring Bean 생명주기 (90% 개발자가 정확히 모름)
2️⃣ DispatcherServlet 동작 원리 (Spring MVC 핵심)
3️⃣ Spring Boot 자동설정 직접 만드는 방법 (@Conditional)
4️⃣ Spring이 싱글톤인데 Thread-safe 문제 없는 이유

특히 4번은 면접에서 정말 많이 물어보는 질문입니다.


댓글

가장 많이 본 글