스프링이해 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번은 면접에서 정말 많이 물어보는 질문입니다.
댓글
댓글 쓰기