→ 클라이언트(브라우저)에서 HTTP Request를 요청하면, 웹 서버(정적)와 WAS(동적)를 통해 요청을 처리하고, HTTP Response를 반환

→ 스프링 부트는 내장 톰캣을 통해 해당 요청들을 처리

WAS(Web Application Server)

→ 대표적으로 Apache의 Tomcat이 있으며, JBOSS / SAS / Jeus .. 등등

Untitled

<aside> 💡 컨테이너(Container) → 동적인 데이터들을 가공하여 정적인 파일로 만들어주는 모듈 서블릿(Servlet) → 클라이언트의 요청을 받고, 요청을 처리하여, 결과를 클라이언트에게 제공하는 자바 인터페이스 서블릿 컨테이너(Servlet Container) → 서블릿들을 모아 관리하며, 새로운 요청이 들어올 때마다 새로운 쓰레드 생성 + 작업이 끝난 쓰레드는 자동 제거 → 서버 사이드에서 서블릿을 활용하여 동적으로 웹 페이지를 생성하기 위한 개념 → 서블릿과 웹 서버 간의 통신 담당 + 서블릿 생성-실행-소멸 등의 생명주기 관리 WAS(Web Application Server) → DB 연결 및 조회 + 로직 처리 등 동적 타입을 제공하는 소프트웨어 프레임워크

<톰캣의 요청 처리 과정> 클라이언트 요청 → 웹 서버로 전달 → 서블릿 컨테이너로 요청 전달 → 요청을 처리할 서블릿 탐색 → 서블릿의 요청 처리 → 클라이언트로 요청에 대한 응답 반환

Untitled

<스프링 컨테이너 동작 과정>

  1. 웹 애플리케이션 실행 → Tomcat(WAS)에 의해 web.xml 로딩
  2. web.xml에 등록된 ContextLoaderListener(Java Class) 생성 → ContextLoaderListener는 ServletContextListener 인터페이스의 구현체이며, ApplicationContext를 생성하는 역할 수행
  3. 생성된 ContextLoaderListener는 applicationContext.xml 로딩
  4. applicationContext.xml 에 등록된 설정에 따라 Spring Container 구동 시작 → 이때, Entity, Service, Controller 등등 객체 생성
  5. 클라이언트의 HTTP Request 요청 발생
  6. DispatcherServlet 생성 → DispatcherServlet 은 FrontController의 역할 수행 → FrontController - 클라이언트의 요청을 분석하여 알맞은 PageController에 전달한 뒤, 요청에 대한 응답을 받는다 (HandlerMapping / ViewResolver 클래스)
  7. PageController에 따라 Model(비즈니스 로직 처리)과 협업하여, DB 조회 및 데이터 가공을 한 후, 데이터를 View로 전송하여 HTML 파일 혹은 요청에 맞는 정보(RestController)를 전달

⇒ 클라이언트(브라우저)의 HTTP 요청은 서블릿 컨테이너에 의해 해석되고, 재조합되어 프로그래머가 작성한 Servlet으로 전달되는 과정을 거친다.

<정리>

  1. 웹 애플리케이션 배포:
  2. 서블릿 컨테이너 초기화:
  3. ContextLoaderListener 실행:
  4. 첫 번째 Spring Container 구동:
  5. DispatcherServlet 생성:
  6. 두 번째 Spring Container 구동:
  7. 클라이언트 요청 처리:
  8. 첫 번째 Spring Container와 두 번째 Spring Container 협업: