MVC패턴이란?

kiki97 ㅣ 2022. 10. 13. 19:27

반응형

MVC패턴이란?

모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다.

어플리케이션을 세 개의 영역으로 분할하고 각 구성 요소에게 고유한 역할을 부여하는 개발 방식

MVC패턴을 도입하면 도메인(비즈니스 로직)영역과 UI영역이 분리되므로 서로 영향을 주지 않고 유지보수가 가능하다.

디자인패턴이란?
프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인 문제를 정리해 재사용하기 좋은 형태로
특정 규약을 만들어서 정리한것. 즉, 효율적인 코드를 만들기 위한 방법론

📲 모델(Model)

DATA, 정보들의 가공을 책임지는 컴포넌트

모델은 어플리케이션의 정보, 데이터를 나타낸다. 데이타베이스, 처음의 정의하는 상수, 초기화 값, 변수 등을 뜻한다.

비즈니스 로직을 처리한 후 모델의 변경사항을 컨트롤러와 뷰에 전달한다.

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

🖥️ 뷰(View)

사용자에게 보여지는 부분, 유저 인터페이스를 의미한다.

MVC패턴은 여러 개의 뷰(View)가 존재할 수 있으며, 모델에게 질의하여 데이터를 전달받는다.

뷰는 받은 데이터를 화면에 표시해주는 역할을 가지고 있다. 사용자가 화면에 표시된 내용을 변경하게 되면

모델에게 전달하여 모델을 변경해야한다.

뷰는 다음과 같은 규칙을 가지고 있다.
모델이 가지고 있는 정보를 따로 저장해서는 안된다.
모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.
변경이 일어나면 변경통지에 대한 처리방법을 구현해야한다.

🕹️ 컨트롤러(Controller)

모델과 뷰 사이를 이어주는 브릿지 역할을 의미한다.

모델이나 뷰는 서로의 존재를 모르고 있다. 변경 사항을 외부로 알리고 수신하는 방법만 있는데, 컨트롤러는 이를 중재하기 위해 모델과 뷰에 대해 알고 있어야 한다. 모델이나 뷰로부터 변경 내용을 통지 받으면 이를 각 구성 요소에게 통지해야한다. 사용자가 어플리케이션을 조작하여 발생하는 변경 이벤트들을 처리하는 역할을 수행한다.

컨트롤러는 다음과 같은 규칙을 가지고 있다.
모델이나 뷰에 대해서 알고 있어야한다.
모델이나 뷰의 변경을 모니터링 해야한다.

MVC 패턴흐름

 

  • 사용자가 웹 사이트에 접속
  • 컨트롤러는 사용자가 요청한 웹페이지를 서비스하기 위해서 모델을 호출
  • 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후 그 결과를 리턴
  • 컨트롤러는 모델이 리턴한 결과를 뷰에 반영(Updates)
  • 데이터가 반영된 View는 사용자에게 보여짐

MVC 패턴방식

MVC패턴에는 모델1 방식과 모델2 방식이 있다.

  • 모델 1 방식 : JSP에서 출력과 로직을 전부 처리
  • 모델 2방식 : JSP에서 출력만 처리

 

Model1

 

https://cocoon1787.tistory.com/733

모델1방식은 컨트롤러 영역에 뷰영역을 같이 구현하는 방식이며, 사용자의 요청을 JSP가 전부 처리한다.

요청을 받은 JSP는 JavaBean Service Class를 사용하여 사용자가 요청한 작업을 처리하고 그 결과를 출력

Model1 방식으로 웹서비스를 개발하는 사례는 백엔드와 프론트엔드의 역할 분담이 모호해져
협업이 쉽지 않으며 실제 서비스들 중에서 거의 없다고 봐도 무방하다.

 

Model2

 

https://cocoon1787.tistory.com/733

모델2 방식은 사용자의 요청을 서블릿이 받고 서블릿은 해당 요청으로 View로 보여줄 것인지 Model로 보낼 것인지를 판단하여 전송한다. 또한 모델2 방식의 경우 HTML소스와 JAVA소스를 분리해놓았기 때문에 모델1 방식에 비해 확장시키기도 쉽고 유지보수 또한 쉽다.


출처

https://junhyunny.github.io/information/design-pattern/mvc-pattern/

https://cocoon1787.tistory.com/733

[개념은 호옹~, 실습 빡] 스프링 부트, 입문!