[Spring] Tomcat Server 기동 시 Listener와 Spring IoC Container의 초기화 과정
Tomcat 서버와 리스너 개요
Tomcat 서버가 켜지면 먼저 서블릿 컨테이너가 동작한다. 이때 웹 애플리케이션이 초기화되고, 설정 파일(web.xml 등)에 정의된 리스너가 등록돼 동작을 시작한다. 리스너는 서버의 상태 변화(시작, 종료, 세션 생성 등)를 감지하는 역할을 한다.
Listener와 Spring IoC 컨테이너 초기화
ContextLoaderListener가 web.xml에 등록돼 있으면 톰캣이 켜질 때 이 리스너가 동작해서 Spring의 ApplicationContext.xml를 초기화한다. 이 과정에서 Spring의 IoC 컨테이너가 생성된다.
Listener는 주로 ApplicationContext 를 설정하고, 필요한 Bean들을 로딩한다. Spring Application은 이때 XML 설정 파일이나 어노테이션을 기반으로 IoC 컨테이너가 구성된다.
Spring 컨테이너의 Bean 등록 및 의존성 주입
Listener 가 Spring의 IoC 컨테이너를 초기화하면 설정된 Bean들이 메모리에 로드된다. 즉, Service나 DAO 같은 Bean들이 IoC 컨테이너에 등록되고, 의존성 주입(DI)이 이루어진다. 이 과정에서 @Component, @Service, @Repository로 정의된 클래스들이 Spring 컨테이너 안에서 객체로 생성된다.
DispatcherServlet과 Controller의 동작 흐름
의존성 주입을 통해 Service와 DAO가 연결되고, 모든 객체가 준비되면 이제 DispatcherServlet이 동작하면서 Client로부터의 HTTP 요청을 받는다. 요청이 들어오면 Spring의 컨트롤러(@Controller)가 동작해 필요한 서비스를 주입받아 비즈니스 로직을 처리하게 된다.
이때 서비스 객체는 이미 IoC 컨테이너에 등록돼 있어서 컨트롤러가 @Autowired 등을 통해 이를 주입받아 사용한다.
리스너와 IoC 컨테이너의 역할
Tomcat 서버가 기동하면서 리스너가 Spring 컨테이너를 초기화하고, 그 컨테이너에서 관리하는 서비스들이 이후에 컨트롤러에 의해 사용된다는 흐름을 이해하면 Spring의 구조를 더 쉽게 파악할 수 있다.