Javadocs

#3. MVC 패턴이란? (Model-View-Controller) 본문

SelfStudy/CS 기술 정리

#3. MVC 패턴이란? (Model-View-Controller)

Javatist 2023. 3. 18. 18:28

MVC 패턴

1. MVC 패턴?

MVC란 (Model-View-Controller)의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다. 위 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 데이터를 바탕으로 View를 통해 시작적 표현을 제어하여 사용자에게 전달하게 된다.

MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

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

위 개념을 WEB에 적용 시!

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

2. MVC패턴 방식

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

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

* Model 1

Model 1

Model 1 방식은 Controller 영역에 View 영역을 같이 구현하는 방식이며, 사용자의 요청을 JSP가 전부 처리한다. 요청을 받은 JSP는 JavaBean Service Class를 사용하여 웹브라우저 사용자가 요청한 작업을 처리하고 그 결과를 출력한다.

* Model 2

Model 2

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

# Model 1 vs Model 2

  Model 1 Model 2
장점 빠르고 쉽게 개발 가능 디자이너와 개발자의 분업이 가능하며
유지보수 및 확장이 쉬움
단점 JSP파일이 너무 비대해지며 Controller와 View가
혼재하므로 향후 유지보수에 어려움
설계가 어려우며 개발 난이도가 높음

 

1. 모델 (Model)

데이터를 가진 객체를 모델이라고 지칭한다. 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거, 수정할 수 있다. 즉, 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 연관된 비즈니스 로직을 처리하는 역할을 한다. 

모델(Model)의 규칙 

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

2. 뷰(View)

View는 클라이언트 측 기술은 HTML / CSS / JavaScript들을 모아둔 컨테이너이다. 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어온다. MVC에서 여러개의 View가 존재할 수 있고, Model에서 받은 데이터는 별도로 저장하지 않는다. 

뷰(View)의 규칙 

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

3. 컨트롤러 (Controller)

Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 한다. 즉, Model이 데이터를 어떻게 처리할 것인지 알려주는 역할을 한다. 사용자가 접근한 URL에 따라 사용자의 요청사항을 파악한 후 그 요청에 맞는 데이터를 Model을 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려준다.

컨트롤러(Controller)의 규칙 

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

# MVC 구동 원리

MVC 구동 원리

MVC 패턴은 Spring 프레임워크와 JSP를 사용하는 웹 애플리케이션 개발에 많이 사용되고 있다. 

  1. 웹 브라우저가 웹 서버에 웹 애플리케이션 실행을 요청. (MVC 구조가 WAS*라고 보면 된다.)
  2. 웹 서버는 들어온 요청을 처리할 수 있는 서블릿을 찾아서 요청을 전달.(Matching)
  3. 서블릿은 모델 자바 객체의 메서드를 호출한다.
  4. 데이터를 가공하여 값 객체를 생성하거나, JDBC를 사용하여 데이터베이스와의 인터렉션을 통해 값 객체를 생성한다.
  5. 업무 수행을 마친 결과값을 컨트롤러에게 반환.
  6. 컨트롤러는 모델로부터 받은 결과값을 View에게 전달
  7. JSP는 전달받은 값을 참조하여 출력할 결과 화면을 만들고 컨트롤러에게 전달.
  8. 뷰로부터 받은 화면을 웹 서버에게 전달
  9. 웹 브라우저는 웹 서버로부터 요청한 결과값을 응답받으면 그 값을 화면에 출력한다.

출처 : https://velog.io/@seongwon97


# MVC패턴을 사용해야 하는 이유

  1. 비즈니스 로직과 UI로직을 분리하여 유지보수를 독립적으로 수행 가능
  2. Model과 View가 다른 컴포넌트들에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리하다.
  3. 중복 코딩의 문제점 제거

# MVC패턴의 한계

MVC패턴에서 View는 Controller에 연결되어 화면을 구성하는 단위 요소이므로 다수의 View를 가질 수 있다. 그리고 Model은 Controllerfmf 통해서 View와 연결되지만, Controller에 의해서 하나의 View에 연결될 수 있는 Model도 여러 개가 될 수 있어 View와 Model이 서로 의존성을 띄게 된다. 즉, Controller에 다수의 Model과 View가 복잡하게 연결되어 있는 상황이 발생할 수 도 있다.


** MVC 패턴 요약 **

Model - 백그라운드에서 동작하는 비즈니스 로직(데이터) 처리

View - 정보를 화면으로 보여주는 역할

Controller - 사용자의 입력 처리와 흐름 제어 담당. 화면과 Model과 View를 연결시켜주는 역할

 

출처 : https://cocoon1787.tistory.com/

'SelfStudy > CS 기술 정리' 카테고리의 다른 글

GET vs POST  (0) 2023.04.14
#8. Rest API란?  (0) 2023.03.26
#7. @Controller 와 @RestController 차이  (0) 2023.03.25
#5. WEB과 WAS의 차이  (0) 2023.03.19
Comments