[Spring] Dispatcher servlet과 servlet container (작성 중)

2024. 7. 30. 22:05· Spring Boot
목차
  1. ✅ Dispatcher-servlet도 Servlet의 일종이다.
  2. ✅ Dispatcher-servlet과 Servlet container
  3. ✅  참고 자료 & 링크
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

 

Dispatcher servlet에 대해 공부를 하던 중 궁금증이 생겼다.

이번 포스팅에서는 그 궁금증들을 모두 풀어보는 시간을 가져보도록 하겠다!

 

✅ Dispatcher-servlet도 Servlet의 일종이다.

Dispatcher-servlet은 Front-controller의 역할을 하며, Client로부터 들어오는 모든 request를 제일 먼저 받아 해당 request를 처리할 Controller를  찾는다.

 

Dispatcher-servlet은 그 이름처럼 Servlet의 종류 중 하나일까?

결론부터 이야기하자면 YES이다!

 

DispatcherServlet 클래스의 상속 관계를 살펴보면 정답이 금방 나온다. 

DispatcherServlet의 상속 관계

위의 그림은 DispatcherServlet의 상속 관계를 다이어그램으로 나타낸 것이다.

(Spring boot 프로젝트를 열고 DispatcherServlet 클래스를 찾아서 직접 확인할 수 있다!)

 

Java에서 직접 Servlet을 구현하고 싶을 때 Servlet 인터페이스를 구현하는데, DispatcherServlet도 Servlet 인터페이스를 구현하기 때문에 Servlet의 일종임을 알 수 있다.

 


✅ Dispatcher-servlet과 Servlet container

Servlet container와 servlet에 대해 짧게 복기해보자.

Servlet container는 client로부터 request를 받았을 때, 이를  처리할 servlet을 찾아 request를 전달해 response를 다시 받아온다.

 

흠.. 이 때 궁금점이 생긴다.

servlet container가 request를 받아서 이를  처리할 servlet을 찾아 전달한다고 했는데, Dispatcher servlet은 Front-controller로서  request를 처리할 controller를 찾아서 전달하는 역할을 한다.

그렇다면 dispatcher-servlet과 다른 servlet은 어떻게 동작하는 것인가?

 

구글링을 통해 공부를 하다보니, Servlet container(Tomcat)에는 DispatcherServlet만 등록되어 사용된다는 이야기가 있었다.

 

진짜인지 궁금한 마음에 DispatcherServlet의 상속 관계들을 살펴보기로 했다.

만일 DispatcherServlet만 Servlet container에 등록이 된다면, 상속 관계에 있는 어떤 클래스(HttpServletBean이던 HttpServlet이던...)를 상속/구현한 클래스가 없어야하지 않을까? 하는 생각이 들었다.

 

DispatcherServlet →  FrameworkServlet → HttpServletBean → HttpServlet → GenericServlet → Servlet

 

먼저 FrameworkServlet을 상속받는 클래스를 살펴보자.

DispatcherServlet과 TestDispatcherServlet 둘만이 FrameworkServlet을 상속받고 있음을 확인할 수 있다.

TestDispatcherServlet의 패키지 위치를 통해 테스트를 위한 클래스임을 확인할 수 있으므로, DispatcherServlet만 상속받았다고 봐도 무방할 것이다.

흠... 앞으로 더 가보자.

 

 

HttpServletBean을 살펴보자.

FrameworkServlet을 상속받은 두 클래스와 FrameworkServlet만 있으므로, 이 또한 DispatcherServlet만 상속받았다고 봐도 무방할 것 같다.

한 번만 더 앞으로 가보자.

 

 

HttpServlet을 살펴보자.

앞의 두 클래스와는 다르게 HttpServlet을 상속받은 클래스가 17개나 되는 것을 알 수 있다.

DispatcherServlet, TestDispatcherServlet, FrameworkServlet,  HttpServletBean을 제외하고서도 13개나 되는 것을 확인할 수 있다.

 

이 Servlet들은 무엇일까?

 

흠... 해당 클래스들의 패키지를 보면 힌트가 될 수 있을 것 같다.

HttpServlet을 상속받은 클래스들
HttpServlet을 상속받은 클래스들

 

먼저 org.apache.catalina 패키지 내에 있는 클래스들을 확인할 수 있다.

CGIServlet을 포함한 총 9개의 클래스가 이 패키지에 속하는데, 의존성(Gradle)을 확인해보면 tomcat-embed-core에 속하는 것을 확인할 수 있다.

 

다른 클래스들도 의존성을 확인해보면 logback-core, h2와 같이 실질적으로 Spring 프레임워크(DispatcherServlet)에 영향을 미치는 클래스는 아닌 듯 싶다.

 

HttpRequestHandlerServlet은 spring-web 의존성에 포함되어 있으므로,

최종적으로 spring-webmvc 의존성에 속하면서, Servlet 인터페이스를 구현한 클래스는 DispatcherServlet이라고 봐도 무방할 듯 하다.

 

 

다시 돌아와서 그럼 다른 Servlet들은 DispatcherServlet와 어떤 식으로 동작하는 것일까?

(작성 중)

으으음.. 모르겠다...

이걸 더 정확히 파악하려면 tomcat이 어떻게 동작하는지 파악을 해봐야 할 것 같다. 

앞으로 더 찾아보며 업데이트하도록 하겠습니다!

 


✅  참고 자료 & 링크

- https://m.blog.naver.com/qhdqhdekd261/221751234846

- https://dncjf0223.tistory.com/95

 

 

 

 

728x90
  1. ✅ Dispatcher-servlet도 Servlet의 일종이다.
  2. ✅ Dispatcher-servlet과 Servlet container
  3. ✅  참고 자료 & 링크
'Spring Boot' 카테고리의 다른 글
  • [Spring] Spring security OAuth2 로그인 구현하기
  • [Spring] @Transactional의 동작 방식 & 중첩이 일어났을 때 어떻게 될까?
  • [Spring] Front-controller pattern과 Dispatcher servlet
  • WAS와 Web server의 차이점
HEY__
HEY__
안녕하세요 :) 공부하며 배운 것들을 기록하기 위한 블로그입니다. 도움이 되시길 바라며 혹시 잘못된 점이 있다면 댓글 부탁드립니다! :D
while(true) { continue; }안녕하세요 :) 공부하며 배운 것들을 기록하기 위한 블로그입니다. 도움이 되시길 바라며 혹시 잘못된 점이 있다면 댓글 부탁드립니다! :D
250x250
HEY__
while(true) { continue; }
HEY__
전체
오늘
어제
  • 분류 전체보기 (164)
    • Spring Boot (45)
      • 스프링 입문 강의 (18)
    • AWS (8)
    • 프로젝트 (6)
    • Network (21)
    • Operating System (8)
    • Database (4)
    • ETC (2)
    • Java (3)
    • C++ (7)
    • Python (1)
    • 도서 📚 (3)
      • Effective Java (3)
    • Coding test (50)
      • Baekjoon (30)
      • Leet Code (18)
      • Programmers (2)
    • Algorithm (C++) (5)

블로그 메뉴

  • 태그
  • Github
  • 글쓰기
  • 블로그관리

공지사항

인기 글

태그

  • dispatcher servlet
  • HTTP
  • STL
  • Cloudfront
  • Network
  • aws
  • kotlin
  • C++
  • Spring
  • Algorithm
  • spring boot
  • coding test
  • slack
  • Baekjoon
  • leetcode
  • CPP
  • OS
  • Java
  • Servlet Container
  • programmers

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
HEY__
[Spring] Dispatcher servlet과 servlet container (작성 중)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.