디스토피아

MVC 패턴 본문

정보·기타/it

MVC 패턴

늘그랬듯이 2023. 1. 10. 11:21
반응형

 

 

모델(Model), 뷰(View), 컨트롤러(Controller)

 

 

MVC 구조를 설명하는 도식

   

 

 

  

  

 

 

 

 

 

 

사용자(User)가 기기(Web Browser, 어플리케이션)등을 통해, 
controller를 조작(Input, 요청, Request)하면, 
controller은 model를 통해 데이터를 가져오고 그 정보를 바탕으로 
시각적으로 표현하는 view를 제어하여, 
사용자에게 보일 수 있도록 전달하게 됩니다.

 

실질적인 형태 

 

  • 목적
용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나
그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.

 


역할 설명


모델 , Model

 

애플리케이션이 "무엇" 을 할 것인지 정의하는 역할, 백그라운드에서 동작하는 내부 로직을 처리한다.

애플리케이션의 정보, 데이터를 나타내고 데이터나 정보들의 가공을 책임진다.

 

어떠한 동작을 수행하는 코드를 말한다. 표시 형식에 의존하지 않는다. 

사용자에게 어떻게 보일 지에 대해 신경 쓰지 않아도 된다. 

순수하게 public 함수로만 이루어진다. 몇몇 함수들은 사용자의 질의(query)에 대해 상태 정보를 제공하고 나머지 함수들은 상태를 수정한다.

 

모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 

이와 같은 통보를 통해서 뷰는 최신의 결과를 보여줄 수 있고, 

컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가·제거·수정할 수 있다. 

어떤 MVC 구현에서는 통보 대신 뷰나 컨트롤러가 직접 모델의 상태를 읽어오기도 한다.

 

데이터를 처리(값, 상태 및 각종 기능)하는 역할을 담당한다.

컨트롤러에서 명령을 받고 DB의 데이터를 CRUD하는 비즈니스 로직을 수행한다.

 

Model 세 가지 규칙

1) 사용자가 편집하길 원하는 모든 데이터를 갖고있어야 한다.
2) ViewController 에 대한 어떤 정보도 알고 있으면 안된다.
3) 모델 변경 요청이 발생하면, 변경에 대한 처리 방법을 구현해야한다.
    모델은 재사용이 가능해야하며, 다른 인터페이스에서도 변하지 말아야 한다.

  • 비즈니스 로직 처리 : *.java 클래스 / JavaBean DAO, DTO, action, Service, VO

 


뷰 , View

 

모델에서 만들어진 "무엇"을 사용자에게 보여주기 위한 역할

기본적으로 페이지 상에서 볼 수 있는 input텍스트, 체크박스 항목, 이미지 등등 사용자 인터페이스 요소

클라이언트 측 기술인 html/css/javascript들을 모아둔 컨테이너

사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어 온다.

MVC에서 모델은 여러 개의 뷰(view)를 가질 수 있다. 

뷰는 모델에게 질의를 하여 모델로 부터 값을 가져와 사용자에게 보여준다.

프론트의 영역으로, 데이터를 출력하는 영역을 말한다.

  • 화면 내용 보여주기 : JSP / *.html / *.jsp

 


컨트롤러 , Controller

 

모델을 "어떻게" 처리를 할 것이지 제시해 주는 역할

데이터와 사용자 인터페이스 요소들을 잇는 다리 역할

 

사용자 입력을 하거나 어떠한 동작을 수행 시 사용자가 접근한 url을 따라 요청을 파악 후, 

그에 맞은 데이터를 Model에 의뢰하고, 데이터를 view에 반영할 수 있게 한다.

 

사용자가 접근 한 URL에 따라서 사용자의 요청 사항을 파악한 후에 

그 요청에 맞는 데이터를 Model에 의뢰하고, 

데이터를 View에 반영해서 사용자에게 알려준다. 

 

모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있다. (예: 워드 프로세서에서 문서를 편집하는 것) 

또, 컨트롤러가 관련된 뷰에 명령을 보냄으로써 모델의 표시 방법을 바꿀 수 있다. (문서를 스크롤하는 것)

  • 요청을 받아 View와 Model 사이 흐름 제어 : Servlet / *.jsp / 스프링

 

 


 

  • 참고사항 

Observer Pattern
하나의 Model에 다양한 View를 두어 상태가 변할 때 그 모델을 구독하는 객체들이 자동으로 갱신 됨

Mediator Pattern
Observer Pattern에서 M:N 관계가 많이 생성되면 전체가 복잡해지기 때문에,
중간에 중재자(Mediator)를 두어 이벤트가 발생하고 전달하는 것을 단순화 함 

 

  • 부록

MVC1
뷰, 컨트롤러를 같이 처리한다. 빠르게 여러기능을 한 곳에서 다 처리해버리는 것처럼 역할 분담을 하지 않음.
>>> 단순로직처리 

MVC2
기능별로 뷰, 컨트롤러를 나누어 작업한다. 나중의 유지보수를 편하게 할 수 있다. 

비지니스 로직
컴퓨터 프로그램에서 실세계의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분

디자인패턴 종류

 

CI의 MVC 규칙
일반적으로 CI의 모델은 데이터베이스 테이블에 대응된다. 
이를테면 Topic이라는 테이블은 topic_model이라는 Model을 만든다. 
그런데 이 관계가 강제적이지 않기 때문에 규칙을 일관성 있게 정의하는 것이 필요하다.
 아래는 CI에서 Controller과 Model과 View 간의 관계를 시각화한 것이다. 

 

 

 

 

  • 출처 

https://opentutorials.org/course/697/3828

https://blog.naver.com/sorkelf/40136444536

https://blog.naver.com/internal_c/222146694484

https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC

https://blog.naver.com/wuslp/222440215924

https://blog.naver.com/akrhkdtks/222361480000

반응형
Comments