티스토리 뷰

FrontController 패턴

이전 포스트에서 작성한 web.xml의 Servlet/JSP 정의 및 매핑처리에 있어서 너무 많은 처리를 하게 되는것을 막기위해 Request 요청을 FrontController에 넘겨준다. 

  • 먼저, 특정 주소가(ex) .do) 들어오면 FrontController로 보내기로 약속한다.
  • 웹서버에 들어오는 요청이 URI 나 Java파일이라면 바로 자원에 접근하지 못한다. 따라서 톰켓으로 보낸다.
  • 톰켓으로 오는 순간 request 객체와 response 객체가 자동으로 생성된다. request 객체에는 요청한 사람의 정보가 담긴다.
    • 이전포스트 (https://laugh4mile.tistory.com/177) 에서 설명했듯이 통신이 들어올때 맨 처음은 BufferedWriter, BufferedReader로 들어온다(가변길이의 문자열)
    • 톰캣은 자동으로 이것들을 객체로 만들어 준다. request와 response
    • 객체로 만들면 무엇이 좋나 => Java에서 제공하는 여러가지 유용한 함수를 쓸수있다. request.xxx()
  • 이제 web.xml에서 문지기 역할을 할 것이다. 하지만 web.xml에 Servlet/JSP 매핑이 너무 많이 들어있으면 그만큼 복잡해진다. 따라서 위에서 약속했던 특정주소가 들어오는 순간 FrontController가 낚아채도록 한다.
  • FrontController는 다시한번 자원을 요청하는 request를 보낸다. 이때는 처음과 다르게 내부에서의 요청이므로 자원에 접근할 수 있다.
  • 하지만 이렇게 되는 경우 처음에 만들어진 request와 response가 FrontController를 통해 만들어진 request와 response로 바뀌게 된다. 즉 기존의 request와 response가 사라지는 것이다.

이렇게 새로운 요청이 생기기 때문에 request와 response가 새롭게 new 될 수 있다. 그래서 아래의 RequestDispatcher 가 필요하다.

 

RequestDispatcher

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

  • 사용자 A가 웹 브라우저를 통해 a.jsp 파일을 요청한다.
  • a.jsp에 대한 request와 response 객체가 만들어 진다.
  • 웹 서버는 A에게 a.html을 응답한다.
  • A는 응답받은 a.html의 화면에서 b.jsp를 요청한다.
  • 이때 RequestDispatcher방식으로 이용하면 b.html에서도 기존에 만들어졌던 request와 response를 그대로 사용할 수 있다.
  • 결론적으로 RequsetDispatcher 방식을 이용해야지 페이지는 데이터 이동이 가능하다

 

DispatcherServlet

FrontController 패턴과 RequestDispatcher를 더한 것이 DispatcherServlet이다. 스프링은 DispatcherServlet이 자동으로 생성되고, 그 때 수많은 객체가 생성(IoC) 된다. 보통 필터들이다.(필터 외에 컨트롤러, 레포지토리, 서비스, 컴포넌트 등등 매우 많은 것들이 자동 등록된다.) 해당 필터들은 내가 직접 등록할 수도 있고 기본적으로 필요한 필터들은 자동으로 등록된다. DispatcherServlet 이 궁극적으로 하는 일은 어떤 주소가 들어왔을때 어디로 가야하는지에 대한 주소 분배이다.

 

결론

FrontController 패턴과 RequestDispatcher를 더한 것이 DispatcherServlet이고 JSP에서는 FrontController 패턴과 RequestDispatcher를 직접 짜야하지만 Spring에서는 DispatcherServlet을 자동지원하기 때문에 그냥 쓰면 된다!

출처 : https://www.youtube.com/watch?v=fZv9rkwSO3g&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg&index=12 

 

 

후기

 

 FrontController 패턴, RequestDispatcher, DispatcherServlet 3개 다 듣기만해도 머리가 어질어질해 질거 같은 이름이지만 의외로 어렵지 않았고 비유와 같이 설명을 들어서 더 잘 이해할 수 있었다.

다음 포스트는 이 DispatcherServlet에서 생성된 수 많은 객체의 관리에 대하여 작성할 것이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함