-
Servlet & DispatcherServletComputer Science/Spring boot 2023. 7. 18. 18:41
1. Servlet 이란
2. 서블릿 컨테이너의 역할
3. 프론트 컨트롤러 패턴과 Spring 에서 DispatcherServlet
1. Servlet이란
- Java 기반의 웹 애플리케이션 개발을 위한 서버 사이드 프로그래밍 기술로서 동적인 웹 컨텐츠를 생성하고 웹 요청을 처리하는 역할을 수행한다.
단순하게 이야기 해서 HTTP프로토콜 통신을 함에 있어 지켜야하는 규약 등을 쉽게 할 수 있도록 도와주는 Java API이다.
2. Servlet Container의 역할
- Servlet의 실행 환경을 제공하고, 서블릿의 라이프사이클 관리, 웹 애플리케이션의 실행을 담당하는 소프트웨어 컴포넌트.
HTTP 요청이 들어온다면 해당 요청에 맞는 Servlet을 생성하고 관리한다.
요청이 들어올 때 마다 하나의 쓰레드를 만들어 동작한다. 따라서 동시에 요청이 들어온다면 멀티쓰레드 환경이 되는데 이 또한 관리해준다.
다음은 요청이 들어왔을 때 전반적인 구동 방식이다.
1. Servlet Container는 HTTP 요청이 들어온다면 우선 HttpServletRequest와 HttpServletResponse 객체를 생성한다.
2. 설정 파일(web.xml)을 참고하여 매핑할 Servlet을 찾는다.
3. Servlet을 찾았다면 Servlet 인스턴스를 생성하며 HttpServletRequest와 HttpServletResponse를 전달한다.4. Servlet은 service를 호출하여 내부 로직을 실행하고 HttpServletReponse 객체에 응답을 보낸다.
5. 응답 과정이 완료되면 HttpServletRequest와 HttpServletResponse는 소멸한다.
3. 프론트 컨트롤러 패턴과 DispatcherServlet
요청이 들어올때마다 쓰레드를 생성하여 Servlet을 배정하게 되는데 이는 매우 비효율적이다.
예를 들어 음식점이 있다고 해보자. A는 자장면, B는 짬뽕, C는 탕수육을 담당한다.
헌데 자장면을 누가 주문하면 A가 가서 주문을 받고 만들고 내온다. 다른이가 짬뽕을 주문하면 B가 가서 주문을 받고 만들고 내온다.
매우 비효율적이지 않은가? 주문을 받고 내오는 사람을 공통으로 두면 좋을 것 같다.
하여 나온것이 프론트 컨트롤러 패턴이고 Spring에서 이를 담당하는 것이 DispatcherServlet이다.
하지만 요청이 오고 해당 요청이 어느 Servlet에 해당하는지 판단하고 요청을 보내고 기다리는 것은 매우 역할이 많다. 하여 실제 동작은 더 세분화 되어 있다.
1. 요청이 들어온다면 DispatcherServlet이 이를 담당한다.
2. DispatcherServlet은 HandlerMapping에게 요청에 맞는 핸들러(Conrtoller)를 찾도록 요청한다.
3. 찾았다면 해당 요청을 실행하도록 HandlerAdapter에게 요청한다.
4. HandlerAdapter는 요청을 실행하고 응답을 받으면 다시 DispatcherServlet에게 반환한다.
5. DispatcherServlet은 해당 요청을 클라이언트로 반환한다.
'Computer Science > Spring boot' 카테고리의 다른 글
Pinpoint를 이용하여 서버 관리하기. (0) 2022.11.12 Spring boot Entity test code (0) 2022.10.07 Spring boot DB 한글 깨짐 현상 (0) 2022.10.06 Spring boot 생성자 주입으로 사용해야 하는 이유 (0) 2022.10.06 Spring boot api test code (0) 2022.10.06