[Spring]Spring Container

김피자·2023년 3월 16일
0

Spring

목록 보기
22/28

스프링 컨테이너

스프링 컨테이너는 스프링에서 자바 객체들을 관리하는 공간을 말한다.
자바 객체를 스프링에서 빈(Bean)이라 하는데
스프링 컨테이너는 이 빈들의 생명주기를 관리한다.
(또한 Bean을 관리하기 위해 IoC를 사용한다.)

Spring Container의 종류에는 BeanFactory와 이를 상속한 ApplicationContext가 존재한다. 이 두개의 컨테이너로 의존성 주입된 Bean들을 제어하고 관리할 수 있다.

ApplicationContext컨테이너가 BeanFactory의 기능을 포괄하면서 추가적인 기능을 제공해 대부분의 경우 ApplicationContext를 사용한다.

스프링 컨테이너는 어떻게 생성될까?

1. 웹 애플리케이션이 실행되면 WAS(Tomcat 등)에 의해 web.xml이 Loading

Servlet Container(ex) Tomcat Server) > URL 확인 > 요청을 처리할 서블릿을 찾아 실행

web.xml
웹 애플리케이션의 설정파일로 애플리케이션의 클래스, 리소스, 구성 등 웹 서버가 웹 요청을 처리하는 방법을 기술하는 곳

2. web.xml에 등록되어 있는 ContextLoaderListener 가 java class 파일로 생성된다.

Servlet Container가 파일을 읽어서 구동될 때, ContextLoaderListener가 자동으로 메모리에 생성된다.
ContextLoaderListener 클래스는 ServletContextListener 인터페이스를 구현하고 있으며, root-context.xml 또는 ApplicationContext.xml에 따라 ApplicationContext를 생성한다.

3. 생성된 ContextLoaderListener가 root-context.xml을 Loading

ContextLoaderListener 객체는 src/main/resources 폴더에 있는 applicationContext.xml 파일을 로딩하여 스프링 컨테이너를 구동하는데 이를 Root 컨테이너라 한다.

원래는 ContextLoaderListener가 WEB-INF 밑에 있는 파일을 먼저 로딩하도록 되어있지만 유지보수 상의 이유로 src/main/resources에 파일을 넣어 놓는 경우가 많다.

src/main/resources에 있는 파일을 가져다 로딩하려면 web.xml에 -param으로 설정해서 사용한다.

4. root-context.xml에 등록되어 있는 Spring Container가 구동된다.

root-context.xml에는 주로 view 자원을 제외한 공통 bean을 설정한다.

이때 개발자가 작성한 비즈니스 로직에 대한 부분과 DAO, VO 객체들이 생성된다.

5. 클라이언트로부터 웹 애플리케이션 요청이 온다.

최초 클라이언트 요청에 의해 DispatcherServlet이 생성된다.

6. DispatcherServlet 생성

DispatcherServlet 객체는 WEB-INF/config 폴더에 있는 servlet-context.xml 파일을 로딩하여 두번째 스프링 컨테이너를 구동한다.
이 두번째 스프링 컨테이너가 컨트롤러 객체를 메모리에 생성한다.

DispatcherServlet은 클라이언트의 요청을 분석하여 알맞은 PageController에게 전달하고, 응답을 받아 요청에 대한 응답을 어떻게 할지 결정만 한다.
실질적인 작업은 PageController에서 이뤄지기 때문이다. 이러한 클래스들을 HandlerMapping, ViewResolver 클래스라 한다.

7. DispatcherServlet은 servlet-context.xml을 loading

8. 두번째 스프링 컨테이너가 구동되며, 각 응답에 맞는 PageController가 동작

첫번째 스프링 컨테이너가 구동되면서 생성된 DAO, VO, ServiceImpl 클래스들과 협업하여 알맞은 작업을 처리한다.


출처
https://sigridjin.medium.com/servletcontainer%EC%99%80-springcontainer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80-626d27a80fe5
https://velog.io/@tank3a/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88

profile
제로부터시작하는코딩생활

0개의 댓글