<aside> <img src="/icons/gradebook_purple.svg" alt="/icons/gradebook_purple.svg" width="40px" />
학습 목표
SpringApplication.run()
메서드 내부에서 수행되는 Spring Boot 애플리케이션의 실행 흐름을 단계별로 이해할 수 있다.prepareContext
, refreshContext
, callRunners
)의 흐름을 따라가고, 실행 과정 중 생성되는 객체의 내부 상태를 확인할 수 있다.flowchart TD
A["public static void main"] --> B["SpringApplication.run(...)"]
B --> C["@SpringBootApplication"]
C --> D_sub
D_sub --> E["ApplicationContext 초기화"]
E --> F["내장 Tomcat 등 서버 구동"]
F --> G["클라이언트 요청 대기 상태 진입"]
subgraph D_sub [구성 어노테이션]
DA["@EnableAutoConfiguration"]
DB["@ComponentScan"]
DC["@SpringBootConfiguration"]
end
Spring Boot 애플리케이션은 SpringApplication.run()
호출을 통해 실행되며, 이 과정은 단순한 메서드 호출 이상의 의미를 가진다. 실행과 동시에 애플리케이션 컨텍스트 생성, 자동 설정 적용, Bean 등록, 생명주기 콜백 실행 등의 일련의 핵심 단계가 체계적으로 작동하게 된다.
이 절에서는 Spring Boot가 애플리케이션을 구동하는 전체 흐름을 내부적으로 어떤 방식으로 처리하는지를 구조적으로 살펴본다.
Spring Boot는 실행 시 SpringApplication
객체를 생성하고, 내부적으로 다양한 초기화 작업을 수행한다. 이 때 가장 중요한 과정 중 하나가 ApplicationContext
의 생성 및 구성 단계다.
ConfigurableApplicationContext context = SpringApplication.run(MyApp.class, args);
실제로 이 호출 내부에서는 다음과 같은 단계가 진행된다:
SpringApplication
객체 생성ApplicationContext
의 타입Environment
(운영 환경 변수, 프로파일 등)Banner
)Application Listener
)main()
메소드 위치 추적 등
📌 내부 초기화 예시:
this.mainApplicationClass = deduceMainApplicationClass();
this.webApplicationType = WebApplicationType.SERVLET; // 기본 웹 타입 지정
WebApplicationType
결정
Spring Boot는 클래스패스에 다음 요소가 있는지 분석하여 웹 애플리케이션 유형을 자동 판단합니다:
타입 | 조건 |
---|---|
SERVLET | javax.servlet.Servlet, Spring WebMvc 있음 |
REACTIVE | spring-webflux 있음 |
NONE | 둘 다 없으면 일반 Java 앱 |
ApplicationContext
생성
생성되는 실제 컨텍스트 타입은 애플리케이션 유형에 따라 다릅니다:
WebApplicationType | 생성되는 ApplicationContext |
---|---|
SERVLET | AnnotationConfigServletWebServerApplicationContext |
REACTIVE | AnnotationConfigReactiveWebServerApplicationContext |
NONE | AnnotationConfigApplicationContext |
ApplicationContext
구성
ApplicationContextInitializer
실행Environment
와 PropertySource
로딩<aside> 💡
이 단계는 Spring의 기본 컨테이너 구성을 완성하는 중요한 기초 단계로, 이후 자동 설정이나 Bean 등록은 이 컨텍스트 위에서 동작한다.
</aside>
ApplicationContext
가 준비되면, Spring Boot는 자동 구성 로직을 적용하여 필요한 Bean과 설정을 자동으로 주입한다. 이 과정의 핵심은 @EnableAutoConfiguration
에 의해 동작하는 자동 설정 클래스의 로딩이다.