본문 바로가기

강의 내용 정리/SpringBoot 개념정리

12강 - DispatcherServlet은 무엇인가요?

https://mangkyu.tistory.com/18?category=761302 

https://mangkyu.tistory.com/49?category=761302

 

DispatcherServlet에 대해 정말 잘 정리된 글

 

 

작년에 이 부분 질문 주셨는데, 많이 늦었지만 이제 확답을 드릴 수 있을 것 같네요ㅎㅎ;;
위에 댓글도 수정해두었지만 디스패처 서블릿은 모든 요청을 가장 먼저 받는 객체입니다. 그리고 그 요청을 컨트롤러로 위임하는 과정에서 HandlerAdapter라는 객체가 사용되는데, 컨트롤러에서 응답을 보내면 디스패처 서블릿으로 가기 전에 HandlerAdpater에서 응답을 처리하는 프로세서를 찾아 프로세서가 응답을 처리합니다. 위의 코드처럼 ResponseEntity를 사용하는 경우에는 HttpEntityMethodProcessor가 사용되고 여기 내부에서 메세지 컨버터를 사용해 처리합니다.
즉, 정리하면 컨트롤러에서 응답을 반환하면 디스패처 서블릿으로 응답이 바로 전달되지 않고 중간에 핸들러 어댑터를 거치는데, 이 핸들러 어댑터 내부에서 메세지 컨버터에 의해 변환이 됩니다ㅎㅎ 응답 처리는 HandlerAdpater에서 되고, 디스패처 서블릿은 프론트 컨트롤러이니 당연히 거쳐서 응답이 내려갑니다.


출처: https://mangkyu.tistory.com/49?category=761302 [MangKyu's Diary:티스토리]

 

 

 

 

1. FrontController

- 최초 앞단에서 request를 받아서 필요한 클래스에 넘겨준다. ( web.xml 에 모두 정의하기 힘들다. )

- web.xml에 너무 많은 jsp/servlet에 대한 정의가 들어가 있으면 매핑하는 내용도 많아진다. -> 힘들다.

- 그래서 최초 앞단에서 request 요청을 받으면 FrontController에 넘긴다.

- 특정 주소는 FrontController가 낚아채라고 설정해두면 낚아챔

 

 

1. 최초의 요청(URI or java파일) 이 오면 바로 자원에 접근 불가

2. 그래서 톰켓으로 들어감

3. 톰켓으로 가면 먼저 request객체, response 객체를 만든다. 

   - request 객체 : 어떤 데이터를 요청하는지, 어떤 데이터를 들고 들어왔는지 모든 데이터가 들어있음

   - response 객체 : request 를 토대로 만듦 ( 응답해 줘야하는 객체 )

 

 

 

 

# 다시 FrontController

 

1. 그렇게 FrontController가 잡은 특정 주소들은 자원을 찾아갈 수 있게 다시 request!!

   - 그런데 스프링은 자원에 접근 못하게 막아둔다 했잖아?

   -> 내부에서는 자원접근 가능!!!

 

 

 

 

 

 

# 전체 흐름

1. 특정 주소를 FrontController에서 낚아챈다.

2. 자원에 request한다. 이 때 원래 request객체는 새로운 request객체로 바뀐다.(다시 new) ( 원래 request 객체 = A가 가리키는 request 정보 )

3. response도 동일

4. 하지만 원래 request, response의 내용을 지우지 않고 그대로 들고 들어가서 요청하는 방법은 없을까? 

    ( 원래 웹은 요청/응답 후 끊어버림 stateless, 요청할 때마다 새로 요청 )

5. 원래 request, response 정보가 사라지는 것을 방지하고자 기존의 request, response 정보를 유지하는 기법 = RequestDispatcher를 사용

 

 

 

- RequestDispatcher : 필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request와 response를 그대로 유지시켜준다.

 

 

 

 

 

 

 

# RequestDispatcher

 

1. b 요청시 a의 데이터를 가지고 있는 request 객체를 삭제하지 않고 그대로 들고와서 사용

    ( RequestDispatcher를 이용해야 횡시간 데이터 이동이 가능하다 )

 

 

 

 

 

 

 

 

# 정리!!!!!!!!!

 

1. FrontController 패턴

: 최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨준다. 왜? web.xml에 다 정의하기가 너무 힘듦.
이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 new될 수 있다. 그래서 아래의 RequestDispatcher가 필요하다.

 

2. ReqeustDispatcher

: 필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request와 response를 그대로 유지시켜준다.

 

3. DispatcherServlet

: FrontController 패턴을 직접짜거나 RequestDispatcher를 직접구현할 필요가 없다. 왜냐하면 스프링에는 DispatcherServlet이 있기 때문이다. DispatcherServlet은 FrontController 패턴 + RequestDispatcher이다.

 

 

====================================매우 중요=======================================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 자료를 참고하였습니다.

 

 

꾸준히 다시보자.

 

1. 220729

2. 220812

3. 220830

4. 220927

Recent Posts
Popular Posts
Recent Comments