본문 바로가기

Spring33

Spring MVC의 구조 스프링 MVC의 구조 스프링 MVC의 구조는 위의 그림과 같이 동작한다. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL와 여러가지 정보를 기반으로 매핑된 핸들러(컨트롤러)를 조회한다. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다. 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다. viewResolver 호출 : 뷰 리졸버를 찾고 실행한다. JSP의 경우 : InternalResourceViewResolver가 자동 등록되고, 사용된다. View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸.. 2023. 7. 19.
MVC 프레임워크 만들기 (6) - Adapter Pattern-2 MVC 프레임워크 만들기 (5)에 이어지는 내용입니다. 앞전 포스팅에서는 (3)의 버젼을 지원하는 어댑터를 구현하였다. 이번에는 (4)의 버젼을 지원하는 어댑터를 구현하여서, 정말 유연한 컨트롤러처리가 가능하게 만들어 보자. 해당 코드의 동작 구조는 (5)와 동일하다. 바로 코드를 살펴보자. FrontControllerServletV5 import hello.servlet.web.frontcontroller.ModelView; import hello.servlet.web.frontcontroller.MyView; import hello.servlet.web.frontcontroller.v3.controller.MemberFormControllerV3; import hello.servlet.web.fron.. 2023. 7. 19.
MVC 프레임워크 만들기 (5) - Adapter Pattern-1 MVC 프레임워크 만들기 1~4에 이어지는 포스팅 입니다. 이전까지의 학습에서는 직접 프레임워크를 구현하고, 리팩토링 과정을 통해서 발전 시켜왔다. 하지만, 앞의 코드들을 잘 살펴보면 개발자는 MVC 프레임워크 만들기 (3) 의 방식으로 개발을 하고 싶고, 다른 개발자는 MVC 프레임워크 만들기 (4)의 방식으로 개발을 하고 싶다고 가정해보자. 이런 경우에는 각각의 버젼에 맞는 프레임 워크를 사용할 수 밖에 없을 것이다. 왜냐하면, 우리가 개발한 프론트 컨트롤러는 한가지 방식의 컨트롤러 인터페이스만 이용할 수 있기 때문이다. 이를 해결하기 위해서, 어댑퍼 패턴을 이용한다면 이러한 제약사항을 해결할 수 있다. 이번 포스팅에서는 앞의 코드들을 좀 더 유연하게 개발할 수 있도록 Adapter Pattern을 .. 2023. 7. 19.
MVC 프레임워크 만들기 (4) - 단순하고 실용적인 컨트롤러 MVC 프레임워크 만들기 (3)에서 이어지는 내용입니다. 앞서 만든 v3 컨트롤러는 서블릿 종속성을 제거하고, 뷰 경로의 중복을 제거하는 등, 잘 설계된 컨트롤러이다. 그런데 실제 컨트롤러 인터페이스를 구현하는 개발자 입장에서 보면, 항상 ModelView객체를 생성하고 반환해야 하는 부분이 조금은 번거롭게 느껴진다. 좋은 프레임워크는 아키텍처도 중요하지만, 그와 더불어 실제 개발하는 개발자가 단순하고 편리하게 사용할 수 있어야한다. 이번 포스팅에서는 앞전의 단계를 변경하여, 실제 구현하는 개발자들이 편리하게 개발할 수있도록 리팩토링 해볼 것이다. 구조 기본적인 구조는 앞전과 같지만 이번에는 컨트롤러가 ModelView를 반환하지 않고, ViewName만 반환한다. ControllerV4 import j.. 2023. 7. 18.
MVC 프레임워크 만들기 (3) - Model 추가 MVC 프레임워크 만들기 (2)에서 이어지는 내용입니다. 이전의 포스팅에서 MyView라는 클래스를 생성하여서, View를 분리하였다. 따라서, 각 컨트롤러는 뷰객체만 반환하고 뷰객체를 반환받은 프론트컨트롤러에서 모두 JSP에 각자의 뷰의 경로에 맞는 JSP에 foward되면서, 클라이언트에게 응답페이지가 반환되게 된다. 하지만, 아직까지 코드를 살펴보면 각각의 컨트롤러는, "/WEB-INF/view"와 같은 경로를 담고 있어서, 만약 경로가 변경되는 일이 발생한다면, 해당 경로를 각각의 컨트롤러에 모두 설정해 주어야 할 것이다. 또한, process메서드에 파라미터로 불필요한 HttpServletRequest와 HttpServletResponse가 파라미터로 들어오는 문제점도 있다. 예시) 회원 폼 컨.. 2023. 7. 18.
MVC 프레임워크 만들기 (2) - View 분리 MVC 프레임워크 만들기 (1) 에서 이어집니다. 앞전 포스팅에서는 프론트 컨트롤러 패턴을 적용하여서, 클라이언트 요청의 창구를 하나로 만들고, 공통처리에 용이하도록 만들었다. 하지만 아직까지 아래와 같은 중복되는 코드들이 존재한다. String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); 이번에는 뷰를 별도로 처리하는 객체를 생성하여, 중복코드를 제거하고 분리해보자. 앞전 구조에 이어 View 분리 구조는 아래와 같다. 앞의 V1 구조에서 추가로 프론트 컨트롤러에서 매핑된 컨트.. 2023. 7. 17.