티스토리 뷰
MVC Architecture 정리
MVC architecture란 무엇일까?
- Model, View, Controller를 분리한 디자인 패턴을 말한다.
Controller
컨트롤러는 데이터와 사용자 인터페이스 요소를 이어주는 중간 다리 역활을 한다. 사용자가 데이터를 수정하는 등 '이벤트'를 처리해야 함을 의미한다.
- Servlet (service)
- 요청 객체를 찾는 흐름 : Controller -> Service -> Dao -> DB
[요구사항]
- 모델이나 뷰에 대해서 알고 있어야 한다.
- View와 Model 사이의 인터페이스 역활을 한다.
- 모델과, 뷰는 서로의 존재를 모른체 변경을 외부로 알리고, 수신하는 방법만 알고 있으므로 이를 컨트롤러가 중재해야한다.
- 컨트롤러는 뷰와 모델에 명령을 보낼 수 있다. (회원 생성 시 DB에 넣고, 화면도 변경되게 함)
- 모델이나 뷰의 변경을 모니터링 해야한다.
- 모델이나 뷰의 변경 통지를 받으면 이를 해석해서 각각의 구성요소에 알려줘야 한다.
Model
Application의 정보, 상태 (Data)를 나타낸다. 또한 이런 데이터, 정보들의 가공을 책임지는 컴포넌트이다.
- java Beans
[요구사항]
- 사용자가 편집하길 원하는 모든 데이터를 갖고 있어야한다. (이 데이터에 변화가 발생하면 통지할 의무가 있다.)
- 뷰나 컨트롤러에 어떤 정보도 알지 않아야 한다.
- 모델이 관리하는 데이터에 변경이 발생하면 변경 통지에 대해 처리방법을 구현해야한다.
- 모델상태에 변경이 생기면 뷰, 컨트롤러에 알려야 한다. 이런 통보를 통해서 뷰는 최신 결과를 보여주고 컨트롤러는 변화에 맞춰서 적용가능한 명령을 추가, 제거, 수정할 수 있다.
(자신이 댓글이 추가하면 댓글을 삭제하거나 수정하는 로직이 추가될 수 있다.)
- 모델상태에 변경이 생기면 뷰, 컨트롤러에 알려야 한다. 이런 통보를 통해서 뷰는 최신 결과를 보여주고 컨트롤러는 변화에 맞춰서 적용가능한 명령을 추가, 제거, 수정할 수 있다.
View
뷰는 사용자가 볼 결과물을 생성하기 위해서 Model로 부터 정보를 얻어오고 이를 기반으로 프레젠테이션을 완성한다.
- JSP, Thymeleaf 등
JSP와 Servlet을 모두 이용하는 모델 (MVC 모델 2)
참고) MVC 모델 1
- Controller를 구체적으로 구현하지 않고, View와 Model로만 이뤄진 구조이다. JSP가 요청을 받으면 Model 영역을 선택해서 호출하는 구조로 View가 컨트롤러의 역활을 겸업하고 있다고 할 수 있다. 이 JSP가 클라이언트에게 보내줄 UI를 생성하므로 View 역활을 수행한다.
MVC 모델 2구조가 일반적인 MVC패턴 구조이다.
- 1) Client -> Controller
- @WebServlet 또는 web.xml의 url-pattern에 해당하는 Servelt으로 부터
- 2) Controller -> Service
- 사용자가 입력한 Form Data를 Service에 인자로 넘겨준다.
- Service
- DAO와 DB를 거쳐서 결과값을 가져온다.
- Business Logic을 처리한다. (회원가입, 회원 목록 조회 등)
- 3) Service -> Controller
- 결과값을 Bean 객체에 저장한다.
- Controller
- Request 객체에 결과값(Bean)을 저장한다.
-
@PostMapping("/items/Book/{itemId}/edit") public String updateBookItem( @PathVariable("itemId") Long itemId, @ModelAttribute("form") @Valid BookForm form, BindingResult binding) { if (binding.hasErrors()) { return "items/book/updateBookForm"; } itemService.updateItem(itemId, form.getName(), form.getPrice(), form.getStockQuantity()); return "redirect:/items"; }
- 4) Controller -> View
- 적절한 JSP 페이지로 전달하고, JSP에서 Bean객체로 부터 원하는 Data를 추출해서 Output을 생성한다.
- View
- 적절한 동적인 페이지를 만들어서 반환한다.
- 5) View -> Client
- 브라우저에 전달해서 보여준다.
Spring FrameWork가 제공하는 Class
- DispatcherServlet
- spring Framework가 제공하는 Servelt 클래스이다
- 사용자의 요청을 받는다.
- Dispatcher가 받은 요청은 HandlerMapping으로 넘어간다
- HandlerMapping
- 사용자의 요청을 처리할 @Controller를 찾는다. (Controller URL Mapping)
- 요청 URL에 해당하는 Controller 정보를 저장하는 table을 갖고 있어서 맞춰서 반환해준다.
- 테이블에는 @RequestMapping("/url")을 통해 매핑한다.
-
@RequestMapping("/") public String home() { log.info("home controller"); return "home"; }
- ViewResolver
- Controller가 반환한 View이름에 prefix, suffiex를 붙여서 반환해준다. (경로를 포함한 풀네임)
- 이후 View에서 적절한 페이지를 만들어서 반환해준다.
-
home.html <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header"> <title>Groom Book-store</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader" /> <div class="jumbotron"> <h1>HELLO</h1> </div> <div th:replace="fragments/footer :: footer" /> </div> </body> </html>
반응형
'Web > 정리글' 카테고리의 다른 글
JPA 정리 (0) | 2021.08.04 |
---|---|
Servlet 정리 (0) | 2021.07.28 |
DAO, DTO 정리 (0) | 2021.07.18 |
Junit Test 환경 (0) | 2021.07.12 |
Junit5 테스트 (0) | 2021.07.12 |
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday