서블릿(Servlet)을 알아보고, 디스패처서블릿(DispatcherServlet)을 알아보겠습니다!
init, doGet 과 메서드를 수행해서 요청을 받는게 서블릿인데, 정확히 서블릿이 뭐지?!
그럼 디스패처 서블릿은 뭐가 다르다는거지? 스프링에서 사용하는거니까 서블릿을 상속받긴 했을텐데,,
라는 궁금증을 가지고 공부해본 것을 공유해보고자 합니다!
웹은 HTML로 시작되었는데,
HTML은 Hyper Text Markup Language의 약어로, 텍스트에 초능력이 있다라는 의미가 담겨있습니다.
왜 초능력이 있다고 표현한걸까요? 그 이유는 바로, 링크를 통해 다른 곳으로 연결되어 있기 때문입니다.
우리가 처음 사용했던 웹페이지는 모두 정적 페이지였습니다.
정적이란 뭘까요? 바로, 요청에 의해 페이지의 내용이 변경되는 것이 아니라, 항상 같은 내용의 페이지라는 것입니다!
하지만, 우리는 늘 새롭고 편한 것을 추구하잖아요?! 그래서 요청에 의해 페이지의 내용이 변경될 수 있는 동적 페이지의 필요성을 느끼게 되었습니다.
CGI(Common Gateway Interface)는 이러한 동적 웹 페이지를 만들 수 있도록 해주는 기술인데요, 아쉽게도 자바는 이 기술을 지원받지 못하는 언어였습니다.
그래서 자바 언어로 동적 페이지를 만들 수 있는 기술이 필요했고, 이것이 바로 Servlet입니다.
다시 말해, 요청을 받고 응답줄 수 있는 JAVA클래스인데, WAS 위에서 돌아갈 수 있는 것을 말합니다!
그럼 Servlet 개념 해결!
최근 우리는 jsp를 만들기 보다는, Spring 혹은 SpringBoot 프레임워크를 활용하여 API를 만드는 일이 더 많아 Servlet보다는 DispatchServlet이라는 용어가 더 익숙하지 않나요?!
스프링에서 사용하는 DispatcherServlet을 Dispatcher와 Servlet으로 나눠서보겠습니다.
운영체제에서 디스패치(dispatch)라는 용어를 들어보신 적 있나요? 디스패치란 태스크(task)를 실행할 때 실행 순서를 결정하는 것을 의미합니다.
그럼 이러한 의미를 디스패처(Dispatcher) 서블릿(Servlet)에 적용해보면, 요청을 받으면 응답을 만들어내기 위한 실행 순서를 결정하여 일을 시키는 서블릿이라 정의할 수 있을 것 같습니다.
디스패처 서블릿은 가장 먼저 요청을 받는 서블릿이기 때문에, 프론트 컨트롤러(Front Controller)라고도 하며 서블릿을 상속받은 구현체입니다.
그럼 위에서 디스패처 서블릿은 요청을 받아, 실행 순서를 결정하여 일을 시키는 서블릿이라고 말씀드렸듯이, 직접 일을 수행하기보다는 HandlerMapping과 HandlingAdaptor에게 일을 맡깁니다.
하는 일은 요청을 처리하는 부분에
집중하여 크고 간단하게 보면, 다음과 같습니다.
- HandlerMapping에게 요청과 맵핑되는 컨트롤러의 메소드와 컨트롤러의 이름이 있는지 확인을 부탁합니다.
- HadlerApaptor에게 찾은 빈으로 해당하는 메소드를 실행해할 수 있도록 부탁합니다.
- 반환이 뷰라면, ViewResolver에게 응답에 맞는 응답페이지를 만들어달라고 부탁합니다.
Filter는 WAS가 관리하고(Spring Context 밖), Interceptor는 Spring Context가 관리하기 때문에 에러 처리에 대한 방법이 다르다고 하는데요! 다뤄보고 싶었으나, 아이패드를 두고와서 그림을 못 그려서.. 또 다시 글로만..조만간 디뤄보면 좋을 것 같습니다! AOP부터 ㅎㅑ
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] @Valid를 사용한 유효성 검사는 어디서하는걸까? (0) | 2024.08.05 |
---|---|
[Spring] SpringContext와ApplicationContext는 같은걸까?! (0) | 2024.07.30 |
[Spring] DI의 생성자 주입 선호 이유를 테스트 코드에서 찾기(vs 필드 주입) (0) | 2024.07.30 |
[Spring] Bean관리 누가할래? in TEST (@SpringBootTest @Test 알고 쓰기) (0) | 2024.07.30 |
[Spring] DTO는 왜 필요할까? (0) | 2024.07.22 |