Client
가Server
로 요청을 하면Controller
중에서도Client
의 모든 요청을 받는Front Controller
가 있다.
기존에는 이Front Controller
을Servlet
로 만들었다.
Front Controller
이 모든 일처리를 다하다 보면 너무 과부하가 되다 보니까Front Controller
은 요청 만 받아 들이고, 일은 각 객체에게 시킨다.
그 객체를POJO (Plaion Old Java Object)
-> 오래된 방식의 객체
실제 일은 그POJO
객체가 일을 수행한다.
기존에 있는 HomeController
은 Front Controller
이 아니라 POJO
이다.
이유는 Servlet
이 아니기 때문이다. (일반 클래스 이다)
왜 Front Controller
이 안만들어도 되느냐 궁금증이 생길수 있다.
하지만 Spring
은 기본적으로 Front Controller
를 제공 해준다.
Front Controller
이 있는 위치이고, xml
파일은 프로젝트에 설정을 하는 파일 들이다.
Server Start
를 하는 순간 tomcat
은 Server.xml
안에있는 프로젝트 지정한 곳으로 가 web.xml
을 읽는다.
더 궁금한건 https://codingnotes.tistory.com/28 페이지로 가자.
나도 위에 있는 링크를 보고 공부를 했다.
Spring
에서는 저 Dispatcher Servlet(빨간색 네모)
가 모든 요청을 받게 된다.
Front Controller
에서는 POJO
로 일을 시킬때 바로 가는 것이 아니라 중간에 Handler Mapping
를 통해 요청하게 된다.
Handler Mapping
같은 경우에도 Front Controller
처럼 Spring
에서 제공을 해준다.
위에 있는 사진에서 console
를 보면 실행시 /
로 url
을 요청하게 되면 Handler Mapping
이 home
메소드를 실행한다는 것을 알 수 있다.
실제 실행되는 POJO
메소드.
하나의 POJO
에서는 Mapping
값에 따라 실행되는 메소드가 다르며 여러개가 있을 수 있다.
POJO
실행 후 home
을 리턴해주는데 // WEB-INF/views/home.jsp
를 응답해달라고 Front Controller
에게 전달하는 것이다.
하지만 home
만 응답하게 되는데, 그렇게 되면 Front Controller
가 페이지를 돌려줄 수 없다.
->
home
은 단순 논리적인 이름,home
을 접두사 접미사를 붙여 물리적인 주소를 전달해야한다.
엥 처음붙어 물리적인 이름을 쓰면 되는거 아닌가? -> 나중에 접두사 접미사 에 있는 확장자 또는 폴더명이 변경되면 일일이 다POJO
를 찾아가며 수정을 해줘야한다.
그럼 접두사와 접미사는 대체 어디서 붙여줄까?
그 녀석이 바로 View Resolver
이다.
Front Controller
는 POJO
로 부터 돌려줄 페이지의 논리적 이름만 받아와서 View Resolver
에게 전달해서 최종 물리적인 주소를 다시 전달 받는다.
바로이게 View Resolver
이다.
이녀석이 접두사 접미사에 필요한 경로를 붙여준다.
우리는 소스코드를 수정하는게 아니라 xml에 설정만 바꿔주면 되는 편리함이 있다!
그러면 이제 Front Controller
가 최종적으로 무슨 파일을 돌려줄 지 알기때문에 Client
에게 해당 파일을 전달한다. (jsp) -> forwarding
최종 view jsp
에서는 POJO
에서 넣어놓은 특정메모리에 저장된 데이터를 포워딩(객체 바인딩)
을 통해 꺼내서 사용할 수 있다.
위에 있는 "기본 동작의 흐름"은 정말 매우 중요한 내용이다.
이해하고 외우면 스프링을 하는데에 많은 도움이 될 것이라고 자부 한다.
다음에는 중요한 1~3 내용을 한개로 정리해서 게시글을 올릴 예정이다.
솔직히 공부를 하면서 개발은 변화나 발전이 빠르다는것을 느끼게 되었다.
스프링도 JSP/Servlet처럼 10년 정도는 안정적일 수도 있겠다고 생각을 하지만,
또 최근에 파이썬을 보니 파이썬으로도 백엔드를 할 수 있을거 같기도 하고,
여러모로 빠른이 변화를 어떻게 내가 잘 적을 할 수 있을지 걱정이지만
그래도 허무하게 끝내고 싶지는 않기 때문에 잘 확인하고 봐야겠다.