spring - Dispatcher - Servlet

Expert Inpyo·2022년 10월 20일
0

Java Spring

목록 보기
4/4

출처
출처1

Dispatcher Servlet

정의

HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러로 위임해주는 프론트 컨트롤러(Front Controller)

클라이언트로부터 어떠한 요청이 오면 Tomcat같은 서블릿 컨테이너가 요청을 받음
=> 이 모든 요청을 디스패처 서블릿이 가장 먼저 받게 됨
=> 공통적인 작업 처리 후 해당 요청을 처리하는 컨트롤러를 찾아 작업 위임

장점

해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주고 공통 작업을 처리해주며 편리해짐

컨트롤러를 구현해두면 스프링의 디스패처 서블릿이 적합한 컨트롤러로 위임해주는 구조임

정적 자원 처리

Dispatcher Servlet은 모든 요청을 처리함
=> 이미지 / HTML / CSS / JavaScript 등 정적 파일에 대한 요청마저 모두 가로챔

따라서, 해결을 위해
1. 정적 자원에 대한 요청과 어플리케이션에 대한 요청 분리

- 클라이언트의 요청을 2개로 분리하여 구분하는 것

- 코드가 지저분해지며 직관적인 설계가 어렵다는 단점 존재
 
  1. 어플리케이션에 대한 요청을 탐색하고 없으면 정적 자원에 대한 요청으로 처리

    • Dispatcher Servlet이 요청을 처리할 컨트롤러를 먼저 찾고 요청에 대한 컨트롤러를 찾을 수 없는 경우 2차적으로 설정된자원(resource) 경로를 탐색해 찾아 나가는 것
    • 효율적임

동작 과정

  1. 클라이언트의 요청을 디스패처 서블릿이 받음
  2. 요청 정보를 통해 요청을 위임할 컨트롤러 찾음
  3. 요청을 컨트롤러로 위임할 핸들러 어댑터를 찾아 전달함
  4. 핸들러 어댑터가 해당 컨트롤러로 요청 위임함
  5. 비즈니스 로직 처리
  6. 컨트롤러가 반환값을 반환함
  7. 핸들러 어댑터가 반환 값을 처리함
  8. 서버의 응답을 클라이언트로 반환함

어댑터 패턴을 적용함으로써 컨트롤러의 구현 방식에 상관없이 요청 위임 가능해짐

profile
도전! 데이터 엔지니어

0개의 댓글