21.06.11 TIL 스프링 MVC : FrontController -2편(Servlet으로 만들기)

김정훈·2021년 6월 11일
0
post-thumbnail

📌 SpringMvc-FrontController[V4]

<출처 : 스프링 MVC : 김영한 강사님>

https://www.inflearn.com/roadmaps/373

🐳 V4

V3는 서블릿 종속성을, 뷰의 중복을 제거하는 등 설계가 잘 된 컨트롤러.
하지만 실제 컨트롤러 인터페이스를 구현하는 개발자 입장에서 본다면,
항상 ModelView 객체를 생성+반환 하는 부분이 조금 번거롭다.구조를 살펴보면, V3와 크게 다를 것은 없다.
하지만 ModelView가 아닌 단순하게 ViewName만을 반환하게 된다.

ConV4.interface

String process(Map<String, String> paramMap, Map<String, Object> model);

model 객체는 파라미터로 전달되기 때문에 그냥 사용하고, 결과로는 뷰의 이름만을 반환해준다.

FormV4

@Override
public String process(Map<String, String> paramMap, Map<String,Object> model){
	return "new-form";
}

단순하게 new-form이라는 뷰의 논리 이름만 반환하면 된다.

ListV4

@Override
public String process(Map<String, String> paramMap, Map<String, Object> model){
	List<Member> members = memberRepository.findAll();
    	model.put("members", members);
         
        return "members";

V3와 달리 model이 파라미터로 전달되기 때문에, V3처럼 ModelView를 생성해서 처리하지 않아도 되고,
나 같은 경우는 복잡성?이 조금 제거된 것 같아서 코드도 조금 깔끔해졌다고 생각한다.

FrontConV4 [FrontConV3와 달라진 부분을 보자.]

private Map<String, ConV4> controllerMap = new HashMap<>();

public FrontConV4(){
	controllerMap.put("/front/v4/member/new-form", new FormV4());
}
protected void service(HttpServletRequest req, HttpServletResponse res) 
	throws ServletException, IOException{
    String requestURI=req.getRequestURI();
    ConV4 controller = controllerMap.get(requestURI);
    if(controller==null){
    	...
    }
    Map<String, String> paramMap = createParamMap(req);
    추가 --> Map<String, Object> model = new HashMap<>();
    
    ModelView mv = controller.process(paramMap);
    변경--> String viewName = controller.process(paramMap, model);
    
    String viewName = mv.getViewName();
    --> 제거
    
    MyView view = viewResolver(viewName);
    
    view.render(mv.getModel(), req, res);
    변경 --> view.render(model, req, res);

➽ V4 정리
V3와 크게 달라진 점은 없다고 생각한다. 하지만 코드를 보면 조금 더 직관적이라는 생각이 든다.
어떻게 보면 바꾼 부분은 model을 파라미터로 넘기고, 뷰의 논리이름을 반환하는 작업만을 적용했다.


➽ V5 같은 경우는 Spring Mvc와 구조와 비슷하기 때문에 v5는 따로 정리하지 않고, 바로 Spring Mvc구조를 포스팅할 예정이다.

profile
WebDeveloper

0개의 댓글