2017 - 10 - 15 (일)
코드로 배우는 스프링 웹프로젝트[구멍가게 코딩단 지음] 참조
1 .. MVC MODEL 2
Model 2 패턴
Model : 데이터 혹은 데이터를 처리하는 영역
View : 결과 화면을 만들어내는데 사용하는 부분
Controller : 웹의 요청을 처리한다. View와 Model 사이에서 통신하는 역할을 한다.
위와같이 분할하면서 Front-end 와 Back-end 를 분리하여 작업이 가능하며 유지보수에도 용이하게 되었다.
Front Controller 패턴
모델 2 방식으로 분업이 가능케 되었지만 각 컨트롤러 사이의 중복코드가 생기며 Front Controller 방식을 도입하게됨.(Spring MVC)
위 사진에서 Front-controller 가 dispatcher-servlet이라고 생각하면 된다. Spring 3.0 MVC 의 요청 처리 절차는 아래와 같다.
1.. 클라이언트가 브라우저에서 회원가입을 위해 서버에 HTTP Request 메시지를 보낸다.
2.. 들어오는 HTTP Request는 Front-controller에서 받아 적절한 회원가입 요청을 처리하는 컨트롤러의 메서드에 매핑(Handler-mapping)한다.
3.. Handler Mapping의 도움으로, Front-controller는 들어온 요청을 적절한 Controller(회원등록 Controller) 로 보낸다.
4.. 이 Controller는 회원관리 관련한 DB연동을 담당하는 USERDAO(DB와 연동하여 회원정보를 Insert함)를 이용해서 데이터를 요청한다.
5.. USERDAO객체는 Mybatis 를 이용하는 Mapper를 통해서 원하는 작업을 수행한다.
4.. Controller 는 들어온 요청을 처리하고 그 결과로 Model과 View 를 ModelAndView 라는 객체의 인스턴스 형태로 Front Controller 에 다시 전달한다.
5.. Front Controller 는 ViewResolver 오브젝트를 이용하여 이 view 를 분석한다(회원가입 완료 화면).
6.. 선택된 view 는 변환되어 다시 클라이언트에게 보여진다.
Spring Controller Test
컨트롤러에 대한 예제
package org.zerock.domain;
public class ProductVO {
private String name;
private double price;
public ProductVO(String name, double price) {
super();
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
//VO 클래스 생성. 객체로 값이 전달됨.
@Controller //@Controller 애너테이션은 SampleController3 을 Controller 클래스로 지정해준다.
public class SampleController3 {
private static final Logger logger = LoggerFactory.getLogger(SampleController3.class);
@RequestMapping("/doD") // doD() 메서드는 doD URI에 매칭되는 메소드이다.
public String doD(Model model) {
ProductVO product = new ProductVO("Sample Product", 10000);
logger.info("doD");
model.addAttribute(product); // 이때 productVO 처럼 앞글자가 소문자로 처리된 형태가 저장된다.
return "productDetail";
}
}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<body>
<P> ${productVO.name }</P>
<p>${productVO.price }</p>
</body>
</html>
위의 예제는 SampleController3 을 컨트롤러로 지정해주고 해당 컨트롤러로 오는 요청 중 doD 에 매핑되는 doD() 메서드가 실행되는 예제이다.
product 객체를 하나 생성하고 model객체에 product객체를 주입한다. 해당 컨트롤러는 productDetail 을 리턴하여 productDetail.jsp 페이지를 응답한다.
JSON 데이터 생성하기
JSON 을 활용하기 위해서 pom.xml 에 해당 라이브러리를 추가해야한다. mvnrepostorty에서 jackson-databind를 검색하여 추가한다.
@Controller
public class SampleController5 {
@RequestMapping("/doJSON")
public @ResponseBody ProductVO doJSON() {
//JSON 데이터를 사용하기위해 @ResponseBody 애너테이션을 추가해야한다.메소드 리턴을 객체로 한다.
ProductVO vo = new ProductVO("샘플상품",30000);
return vo;
}
}