SpringBoot #3.3 - WebApplicationContext
WebApplicationContext
![](https://velog.velcdn.com/images/onetuks/post/1ab6ae01-301b-4f15-99a0-31840206ace6/image.png)
- ApplicationContext 상속한 클래스
- ServletContext에 접근할 수 있는 권한 추가
- 여러 서블릿이 공유가 가능한 정보를 ServletContext에 담음
- ServletContainer가 생성될 때 서블릿 정보를 여기에 담음
- applicationContext 생성될 때 setAttribute() 를 통해 ServletContext생성
- 이걸 사용하면 모든 서블릿에 대한 접근이 가능
ContextLoaderListener
웹 환경에서 스프링 어플리케이션 동작 방식
- 클라이언트 요청
- 웹 어플리케이션에서 WebApplicationContext 생성 (ApplicationContext 존재)
- DispatcherSevlet이 WebApplicationContext에서 등록된 빈을 조회
- DispatcherServlet에서 찾고자 하는 서블릿과 빈을 조합해서 결과 만듬
![](https://velog.velcdn.com/images/onetuks/post/e6ba6674-b287-4408-8f35-a182824df778/image.png)
![](https://velog.velcdn.com/images/onetuks/post/9e6762c1-f21b-4331-9b54-1825d45964e6/image.png)
- Servlet Application Context에 DispatcherServlet에 필요한 모든 Bean 이 등록
- Controller 빈 등록
- Service, Repository 빈 등록 X
- Root Application Context에서는 모든 서블릿이 필요한 공통 Bean이 등록
- Root ApplicationContext : Servlet Application Context = 1 : N
- Servlet Application Context가 하나인 경우에는 Root가 없어도 됨.
- 이게 모놀리틱 시스템 → 옛날 방식
- Order, Voucher 처럼 서비스 별로 ServletApplicationContext를 따로두면 모놀리틱하지 않은 시스템