스프링부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣을 사용하는 스프링 MVC구조를 기반으로 동작합니다.
스프링 부트의 동작 구조

1.서블릿 컨테이너
- 서블릿은 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술로 이를 관리하는 곳이 서블릿 컨테이너입니다.
- 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체로서 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너 입니다.
서블릿 컨테이너의 특징
- 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리합니다.
- 서블릿 객체는 싱글톤 패턴으로 관리됩니다.
- 멀티 스레딩을 지원합니다.
2. DispatcherServlet
스프링에서는 DispatcherServlet이 서블릿의 역할을 수행합니다.
- HttpServletRequest 요청이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 URI에 매핑된 컨트롤러를 탐색합니다.
- 핸들러 어댑터를 이용하여 컨트롤러를 호출합니다.
- 핸들러 어댑터에 컨트롤러의 응답이 돌아오게 되면 ModelAndView로 응답을 가공해 반환합니다.
- 뷰 형식으로 리턴하는 컨틀롤러를 사용할 경우에는 뷰 리졸버를 통해 뷰를 받아서 리턴합니다.
3. 핸들러 매핑
요청 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스입니다. 핸들러 매핑 인터페이스는 여러 구현체를 가집니다.
핸들러 매핑의 대표적인 구현체
- BeanNameUrlHandlerMapping
- 빈 이름을 URL로 사용하는 매핑 전략입니다.
- 빈을 정의할 때 슬래시가 들어가면 매핑 대상이 됩니다.
- Ex) @Bean("/hello")
- ControllerClassNameHanlerMapping
- URL과 일치하는 클래스 이름응ㄹ 갖는 빈을 컨트롤러로 사용하는 전략입니다.
- 이름 중 Controller를 제외하고 앞부분에 작성된 suffix를 소문자로 매핑합니다.
- SimpleUrlHandlerMapping
- URL 패턴에 매핑된 컨트롤러를 사용하는 전략입니다.
- DefaultAnnotationHandlerMapping
- 어노테이션으로 URL과 컨트롤러를 매핑하는 방법입니다.
4. 뷰 리졸버
뷰의 랜더링 역할을 담당하는 뷰 객체를 반환합니다.

만약 뷰가 없는 REST 형식의 @ResponseBody를 사용하게 된다면 뷰리졸버를 호출하지 않고 MessageConverter를 거쳐 JSON 형식으로 변환하여 응답합니다.