이번에 처음으로 백엔드 공부를 하고, 미니 프로젝트를 개발해보면서 알게된 MVC패턴에 대해 정리하고자 한다.
MVC 패턴이란?
MVC패턴은 말 그대로 디자인 패턴 중 한 종류이다.
소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 둔 디자인 패턴이며, Model, View, Controller 총 3개로 구성되어있다.

- 모델: 데이터와 비즈니스 로직을 관리한다. (Service, DTO, DAO, Repostitory 등등)
- 뷰: 레이아웃과 화면을 처리한다.
- 컨트롤러: 모델과 뷰로 명령을 전달한다. (전통적인 스프링에서는 Servlet이 컨트롤러의 역할을 한다.)
출처 ⬇️
MVC - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN
MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고
developer.mozilla.org
단순히 이론적으로 설명하면 이 관계에 대해 이해하기 어려운데, 조금 더 예시를 들어서 순차적으로 설명해보자면,
1. 사용자가 사이트에 접속하거나 버튼을 클릭하는 등의 이벤트를 발생시키면, 이러한 사용자의 Request는 Controller에게 전달된다.
2. Controller는 이러한 사용자의 Request를 분석한 후, 비즈니스 로직을 실행하기 위해 Model의 Service 클래스 메소드를 호출한다. 그리고 그 결과를 attribute에 담아 View로 전달한다.
이 때 Model의 메소드를 이용했더라도 MVC 패턴에 따르면 View와 Model은 철저히 분리되어야 하기 때문에, View의 업데이트는 Model이 직접하지 않고 Controller가 Model의 값을 받아와 필요한 데이터를 View에 전달해 업데이트한다.
3. View는 받은 데이터를 이용해 사용자에게 표시하기 위해 화면을 구성한다. 스프링에서 View는 JSP, Thymeleaf와 같은 템플릿 엔진을 통해 화면을 구성한다.
한 마디로 정리하면, View에서 이벤트를 발생시키면 이를 Controller가 감지해 Model의 메소드를 호출하고, 이 결과를 다시 View로 전달해 사용자에게 화면을 보여준다.
이러한 일들이 가능하게 하기 위해 각각 Controller, Model, View는 지켜야하는 규칙을 가지고 있다.
Controller
- Model이나 View에 대해서 알고 있어야 한다.
- Model이나 View의 변경을 모니터링 해야 한다.
Model
- 사용자가 편집하기를 원하는 모든 데이터를 가지고 있어야 한다.
- View나 Controller에 대해서 어떤 정보도 알지 말아야 한다.
- 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.
View
- Model이 가지고 있는 정보를 따로 저장해서는 안된다.
- Model이나 Controller와 같이 다른 구성요소들을 몰라야 한다.
- 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 한다.
MVC 모델의 장점
Model, View, Controller이 분리되어있기 때문에, 각각 맡은 역할의 코드만 집중해서 작성할 수 있다. 결국 코드에서 중요한 것은 협업이 가능한 코드다. 이러한 부분에서 MVC패턴을 이용하면 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩 또한 사라지기 때문에 협업이 쉽고 지속 가능한 개발이 가능한 것이다.
MVC 모델의 한계점
Controller가 Model과 View 사이의 데이터 전달을 담당하기 때문에 복잡한 대규모 프로그램의 경우 너무 많은 View와 Model이 Controller를 통해 연결되어 컨트롤러가 불필요하게 커지는 현상이 발생하게 될 수 있다. 이러한 현상을 Massive-View-Controller라고 한다.
그래서 이러한 한계를 보완하기 위해 MVP, MVVM, Flux, Redux등의 다양한 디자인 패턴들이 생겨났다.
Spring Boot
이러한 MVC 패턴을 자동화하여 제공해주는 것이 바로 Spring Boot이다. MVC와 관련된 의존성 관리를 쉽게 해주고, Spring MVC, Jackson, Tomcat 등 웹 애플리케이션 개발에 필요한 기본적인 라이브러리도 처음부터 포함되어있다.
또한 Spring Boot는 RESTful API를 개발하기 위한 @RestController와 JSON 처리 기능을 제공한다.
한마디로 Spring Boot는 MVC 패턴을 쉽게 구현할 수 있도록 설계된 프레임워크로, 자동 설정, 간편한 의존성 관리, RESTful API 지원, 다양한 템플릿 엔진과의 통합, 쉬운 설정 관리 및 테스트 지원 등을 제공한다. 이를 통해 개발자는 MVC 아키텍처를 기반으로 한 웹 애플리케이션을 효율적으로 개발할 수 있다.
'backend' 카테고리의 다른 글
| [Spring-Boot] 마니또 커뮤니티 서비스 회고 (3) - SpringBoot ec2로 배포하기 (2) | 2024.09.02 |
|---|---|
| [Spring-Boot] 마니또 커뮤니티 서비스 회고 (2) - Spring-Boot로 서비스 개발 (1) | 2024.08.26 |
| [Spring-Boot] 마니또 커뮤니티 서비스 회고 (1) - 개발 시작 전 (2) | 2024.08.16 |