-

모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다.
이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.
MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
출처: MVC - wikipediaModel, View, Controller
더보기Model
- Model 은 Data 와 애플리케이션이 무엇을 할지 정의하는 내부 비지니스 로직을 처리하기 위한 역할
- 즉, Data 를 가진 객체를 Model
- Model 의 상태에 변화가 있을 때 Controller 와 View 에 이를 통보
- Controller 는 Model 의 변화에 따른 데이터 추가, 삭제, 수정 가능.
규칙
- 사용자가 편집하기를 원하는 데이터를 모두 가지고 있어야 함
- View, Controller 에 대해 어떠한 정보도 알지 말아야함
- 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야 함
View
- 클라이언트 측 기술 HTML/CSS/Javascript 를 모아놓은 컨테이너 사용자가 볼 결과물을 생성하기 위해
Model 로부터 정보를 가져옴
- 즉, 사용자에게 보여주는 화면(UI)
- MVC 에서는 여러개의 View 존재 가능
- Model 에서 받은 데이터는 별도로 저장하지 않음
규칙
- Model 이 가지고 있는 정보를 따로 저장하면 안됨
- Model 이나 Controller 와 같이 다른 구성요소를 몰라야 함
- 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야함
Controller
- Controller 는 Model 과 View 사이를 이어주는 interface 역할
- 즉, Model 이 데이터를 어떻게 처리할지 알려주는 역할
- 사용자가 접근한 URL 에 따라 사용자의 요청을 파악 후 그 요청에 맞는 데이터를 Model 에 호출
업무를 모두 새항하면 결과를 다시 View 에 전달하는 역할
- Model 에 명령을 보냄으로써 View 의 상태 변경 가능 (워드 문서 편집)
- Controller 가 관련된 Model 에 명령을 보냄으로써 View 의 표시 방법 변경 가능 (문서 스크롤)
규칙
- Model 이나 View 에 대해 알고 있어야함
- Model 이나 View 의 변경을 모니터링 해야함
구동원리

MVC패턴은 Spring프레임워크와 JSP를 사용하는 웹 애플리케이션 개발에 많이 사용
이 때의 웹 애플리케이션에서의 MVC의 구동 원리 ↓
- 웹 브라우저가 웹 서버에 웹 애플리케이션 실행을 요청한다. (MVC 구조가 WAS라고 보면 된다.)
- 웹 서버는 들어온 요청을 처리할 수 있는 서블릿을 찾아서 요청을 전달한다. (Matching)
- 서블릿은 모델 자바 객체의 메서드를 호출한다.
- 데이터를 가공하여 값 객체를 생성하거나, JDBC를 사용하여 데이터베이스와의 인터랙션을 통해 값 객체를 생성한다.
- 업무 수행을 마친 결과값을 컨트롤러에게 반환한다.
- 컨트롤러는 모델로부터 받은 결과값을 View에게 전달한다.
- JSP는 전달받은 값을 참조하여 출력할 결과 화면을 만들고 컨트롤러에게 전달한다.
- 뷰로부터 받은 화면을 웹 서버에게 전달한다.
- 웹 브라우저는 웹 서버로부터 요청한 결과값을 응답받으면 그 값을 화면에 출력한다
출처: https://osy0907.tistory.com/63
MVC 장점
더보기- 기능별 코드를 분리하여 하나의 파일에 코드가 모이는 것을 방지(가독성과 코드 재사용 증가)
- 비즈니스 로직과 UI 로직을 분리하여 유지보수를 독립적으로 수행 가능
- 각 구성요소가 독립되어 있어 협업을 할 때 분업을 가능하게 해줌
- Model 과 View 가 다른 컴포넌트에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리
- 개발 후, 유지보수성과 확장성 보장
MVC 한계
더보기Model 과 View 는 서로 정보를 갖고 있지 않아 독립적인 상태지만 Controller 를 통해 소통하기 때문에 의존성이
완전히 분리될 수 없음. 그러므로 복잡한 대규모 프로그램의 경우 다수의 View, Model 이 Controller 를 통해
연결되기 때문에 복잡하게 연결되어 있는 상황과 함께 불필요하게 커지는 현상이 발생할 수 있음. (Massive-View-Controller)
이를 보안하기 위한 MVP, MVVM, Flux, Redux 등 다양한 패턴 존재.
MVC 패턴 요약
Model - 백그라운드에서 동작하는 비즈니스 로직(데이터) 처리
View - 정보를 화면으로 보여주는 역할.
Controller - 사용자의 입력 처리와 흐름 제어 담당. 화면과 Model과 View를 연결시켜주는 역할(참고)
https://opentutorials.org/course/697/3828
https://developer.mozilla.org/ko/docs/Glossary/MVC
'CS' 카테고리의 다른 글
HTTP 상태 코드 (100, 200, 300, 400, 500) (4) 2024.08.28 보일러플레이트란? (0) 2024.07.29