스프링 부트의 동작 구조
- 스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기반으로 동작함
- 서블릿(Servelt)은 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술로, 클라이언트로부터 온 HTTP 요청에서 URL, header, 요청 파라미터를 추출한다.
그리고 애플리케이션 로직과 상호작용하며 response를 생성한다. - 서블릿들은 서블릿 컨테이너에서 관리함
- 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체
- 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너
서블릿 컨테이너의 특징은 다음과 같다.
- 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리함
- 서블릿 객체는 싱글톤 패턴으로 관리됨
- 멀티 쓰레딩을 지원
스프링에서는 DispatcherServlet이 서블릿의 역할을 수행함
일반적으로 스프링은 톰캣을 임베드해 사용하기 때문에, 서블릿 컨테이너와 DispatcherServlet이 자동 설정된 web.xml의 설정값을 공유
DispatcherServlet의 동작 방식
- DispatcherServlet으로 들어온 요청(HttpServletRequest)이 들어오면 Dispatcher Servlet은 핸들러 매핑(Handler Mapping)을 통해 요청 URI에 매핑된 핸들러를 탐색함, 여기서 핸들러는 컨트롤러를 의미
- 그 후 핸들러 어댑터로 컨트롤러를 호출
- 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환
- 뷰(View) 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버(View Resolver)를 통해 뷰(View)를 받아 리턴함
핸들러 매핑은 요청 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스
뷰가 없는 REST 형식의 @ResponseBody는 뷰 리졸버를 호출하지 않고, MessageConverter를 거쳐 JSON 형식으로 변환해서 응답함
- 여기서 MessageConverter는 요청과 응답에 대해 Body 값을 변환하는 역할을 수행함
- 스프링부트의 HttpMessageConverter 인터페이스를 사용하고 있음
- Content-Type을 참고하여 Converter를 선정
참고 자료
스프링 부트 핵심 가이드 "스프링 부트를 활용한 애플리케이션 개발 실무" , 장정우, 2022
'Development > Spring' 카테고리의 다른 글
[Spring] JPA (Java Persistence API), Hibernate, Spring Data JPA (1) | 2024.01.23 |
---|---|
[Spring JPA] DDL, DDL 옵션 (0) | 2024.01.16 |
[Spring] 스프링 부트란? (0) | 2024.01.15 |
[Spring] JSP/Servlet부터 Spring, 그리고 Springboot 까지 (0) | 2024.01.07 |
[Spring] Spring JPA에서 null을 리턴 하지 않는 경우와 Optional 타입에 대하여 (1) | 2023.11.14 |