본문 바로가기

Room 102. Back-end/Spring

[실전 개발자를 위한 Spring Framework ] 강의 - Context 분리와 전략

14강 Context 분리와 전략

  • 목차
    • 내용
      • Servlet context와 Root context
      • 컨텍스트 분리 전략
    • 학습 목표
      • Servlet context와 Root context의 차이점과 계층구조를 이해합니다.
      • 컨텍스트 분리 전략을 이해하여 구현합니다.
  • Servlet Context
    • DispatcherServlet - 웹의 요청을 최초로 접수
    • DispatcherServlet - 설정 파일을 이용해서 ServletContext(ㅅ프링 컨테이너) 로딩
    • Spring-MVC와 관련 있는 빈을 설정
  • Root Context
    • Spring-MVC와 분리되어 빈을 관리하고 싶을 때 사용
    • 일반적으로 Servlet context와 Root context 분리하여 운용

  • Controller / ViewResolver 등 웹과 관련된 빈들은 ServletContext 에 등록합니다.
  • 그 외 Service / Repo / DB 관련 빈은 RootContext 에 등록합니다.
  • Root Context 설정 - web.xml
    • 아래 그림과 같이 servletContext 는 dispatcherServlet에 종속되도록 했었습니다.
    • 그렇다면 root context를 만들기 위해서는
    • listener 를 생성합니다. 이는 스프링 컨테이너에 별도의 컨텍스트를 띄우기 위함입니다.
    • 그리고 context-param 태그를 통해 root-context가 참조할 수 있는 param을 설정합니다.

  • Root Application Context
    • 전체 계층 구조에서 최상단에 위치한 컨텍스트
    • 서로 다른 Servlet context에서 공유해야 하는 Bean들을 등록해놓고 사용하는 용도입니다.
    • 웹 어플리케이션 전체에 적용 가능한 DB연결, 로깅기능 등에 이용함!!!!!!
    • Servlet Context에 등록된 Bean 을 이용할 수 없음!!
    • Servlet Context와 동일한 Bean이 있을 경우 Servlet Context Bean이 우선시됩니다.
    • 하나의 컨텍스트에 정의된 AOP 설정은 다른 컨텍스트의 빈에는 영향을 미치지 않습니다.
  • Servlet Context
    • 서블릿에서만 이용되는 컨텍스트
    • 타 서블릿과 공유하기 위한 Bean들을 루트 웹 어플리케이션 컨텍스트에 등록해놓고 사용해야 함
    • DispatcherServlet은 자신만의 컨텍스트를 생성, 초기화하고 동시에 루트 어플리케이션 컨텍스트를 찾아서 자신의 부모 컨텍스트로 사용합니다.
  • 컨텍스트 분리 전략
    • Servlet Context
      • @Controller
      • component-scan 시 include 라는 옵션을 사용하여 Controller만 스캔하도록 설정.
    • Root Context
      • @Service - 트랜잭션 적용(with AOP)
      • @Repository
      • component-scan 시 exclude 라는 옵션을 사용하여 Controller만 제외시켜 스캔하도록 설정.

  • Context에 로딩된 빈 확인 가능한 뷰