본문 바로가기
Develop/Java

[MVC] Controller 단순화

by 연로그 2021. 5. 13.
반응형

v3까지 설계한 것은 구조적으로 좋은 설계이다.

하지만 개발자들 입장에서는 항상 ModelView 객체 생성 반환해야해서 좀 번거롭다.

이를 좀 더 단순화하기 위해 코드를 변경해보겠다.

 

이전 코드: yeonyeon.tistory.com/105

 

[MVC] Model 분리

현재 코드의 문제점 컨트롤러는 매번 사용하지도 않는 HttpServletRequest, HttpServletResponse를 받는다. "/WEB-INF/views/new-form.jsp" 같은 경로에서 "/WEB-INF/views" 같이 경로가 반복된다. 현재 서블릿에..

yeonyeon.tistory.com

 

이번 글은 코드 전문을 공개하기보다 어느 부분이 어떻게 바뀌었는지 위주로 짚어보겠다.

(코드 전문: https://github.com/yeon-06/inflearnSpring/tree/master/mvc1/src/main/java/hello/servlet/web/frontcontroller/v4)

 

이번 수정 포인트는 Controller에서 매번 ModelView 객체를 생성하고 반환하는 작업이 번거롭다는 것이다.

만약 간단하게 이름만 보내는 형식으로 사용한다면?

 

포인트는 Controller의 함수인 process 함수의 반환 타입이다.

public interface ControllerV4 {
	/*
	 * @param paramMap
	 * @param model
	 * @return viewName
	 */
	String process(Map<String, String> paramMap, Map<String, Object> model);
}
  • 기존에 ModelView 형태로 반환하던 것을 단순히 String 형태로 반환
  • Map을 추가해 model을 파라미터로 사용

 

Controller interface가 위와 같이 변함에 따라 Controller는 다음의 변화를 겪는다.

  • ModelView 객체를 만들고 반환하던 과정 생략
  • return 형태가 String으로 변환됨으로써 viewName을 직접 반환
  • Member에 대한 데이터는 파라미터로 추가한 model에 저장

 

Front Controller의 로직도 살짝 변화가 생긴다.

  • ModelView를 생성한 뒤, process 값을 받아서 값을 꺼낼 필요가 없음
  • viewName을 바로 받아서 사용

 

아직도 개선사항은 있다.

바로 process가 interface로 규정되어있다보니 파라미터의 형식과 개수를 맞춰야한다는 점

interface를 다른 종류로 바꾸자니 front controller에 다음과 같이 선언되어 있다.

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

(키, 값)이 (String, ControllerV4) 타입으로 고정되어 있다.

ControllerV4 외에 ControllerV3, V2, V1 등등 하나만 선택할 수는 있지만 여러 버전을 다 사용할 수는 없다.

= '호환'이 불가능하다

 

이를 개선하기 위해서는 어댑터를 사용한다.

어댑터 패턴을 이용해 front controller가 다양한 방식의 controller를 사용할 수 있도록 개선해보겠다.


본 게시글은 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.

내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.

 

inf.run/B756

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

반응형

'Develop > Java' 카테고리의 다른 글

[Java] Collections와 Map  (1) 2021.05.21
[MVC] 어댑터 추가  (0) 2021.05.19
[MVC] Model 분리  (0) 2021.05.11
[MVC] View 분리  (0) 2021.05.10
[MVC] 프론트 컨트롤러 패턴  (2) 2021.05.10