component
Service 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 return
VeiwResolver
를 통해 View를 찾아 Client에게 return
Controller
를 통해 객체를 반환할 때는 HttpMessageConverter
가 동작
@ResponseBody
: 데이터를 주고 받을 때 페이지 전환이 일어나지 않고 비동기 통신으로 전달받는 경우가 많음StringHttpMessageConverter
: 단순 문자열MappingJackson2HttpMessageConverter
: 객체@Controller
+ @ResponseBody
JSON
형태로 객체 데이터를 반환하기 위함GET 방식 요청은 http 요청 본문이 없으므로 사용 불가
@ModelAttribute
를 사용하는 것이 훨씬 유리이외에도 새로운 MessageConverter를 등록하려면 직접 AnnotationMethodHandlerAdapter
의 messageConverters
에 등록하고 사용할 수 있다.