자바 웹 프로그래밍

준비중..

자바 웹 프로그래밍

나만의 웹사이트를 만들어 보자!

11 Spring을 만나다: MVC 패턴

# Spring을 만나다: MVC 패턴 ## 목차 1. 학습목표 2. MVC 패턴이란? 3. MVC 패턴 코드 예 ## 학습목표 + MVC 패턴의 이해 ## MVC 패턴이란? 스프링을 사용한 웹 서비스는 MVC 패턴으로 만들어진다. 따라서 이에 대한 이해가 필요하다. MVC(Model-View-Controller) 패턴은 역할 분담 패턴이다. 모델(`Model`)은 데이터 담당, 뷰(`View`)는 화면 담당, 컨트롤러(`Controller`)는 모델과 뷰 사이의 중재자 역할을 한다. 마치 음식점에 웨이터, 요리사, 매니저가 역할 분담을 하는 것과 같다. ![Imgur](https://i.imgur.com/V7CGG0Y.png) ### MVC 패턴의 장점 MVC 패턴을 통해 각의 모듈은 역할이 명확해진다.이로 인해 코드의 유지 보수가 쉬워지고, 개발자-퍼블리셔(또는 디자이너)간 협업이 원할해진다. ## MVC 패턴 코드 예 그렇다면 실제 코드를 통해 MVC 패턴을 이해해 보자. 아래의 프로젝트를 보면 HomeController.java와 home.jsp가 있다. ![Imgur](https://i.imgur.com/DSTaO0l.png) 먼저 `View`가 되는 home.jsp 부터 확인하자. home.jsp ``` <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page pageEncoding="utf-8" session="false"%> <html> <head> <title>Home</title> </head> <body> <h1>Hello world!</h1> <!-- serverTime 변수는 컨트롤러가 발행한 데이터 --> <p>The time on the server is ${serverTime}.</p> </body> </html> ``` 위 코드에 `serverTime` 변수는 컨트롤러로부터 전달된 데이터다. 이 데이터가 어떻게 전달되었는지 `컨트롤러` 코드를 확인해보자. (모든 코드를 당장 다 알필요는 없다) HomeController.java ``` @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); // 모델을 통한 데이터 등록. model.addAttribute("serverTime", formattedDate ); // 뷰 페이지를 home.jsp로 설정 return "home"; } } ``` 위 코드 중 주석처리 부분을 눈여겨보자. 먼저는 모델을 통해 `serverTIme` 데이터를 등록한다. 그리고 리턴 값을 통해 `home.jsp`를 반환한다. 여기서 반환값을 기준으로 View페이지를 설정하게 된다. 대략적인 느낌이 온다면 OK! ## 문제 뷰페이지인 test.jsp의 코드가 아래와 같다. ``` <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page pageEncoding="utf-8" session="false"%> <html> <head> <title>Test</title> </head> <body> <h1>Test</h1> <p>이 페이지는 "${ controller }"의 "${ method }" 메소드 호출로 출력되었습니다.</p> </body> </html> ``` 위 페이지의 출력결과가 아래와 같도록, 컨트롤러(HomeController.java)의 코드를 작성하시오. ![Imgur](https://i.imgur.com/xzYHwKZ.png) ## 요약 1. MVC 패턴은 데이터처리자, 화면처리자, 중재자를 두어 프로그램을 개발하는 방식이다. 2. MVC 패턴의 장점은 크게 두 가지로 아래와 같다. + 개발자-퍼블리셔간 협업을 원활하게 함. + 코드 유지보수성 증가. 3. 컨트롤러의 반환 값을 통해 뷰 페이지를 설정한다. ``` @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { ... // 뷰 페이지를 home.jsp로 설정 return "home"; } ``` 4. 모델을 통해 데이터를 등록한다. ``` // 모델을 통한 데이터 등록. model.addAttribute("serverTime", formattedDate ); ```