프로그래밍/면접대비문제
스프링 부트 어플리케이션이 실행되면 어떤 일들이 일어나는가.
Angloper
2024. 11. 30. 14:52
스프링 부트 어플리케이션이 실행되면 어떤 일들이 일어나는가.
Spring Boot Application이 시직되면 내부에서 일어나는 일에 대해 정리한다.
1.JVM 및 Main 메서드 시작
- JVM 이 애플리케이션을 실행하며
main
메서드를 호출 - Spring Boot 애플리케이션은
@SpringBootApplication
어노테이션이 붙은 클래스의main
메서드를 시작점으로 잡는다.
2.SpringApplication 초기화
SpringApplication.run()
메서드가 호출되며 스프링 애플리케이션 컨텍스트가 초기화됨- 주요 작업
- 애플리케이션 타입 결정(Servlet, Reactive, None)
- 배너 출력 여부 설정
- 기본 프로퍼티 및 환경 로딩
3.Environment 생성 및 설정
Environment
객체가 생성되어 시스템 속성, 환경 변수, 프로파일 등이로그됨- 외부설정(ex:
application.properties
,application.yml
)이 읽혀지고 환경 변수와 병합됨.
4.Application Context 생성
- Spring Boot 는 실행 모드에 따라 적절한 컨텍스트를 선택함.
- AnnotationConfigServletWebserverApplictionContext (웹 어플리케이션)
- AnnotationConfigReactiveWebServerApplicationContext (리액티브 어플리케이션)
- AnnotationConfigApplictionContext (비 웹 어플리케이션)
- 이 컨택스트는 어플리케이션의 모든 빈(bean) 및 설정을 관리함
5.CommandLineRunner 및 ApplicationRunner등록
ApplicationContext
초기화 중에CommandLineRunner
와ApplicationRunner
인터페이스를 구현한 빈들이 등록됨- 이 빈들은 애플리캐이션 초기화가 완료된 후 추가 작업을 실행할 수 있음.
6.자동설정(Auto Configuration)
- Spring Boot는
@EnableAutoConfiguration
을 통해 여러 자동 설정 클래스(AutoConfiguration
)을 활성화함. - 자동 설정은 클래스 패스 및 환경 변수를 기반으로 애플리케이션에 필요한 빈을 자동으로 구성함.
- Ex) DB Connection 설정, Web server 설정, Spring Security 설정 등
7.빈(Bean) 등록 및 DI(의존성 주입)
- 스프링 애플리캐이션 컨텍스트 내에서 모등
@Component
,@Service
.@Repository
,@Controller
등의 빈을 스캔하여 등록 - 등록된 빈들 간의 의존성을 주입(생성자, 세터, 필드 기반)
- 프로파일 조건에 따라 특정 빈만 활성화될 수도 있음.
8.내장 웹서버 시작(Optional)
- 웹 어플리케이션인 경우, Spring Boot는 내장된 톰캣, 제티, 언더토우 등을 통해 HTTP서버를 시작
- HTTP 포트, SSL설정 등이 적용됨.
- 서블릿 컨테이너가 초기화 되고
DispatcherSErvlet
이 설정됨.
9.Spring MVC 또는 WebFlux 설정(웹 애플리케이션인경우)
DispatcherServlet
을 통해 요청을 처리하는 기본 매핑을 설정HandlerMapping
,HandlerAdapter
,ViewReolver
등을 초기화 하여 웹 요청에 필요한 구성요소를 준비
10.이밴트 발행 및 리스너 실행
- Spring Boot는 애플리케이션 실행 과정에서 여러 이벤트를 발행함.
ApplicationStartingEvent
ApplicationEnvironmentPreparedEvent
ApplicationPreparedEvent
ApplicationStartedEvent
ApplicationReadyEvent
- 위 이벤트를 통해 특정 시점에 사용자 정의 작업을 실행할 수 있음.
11.애플리케이션 준비 완료
- 애플리케이션 컨택스트 초기화가 완료되고, 모든 빈이 생성되고 초기화됨
CommandLineRunner
및ApplicationRunner
구현체가 실행됨.ApplicationReadyEvent
가 발행되며 애플리케이션이 요청을 처리할 준비가 완료됨
12.애플리케이션 실행 상태 유지
- Spring Boot는 실행 상태를 유지하며 HTTP요청을 대기하거나 비웹 애플리케이션에서는 작업을 지속함.
- 내부적으로 애플리케이션 컨택스트는 필요에 따라 라이프 사이클을 관리함.
13.애플리케이션 종료
- 애플리캐이션 종료시 Spring Boot는
ApplicationContext
를 닫으며 빈의destroy()
메서드 호출 및 리소스 정리를 수행 ApplicationFailedEvent
가 발행될 경우 애플리케이션 시패를 기록
Spring Boot Application으 LifeCycle에 대해 간략하게 정리 해 보았다.
Spring 기반의 서비스를 운영 / 개발 하는 회사라면 자주 나오는 질문이니 숙지하고 있으면 좋다.
세부 내용까지는 힘들더라도 1~12번 넘버링 되어있는 순서만이라도 기억하면 좋다.
반응형