다시 웹, 백엔드로/스프링

웹 서버와 서블릿 컨테이너 - 2

EnoughTT 2023. 8. 16. 12:18

서블릿 컨테이너 등록

WAS 와 스프링 통합

  • 스프링 컨테이너 만들기
  • 스프링 MVC 컨트롤러 스프링 컨테이너 빈으로 등록
  • 스프링 MVC 디스패처 서블릿 서블릿 컨테이너 등록

 

현재 스프링 관련 라이브러리가 없으니 추가

build.gradle

spring-webmvc 라이브러리 추가 시 spring-core 를 포함한 스프링 핵심 라이브러리들도 함께 포함

 

hello.spring.HelloController

간단한 스프링 컨트롤러로, HTTP 응답으로 'hello spring' 이라는 메시지를 반환.

 

hello.spring.HelloConfig

컨트롤러를 사용하기 위해 직접 스프링 빈(Bean) 으로 등록

이제 애플리케이션 초기화를 사용해서 서블릿 컨테이너에 생성 후 등록

 

hello.container.AppInitV2Spring

생성 후 실행하게 되면 바로 호출되는 것을 볼 수 있음

AppInitV2Spring.onStartup
hello.container.AppInitV2Spring

  • AnnotationConfigWebApplicationContext 가 스프링 컨테이너임
  • appContext.register(HelloConfig.class) 로 컨테이너에 스프링 설정 추가
  • new DispatcherServlet(appContext) 스프링 MVC 디스패처 서블릿 생성, 스프링 컨테이너 연결
    • HTTP 요청이오면 디스패처 서블릿은 해당 스프링 컨테이너에 들어있는 컨트롤러 빈들을 호출
  • servletContext.addServlet("dispatcherV2", dispatcher) 디스패처 서블릿을 서블릿 컨테이너에 등록
  • /spring/* 요청이 디스패처 서블릿을 통하도록 설정 (/spring/* spring으로 시작하는 하위 모든 url 요청)

/spring 하위

 

 

스프링 MVC 서블릿 컨테이너 초기화 지원

스프링 MVC는 서블릿 컨테이너 초기화 작업을 이미 만들어두었음

  • WebApplicationInitializer 인터페이스를 구현한 부분을 제외하고는 AppInitV2Spring과 같은 코드
  • 디스패처 서블릿을 서블릿 컨테이너에 등록 시 이름 주의!
  • 모든 요청이 디스패처 서블릿을 통하도록 설정 (" / ")

 

스프링 MVC를사용한다면 WebApplicationInitializer 인터페이스만 구현하면 AppInitV3SpringMvc 에서본 것처럼 편리하게 애플리케이션 초기화를 사용 할 수 있음

 

 

 

 

 

 

 

feat. 스프링부트 - 핵심 원리와 활용 (김영한)