componentService Layer예시
어떤 주문 번호 oId로 해당 주문 상품의 정보와 결제 정보를 출력하고자 한다.
Controller는 해당 기능을 구현한 service를 찾아 비지니스 로직을 수행한다.
Controller
private PaymentService paymentService;
private ProdService prodService;
@Autowired
public PaymentRestController(PaymentService paymentService, ProdService prodService){
this.paymentService = paymentService;
this.prodService = prodService;
}
@GetMapping("/payment")
public ResponseEntity<PaymentVO> getPaymentByoId(@RequestParam String oId){
PaymentDTO paymentDTO = paymentService.getPaymentById(oId);
ProdDTO prodDTO = prodService.getByOrderNo(oId);
Map<ProdVO, PaymentVO> map = new HashMap<>();
map.put(prodDTO.toVO(),paymentDTO.toVO());
return new ResponseEntity(map.get(prodDTO.toVO()), HttpStatus.OK);
}
Service
private PaymentDAO paymentDAO;
@Autowired
public PaymentService(PaymentDAO paymentDAO){
this.paymentDAO = paymentDAO;
}
@Override
public PaymentDTO getPaymentById(String oId) {
if (oId == null) return null;
Payment payment= paymentDAO.select(oId);
if (payment == null) return null;
return payment.toDTO();
}
위의 예시와 같이 Controller에서 Service를 호출하고 Service는 DAO를 이용해 비지니스 로직을 수행함을 알 수 있다.
view와 model을 연결하는 라우팅 역할view 호출 (html, jsp 연결)각 계층마다 관심을 분리하여 개발하여 협업에 능하고 유지보수에 용이한 장점이 있음
URI 형식으로 Web Service에 Request 전달DispatcherServlet이 Request를 위임할 HandlerMapping을 찾음Controller로 위임view returnVeiwResolver를 통해 View를 찾아 Client에게 returnController를 통해 객체를 반환할 때는 HttpMessageConverter가 동작
@ResponseBody : 데이터를 주고 받을 때 페이지 전환이 일어나지 않고 비동기 통신으로 전달받는 경우가 많음StringHttpMessageConverter : 단순 문자열MappingJackson2HttpMessageConverter : 객체@Controller + @ResponseBodyJSON형태로 객체 데이터를 반환하기 위함GET 방식 요청은 http 요청 본문이 없으므로 사용 불가@ModelAttribute를 사용하는 것이 훨씬 유리이외에도 새로운 MessageConverter를 등록하려면 직접 AnnotationMethodHandlerAdapter의 messageConverters에 등록하고 사용할 수 있다.