Spring
스프링 MVC 1 - 뷰 리졸버
스프링 MVC 1 - 뷰 리졸버
2022.07.11뷰 리졸버 이번에는 뷰 리졸버에 대해서 자세히 알아보자. OldController - View 조회할 수 있도록 변경 View를 사용할 수 있도록 다음 코드를 추가했다. return new ModelAndView("new-form"); 실행 http://localhost:8080/springmvc/old-controller 웹 브라우저에 Whitelabel Error Page가 나오고, 콘솔에 OldController.handleRequest이 출력될 것이다. 실행해보면 컨트롤러를 정상 호출되지만, Whitelabel Error Page 오류가 발생한다. application.properties에 다음 코드를 추가하자 뷰 리졸버 - InternalResourceViewResolver 스프링 부트는 Int..
스프링 MVC 1 - 핸들러 매핑과 핸들러 어댑터
스프링 MVC 1 - 핸들러 매핑과 핸들러 어댑터
2022.07.10핸들러 매핑과 핸들러 어댑터 핸들러 매핑과 핸들러 어댑터가 어떤 것들이 어떻게 사용되는지 알아보자. 지금은 전혀 사용하지 않지만, 과거에 주로 사용했던 스프링이 제공하는 간단한 컨트롤러로 핸들러 매핑과 어댑터를 이해해보자. Controller 인터페이스 과거 버전 스프링 컨트롤러 org.springframework.web.servlet.mvc.Controller 스프링도 처음에는 이런 딱딱한 형식의 컨트롤러를 제공했다. 참고 Controller 인터페이스는 @Controller 애노테이션과는 전혀 다르다. 간단하게 구현해보자. OldController @Component: 이 컨트롤러는 /springmvc/old-controller 라는 이름의 스프링 빈으로 등록되었다. 빈의 이름으로 URL을 매핑할 것..
스프링 MVC 1 - 스프링 MVC 전체 구조
스프링 MVC 1 - 스프링 MVC 전체 구조
2022.07.10스프링 MVC 전체 구조 직접 만든 MVC 프레임워크와 스프링 MVC를 비교해보자. 직접 만든 MVC 프레임워크 구조 SpringMVC 구조 직접 만든 프레임워크 → 스프링 MVC 비교 FrontController → DispatcherServlet handlerMappingMap → HandlerMapping MyHandlerAdapter → HandlerAdapter ModelView → ModelAndView viewResolver → ViewResolver MyView → View DispatcherServlet 구조 살펴보기 org.springframework.web.servlet.DispatcherServlet 스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어 있다. 스프링 MVC의 프론트 컨..
스프링 MVC 1 - 정리(MVC 프레임워크 만들기)
스프링 MVC 1 - 정리(MVC 프레임워크 만들기)
2022.07.09정리(MVC 프레임워크 만들기) 지금까지 v1~v5로 점진적으로 프레임워크를 발전시켜 왔다. 지금까지 한 작업을 정리해보자. v1: 프론트 컨트롤러를 도입 기존 구조를 최대한 유지하면서 프론트 컨트롤러를 도입 v2: View 분류 단순 반복 되는 뷰 로직 분리 v3: Model 추가 서블릿 종속성 제거 뷰 이름 중복 제거 v4: 단순하고 실용적인 컨트롤러 v3와 거의 비슷 구현 입장에서 ModelView를 직접 생성해서 반환하지 않도록 편리한 인터페이스 제공 v5: 유연한 컨트롤러 어댑터 도입 어댑터를 추가해서 프레임워크를 유연하고 확장성 있게 설계 여기에 애노테이션을 사용해서 컨트롤러를 더 편리하게 발전시킬 수도 있다. 만약 애노테이션을 사용해서 컨트롤러를 편리하게 사용할 수 있게 하려면 어떻게 해야할..
스프링 MVC 1 - 유연한 컨트롤러2 - v5
스프링 MVC 1 - 유연한 컨트롤러2 - v5
2022.07.08유연한 컨트롤러2 - v5 FrontControllerServletV5에 ControllerV4 기능도 추가해보자. 핸들러 매핑(handlerMappingMap)에 ControllerV4를 사용하는 컨트롤러를 추가하고, 해당 컨트롤러를 처리할 수 있는 어댑터인 ControllerV4HandlerAdapter도 추가하자. ControllerV4HanlderAdapter 하나씩 분석해보자. handler가 ControllerV4인 경우에만 처리하는 어댑터이다. 실행 로직 handler를 ControllerV4로 케스팅하고, paramMap, model을 만들어서 해당 컨트롤러를 호출한다. 그리고 viewName을 반환 받는다. 어댑터 변환 어댑터에서 이 부분이 단순하지만 중요한 부분이다. 어댑터가 호출하는 ..
스프링 MVC 1 - 유연한 컨트롤러1 - v5
스프링 MVC 1 - 유연한 컨트롤러1 - v5
2022.07.07유연한 컨트롤러1 - v5 만약 어떤 개발자는 'ControllerV3' 방식으로 개발하고 싶고, 어떤 개발자는 'ControllerV4' 방식으로 개발하고 싶다면 어떻게 해야할까? 어댑터 패턴 지금까지 우리가 개발한 프론트 컨트롤러는 한가지 방식의 컨트롤러 인터페이스만 사용할 수 있다. ControllerV3, ControllerV4는 완전히 다른 인터페이스이다. 따라서 호환이 불가능하다. 마치 v3는 110v이고, v4는 220v 전기 콘센트 같은 것이다. 이럴 때 사용하는 것이 바로 어댑터이다. 어댑터 패턴을 사용해서 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 변경해보자. V5 구조 핸들러 어댑터: 중간에 어댑터 역할을 해주는 덕분에 다양한 종류의 컨트롤러를 호출할 수 있다. 핸들..