MVC(Model-View-Controller) 정리

LeeJ·2023년 2월 13일
0

CS

목록 보기
2/11

MVC란?

모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

모델

  • 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 전달한다. 이와 같은 전달을 통해서 뷰는 사용자에게 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거, 수정할 수 있다. 어떤 MVC구현에서는 통보 대신 뷰나 컨트롤러가 직접 모델의 상태를 읽어 오기도 한다.

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

컨트롤러

  • 모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있다. 또한, 컨트롤러가 관련된 뷰에 명령을 보냄으로써 모델의 표시 방법을 바꿀 수 있다.
    _출처 - 위키피디아_

왜?

MVC의 핵심은 사용자 인터페이스의 분리로 비즈니스 로직을 쉽게 고칠 수 있다는 점이다.


각 파트의 설명

Model

  • 모델은 데이터와 어플리케이션이 무엇을 할지 내부 비즈니스 로직을 처리하는 역할을 한다.
  • 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일을 한다.
  • 데이터의 CRUD 역할을 수행
  • 사용자가 편집을 원하는 모든 데이터를 가지고 있어야 한다.
  • 뷰나 컨트롤러에 대해 어떤 정보도 알지 말아야 한다.
  • 변경이 일어나면, 해당 변경에 대한 처리방법을 구현해야한다.

View

  • 뷰는 사용자에게 보여지는 UI에 해당된다.
  • 사용자와 상호작용을 하며 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력한다.
  • MVC에는 여러개의 뷰가 존재할 수 있다.
  • 모델에서 받은 데이터를 별도로 저장하지 않는다.
  • 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
  • 모델이나 컨트롤러와 같이 다른 구성요소를 몰라야한다.
  • 변경이 일어나면 해당 변경에 대한 처리방법을 구현해야한다.

Controller

  • 컨트롤러는 모델과 뷰 사이를 이어주는 인터페이스 역할을 한다.
  • 모델이 데이터를 어떻게 처리해야할지 알려주는 역할을 한다.
  • 사용자로부터 뷰에 요청이 있으면 컨트롤러는 해당 업무를 수행하는 모델을 호출하고 모델이 업무를 처리하면 다시 결과를 뷰에 전달한다.
  • 모델, 뷰에 대해 알고 있어야 한다.
  • 모델, 뷰에 대해 모니터링 하고 있어야 한다.

구동 원리


MVC패턴은 Spring프레임워크와 JSP를 사용하는 웹 애플리케이션 개발에 많이 사용되고 있습니다. 이 때의 웹 애플리케이션에서의 MVC의 구동 원리는 다음과 같습니다.

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

장점

  • 단순하고 직관적이다.
  • 기능 별로 코드를 분리해서, 하나의 파일에 코드가 모이는 것을 방지하여 가독성과 코드 재사용성이 증가한다.
  • 기능별로 코드를 분리한다는 것은 결국 분업이 쉬워진다.

단점

  • 뷰와 모델 사이의 의존성이 높다
  • 뷰와 모델의 높은 의존성은 어플리케이션이 커질수록 복잡해지고, 오히려 유지보수가 어려워진다.
profile
헤응

0개의 댓글