[Spring] MVC 패턴

date:

Updated:


Categories:

Tags: , ,

MVC 패턴이란?

MDN Web Docs

MVC (Model-View-Controller) is a pattern in software design commonly used to implement user interfaces, data, and controlling logic.

즉, user interface, data, controlling logic을 구현하는데 일반적으로 사용되는 소프트웨어 설계의 패턴이다.
user interface(UI)는 View, data는 Model, controlling logic은 Controller에서 구현한다.
그러나 위 정의로는 MVC 패턴이 무엇인지 와닿지 않는다.

MVC 패턴의 동작

스크린샷 2024-03-26 오후 5 59 43

View

블로그를 MVC 패턴을 사용해 웹 어플리케이션을 만들었다고 가정해보자. 웹 사이트에서 블로그에 들어가면 어떤게 보이는가?
아마 일반적으로 포스팅한 글과 댓글이 보일 것이다.
이렇게 유저에게 보이는 곳이 바로 View이다.

Model

블로그 내에 있는 data들이 포스팅한 글인지, 댓글인지를 구분하기 위해 우리는 포스팅한 글을 post, 댓글을 comment 라는 data의 모음으로 나타낼 것이다.
즉, post에는 post1, post2, post3 …, comment에는 comment1, comment2, comment3 … 와 같은 형식으로 나타내질 것이다.
이런 방식으로 data를 정의하는 부분이 바로 Model이다.

Controller

웹사이트에서 post1을 삭제하는 버튼을 클릭했다고 가정해보자.
우리는 View에서 post1을 삭제하는 “명령”을 내렸고, 이 명령을 어디선가 처리해야한다.
이것을 처리하는 부분이 바로 Controller이다.

User가 View에서 post1을 삭제하라는 명령을 Controller로 보내고, Controller는 Model에 접근해 post의 post1을 삭제한다.
Model 내의 data의 구조가 바뀌었으니, View를 업데이트한다.
이렇게 Controller가 Model에 접근해서 Model이 View를 업데이트 하는 방법도 있지만, Controller가 직접 View를 업데이트 할 수도 있다.
예를들어, post를 시간에 대한 내림차순으로 정렬하는 경우에는 Model을 업데이트 할 필요없이 바로 View를 업데이트 하면 된다.

MVC 패턴의 이점

  • 동시 개발
    • 여러 개발자가 Model, Controller, View에 동시 작업할 수 있다.
  • 높은 응집도(cohesion)
    • MVC 패턴은 각 컴포넌트가 하나의 책임에 집중한다.
      • Model은 데이터의 정의, Controller는 비즈니스 로직 처리, View는 User Interface 구성
    • 응집도 : 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로, 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져 재사용이나 기능의 수정, 유지보수가 용이해진다.
  • 낮은 결합도(coupling)
    • MVC 패턴은 컴포넌트 간 의존성이 낮기에 낮은 결합도를 가진다.
    • 결합도 : 소프트웨어 모듈 간의 상호 의존성 정도로, 낮은 결합도는 모듈이 독립적이며 한 모듈의 변경 사항이 다른 모듈에 거의 영향을 미치지 않는다는 것을 의미한다.
  • 높은 응집도와 낮은 결합도
    • 재사용성이 높다.
    • 쉬운 수정이 가능하다.
    • 테스트가 쉽다.
    • 유지보수에 용이하다.

MVC 패턴의 단점

  • 코드의 복잡성 증가
  • 소규모 어플리케이션에는 적합하지 않음

MVC 패턴에서 지켜야 하는 것

“10분 테크톡 유튜브 - 제리의 MVC 패턴” 에서 5가지 규칙에 대해 설명한다.

  1. Model은 Controller와 View에 의존하지 않아야 한다.
  2. View는 Model에만 의존해야 하고, Controller에는 의존하면 안된다.
  3. View가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보여줘야 하는 데이터에 대해서만 받아야 한다.
  4. Controller는 Model과 View에 의존해도 된다.
  5. View가 Model로부터 data를 받을 때, 반드시 Controller에서 받아야 한다.

추후에 Spring boot project 예시와 함께 이 내용에 대한 부연설명을 하겠다.
나는 3번. 사용자마다 다르게 보여줘야 하는 데이터에 대해서만 받아야 한다는 사실에 의문이 든다.
블로그는 모든 사용자에게 동일하게 보여지는데, 그렇다면 Model에 data를 정의하지 않아도 되는것인가?
3번 규칙이 어떤 의도인지는 알겠는데, 이 표현이 맞는지는 고민을 해보아야 할 듯 하다.

MVC를 제외한 다른 소프트웨어 설계 패턴들

MVVM, MVP 등 여러가지 패턴들이 있다.

출처

Coupling and Cohesion – Software Engineering
Why MVC Architecture?
MVC
제리의 MVC 패턴

Leave a comment