개선하기

HYUNBIN CHO·2021년 5월 20일
0

spring

목록 보기
22/23
post-thumbnail

V2

1. 프론트 컨트롤러의 도입과 view 분리하기

🔸 프론트 컨트롤러가 맵핑 정보를 확인하고 컨트롤러를 호출하면 컨트롤러는 로직을 수행하고 그 값을 MyView 객체에 담아서 반환

🔸 프론트 컨트롤러는 MyView객체의 render() -> forward로직을 통해서 뷰를 렌더링(해당 jsp실행)한다.

🔸 프론트 컨트롤러의 도입으로 MyView객체의 render()를 일관되게 호출, 처리할 수 있다.( 각 컨트롤러들은 MyView객체를 생성해서 반환하기만 하면된다.)
물론, MyView도 인터페이스로 만들어도 된다.

V3

1. 모델 추가 및 서블릿 종속성(불필요한 request, response)제거

🔸 컨트롤러의 입장에서 꼭 HttpServletRequest, HttpServletResponse객체가 필요한 것이 아니라 요청 파라미터만 받으면 된다. 그래서 request객체 대신 ModelView라는 객체를 만들어서 사용
➡️ 컨트롤러(구현체)가 서블릿이라는 기술을 전혀 몰라도 프로그램이 동작하도록..
ModelView는 viewName과 model로 구성되어있으며 model은 Map<String, Object>

2. 뷰의 중복이름 제거

🔹 "new-form"이라는 논리이름만 ModelView객체에 담아서 반환하면 프론트 컨트롤러에서 viewResolver를 통해서 절대경로로 변환한다.

‼️좋은 프레임워크는 멋진 설계도 중요하지만, 개발자가 쉽고 간편하게 사용할 수 있는 실용성이 있어야 한다.

V4

🔹 프론트 컨트롤러가 컨트롤러의 process()를 호출할 때, 기존의 paramMap + model을 같이 넘겨주고 컨트롤러는 처리한 데이터를 model에 담아서 ModelView가 아닌 viewName("new-form")만 반환한다.
🔹 다시 프론트 컨트롤러는 viewName을 viewResolver를 통해서 절대경로로 변환 후 render()를 호출해서 jsp를 실행한다.

V5

🔹FrontControllerV4에서는 ControllerV4타입만 사용이 가능 했었는데 V3타입도 사용해야 한다면??

➡️ 어댑터 패턴을 사용해서 다양한 타입의 컨트롤러를 사용할 수 있도록 할 수 있다.🔸핸들러 어댑터 : 중간에서 다양한 종류의 컨트롤러를 호출할 수 있도록 어댑터 역할
🔸 핸들러 : 컨트롤러와 동일한 역할

🔹 흐름

  1. gethandler를 통해서 매핑정보를 찾는다.(예. MemberFormControllerV4)
  2. 반환된 컨트롤러(핸들러)를 가지고 어댑터를 찾는다.
    (adapter.supports(handler) -> V3는 instanceof : false -> V4는 instanceof : true - > ControllerV4adapter가 반환됨)
  3. adapter.handle(request, response, handler) : model에 값을 담고 ModelView를 반환한다.

🔸 컨트롤러는 viewName을 반환하고 어댑터가 중간에서 ModelView로 바꿔서 프론트컨트롤러로 반환한다.

➡️다형성과 어댑터로 인해서 기본 구조는 유지하면서 기능을 확장할 수 있다.






https://www.inflearn.com/course/스프링-mvc-1/

profile
백견이 불여일타

0개의 댓글