URECA 과정을 진행하면서 해당강의를 중심으로 스터디를 진행하고 있다.
spring에 대해 1도 모르는 상태였기 때문에 개념정리를 목표로 시작했고, 현재 SpringBoot(1~14강)까지 완강후 정리한 상태이다.
복기를 위해 하나의 단원이 끝날 때마다 스터디 진행중에 논란?이 되었던 주제, 정확히 설명하지 못하는 주제에 대해 다시한번 정리하기로 했다.
1. 스프링부트의 동작 구조
통신은 클라이언트의 요청을 받아서 내부에서 요청을 처리하고 반환하는 과정을 거친다.
내부에서 요청을 처리하는 과정에서 스프링부트는 스프링 MVC 구조를 기반으로 동작한다.
스프링 MVC 구조?
1. Model
• 데이터정보를 가지고 있는 컴포넌트
• 사용자가 이용하려는 모든 데이터를 가지고 있으며 view와 controller에 대해 서는 아무것도 모른다. (데이터밖에 모르는 바보)
2. View
• 시각적인 UI를 지칭한다.
• 반환하는 데이터를 사용자에게 표시
3. Controller
• 사용자의 입력을 처리하고, app의 흐름을 관리한다.
2. 서블릿 컨테이너 = 톰캣
그럼, 요청이 적절한 Controller까지 전달되는 사이에 있는 서블릿 컨테이너는?
→ 서블릿을 관리, 실행하는 곳. (서블릿의 생명주기 관리)
그럼 서블릿은?
→ java로 작성된 클래스와 객체부분으로 DB상호작용, 로직 수행등의 역할(실질적인 데이터 요청을 수행하는 곳)
이러한 서블릿 컨테이너는 통신에서 필수적인데,
스프링부트를 사용하면 내장 톰캣이 서블릿 컨테이너와 WAS 역할을 담당한다.
3. 서블릿 = Dispatcher Servlet = 프론트 컨트롤러
스프링부트에서는 서블릿 컨테이너의 역할을 톰캣이 맡는다고 했다.
그럼 톰캣이 관리하는 서블릿은? → Dispatcher Servlet 이라고 한다.
서블릿인 Dispatcher Servlet은 클라이언트의 요청을 받아서 처리하고 반환한다.
그렇게 반환하는 과정이다.
- 클라이언트의 요청
: 클라이언트에서 요청(HttpServletRequest)이 들어오면, 서블릿 컨테이너는 DispatcherServlet으로 이를 전달한다. - Handler 조회 (Controller 조회)
: DispatcherServlet은 핸들러 매핑(HandlerMapping)을 통해 요청 URI에 매핑된 핸들러(Controller)를 탐색한다. - Handler Adapter 조회
: 조회한 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. - Handler Adapter 실행
: 핸들러 어댑터(HandlerAdapter)를 통해 핸들러(Controller)를 호출한다. - Handler(Controller) 실행
: 핸들러(Controller)를 실행하여 컨트롤러에서 요청을 처리하고, 응답을 다시 핸들러 어댑터로 반환한다. - View 반환
: 핸들러 어댑터는 이 응답을 view 로 가공하여 반환한다. - 1. @RestController 사용시
2. view 를 사용시
통신부분을 tomcat역할과 spring container 부분을 정리한 그림을 보면,
Q1. 서블릿 컨테이너안에는 기능과 상관없이 서블릿객체는 1개만 있어야하는가?
→ ?
서블릿 컨테이너 안에는 일단 Dispatcher servlet이 있다.
근데 이 사진을 기반으로 보면, Spring MVC 또한 servlet container가 관리하고 있는 servlet아닌가?
Q2. 서블릿 컨테이너와 스프링MVC의 관계
→ servlet container가 관리하고 있는 servlet = Spring MVC?
- Spring MVC 애플리케이션이 서블릿 컨테이너에서 실행될 때, 서블릿 컨테이너는 DispatcherServlet을 서블릿으로 인식하고 관리.
- 따라서, Spring MVC의 핵심 컴포넌트인 DispatcherServlet도 서블릿 컨테이너의 관리하에 있으며, 서블릿 컨테이너는 DispatcherServlet의 생명 주기를 관리하고 HTTP 요청을 DispatcherServlet으로 전달.
'하고싶은거 > Springboot' 카테고리의 다른 글
API_정의, 명세 (0) | 2024.08.04 |
---|---|
Entity 생명주기 (0) | 2024.06.28 |
JPA 상속 (0) | 2024.06.28 |
JPA vs Spring data JPA (0) | 2024.06.28 |
이것저것 기억하고 싶은거 글쓰는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!