스프링 부트의 서버 실행과 클라이언트의 요청을 받는 과정을 알아보겠습니다.
스프링 부트가 동작 될 때 두 가지 영역으로 나눠서 생각할 수 있다.
서버가 실행됨과 동시에 생성되는 객체들이 있고 이러한 객체는 모든 스레드가 공유하게 된다.
스프링은 클라이언트의 request가 들어올 때마다 하나의 스레드로 관리하는데, 요청 때마다 생성하지 않고 공통으로 이용해야 하는 것들은 이때 만들어진다.
Database Connection 및 공통적으로 사용해야 하는 객체들을 이때 생성한다.
이 외의 객체들은 클라이언트가 Request가 올 때마다 스레드 별로 생성되어 사용된다.
서버의 실행과 동시에 톰켓(WAS)에 의해 web.xml이 실행된다.
세션의 유효시간, 서블릿 매핑, 에러 페이지 처리, 리스너/필터 설정, 보안
등 서버의 운영에 대한 여러 가지 전반적인 일을 담당한다.
web.xml이 실행된 뒤 ContextLoaderListener가 실행된다.
ContextLoaderListener가 root-applicationContext를 읽고 스프링 컨테이너(IoC 컨테이너, ApplicationContext)에 Database Connection 및 공통적으로 사용해야 하는 객체들을 생성한다.
공통적으로 공유해야 하는 객체들이 스프링 컨테이너에 생성된 후 클라이언트에게 request를 받을 수 있다.
DispatcherServlet은 기존의 FrontController와 ReqeustDispatcher의 역할을 합쳐놓은 것이다.
클라이언트에게 요청이 들어오면 DispatcherServlet가 Handler Mapping을 하여 해당 요청의 주소를 컨트롤러의 메서드와 매칭해준다.