[spring] dispatcher servlet

선호·2024년 1월 25일
1

DispatcherServlet vs Servlet

  • dispatcher servlet은 spring에서 사용되는 개념
  • servelt은 자바에서 사용되는 개념

개념

  • 클라이언트 요청을 처리하고, 그 결과를 다시 클라이언트에게 전송하는 servlet 클래스의 구현 규칙을 지킨 자바 프로그램.

  • 이전의 웹 프로그램들은 클라이언트의 요청에 대한 응답으로 만들어진 페이지를 넘겨 주었으나, 현재는 동적인 페이지를 가공하기 위해서 웹 서버가 다른 곳에 도움을 요청한 후 가공된 페이지를 넘겨주게 된다. 이때 서블릿사용하게 되면 웹 페이지를 동적으로 생성하여 클라이언트에게 반환해 줄 수 있다.

일반적으로 클라이언트와 서버를 크게 보자면 아래와 같이 구성되어 있다.

요청을 보낼때에는 request에 담아서 http방식으로 https://localhost:8080/api 과 같은 형식으로 보내게 된다.

클라이언트의 요청이 먼저 만나게 되는 건 dispatcher servlet이다.

이 dispatcher servlet은 handler mapping을 사용하여 요청 URL을 보고 Handler를 판단하고, 또한 Handler 실행 전에 전처리, 후처리로 실행해야 할 인터셉터 목록을 결정한다.

위 에서 언급하는 Handler가 Controller이다.

일치하는 어노테이션이 있으면 해당하는 어노테이션을 가지고있는 메소드를 실행 시킨다.

해당 메소드를 실행시켜서 요청에 맞는 로직을 실행한 뒤 결과를 보낸다.

이후 dispatcher servlet은 그렇게 가공된 요청을 response 실어서 클라이언트에 보내버린다.

하지만 일치하는 어노테이션이 존재하지 않으면 핸들러 매핑은 없다고 생각하고 resource/static 폴더에 위치한 index.html 파일을 그대로 응답에 실어서 클라이언트에 보내버린다.

웹 서버와 웹 애플리케이션의 동작 과정

웹 서버는 클라이언트로부터의 HTTP 요청을 받아들여 정적인 콘텐츠를 제공하고, 동적인 요청은 웹 애플리케이션 서버(WAS)로 전달하는 역할을 수행합니다.

웹 서버의 역할

  1. 정적인 콘텐츠(완성된 HTML 등)를 브라우저로 전달합니다.
  2. 동적인 요청이 들어왔을 때, 해당 요청을 WAS에 전달합니다.

요청 처리 순서

  1. 클라이언트로부터 HTTP 요청 송신
  2. 웹 서버가 요청을 받고 웹 애플리케이션 서버(WAS)로 전달
  3. WAS에서 서블릿 컨테이너로 이동
  4. 서블릿 컨테이너 초기화
    • HttpServletRequestHttpServletResponse 인스턴스 생성
  5. 서블릿 컨테이너 내에서 서블릿이 요청을 처리
    • 각 요청마다 쓰레드를 생성하여 처리
    • HttpServletRequest에 요청 정보가 담겨 처리됨
  6. Spring Boot의 Dispatcher Servlet 동작
    • 중앙 집중식으로 요청을 처리
  7. Handler Mapping 및 Handler Adapter 동작
    • 요청에 맞는 핸들러(컨트롤러)를 찾고 연결
  8. 로직 실행 및 응답 생성
    • 핸들러가 실제 로직을 실행하고 응답 생성
  9. 응답을 Dispatcher Servlet으로 전달
  10. 웹 서버를 통해 클라이언트로 처리된 응답 송신
profile
개발을 하더라도 탄탄하게

0개의 댓글