MVC 패턴

정태경·2022년 7월 17일
0

Spring 다뤄보기

목록 보기
3/4
post-thumbnail

MVC 패턴이란

프로그래밍 경험이 있다면 MVC, MVVM 같은 키워드를 많이 들어봤을 것이다. 이러한 키워드는 소프트웨어 설계와 관련된 디자인 패턴이다. 다시 말해 소프트웨어 공학에서의 설계 패턴이라고 이해하면 된다.

모델, Model

데이터를 가진 객체를 모델이라고 한다. 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있습니다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보에 의해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 비즈니스 로직, 내부 로직을 수행할 수 있다.

모델의 규칙

  • 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 함
  • 뷰나 컨트롤러에 대해서 어떠한 정보도 알지 말아야 함
  • 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 함

뷰, View

View는 화면을 그리는데 필요한 HTML/CSS/Javascript를 모아둔 컨테이너이다. 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어온다.

뷰의 규칙

  • 모델이 가지고 있는 정보를 따로 저장해서는 안 됨
  • 모델이나 컨트롤러와 같이 다른 구성 요소를 몰라야 함
  • 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 함

컨트롤러, Controller

사용자가 접근한 URL에 따라 사용자의 요청을 파악한 후에 그에 맞는 데이터를 Model을 의뢰(필요에 따라 가공)하고 데이터를 View에 반영해서 사용자에게 알려준다.

컨트롤러의 규칙

  • 모델이냐 뷰에 대해서 알고 있어야 함
  • 모델이나 뷰의 변경을 모니터링해야 함

Spring에서 MVC 다루기

@RequsetParam을 통해 쿼리 파라미터를 넘겨받는 컨트롤러(helloMvc 메서드)를 작성했다.
그리고 넘겨받은 쿼리 파라미터를 Model에 담고 있고, hello-template을 리턴하고 있다.

public class HelloController {
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
    }
}

hello-template에서는 컨트롤러로부터 넘겨받은 Model을 동적 페이지 렌더링에 사용하고 있다.

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
profile
現 두나무 업비트 QA 엔지니어, 前 마이리얼트립 TQA 엔지니어

0개의 댓글