본문 바로가기
IT 개인 공부/Web

MVC 패턴

by Libi 2021. 7. 23.
반응형

요새 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 공부하고 있는데 간단한 웹 애플리케이션을 개발하는데 클래스들을 체계적으로 분리해서 개발을 진행하는 것을 볼 수 있었다.

상당히 낯선 방식이라 궁금해서 찾아봤더니 스프링을 이용한 웹 애플리케이션은 기본적으로 MVC라는 디자인 패턴을 토대로 설계 및 개발한다는 것을 알게 되었다. 책의 내용을 우선 따라 해보는 것도 좋지만 왜 저렇게 나눠서 관리하는지에 대한 의문이 들어서 한번 공부 및 정리해 보려 한다.

MVC는 Model-View-Controller의 약자로써 애플리케이션을 3가지 역할로 분리해서 개발하는 방법을 뜻한다. MVC 패턴을 알아보기 전에 왜 역할을 분리해서 개발을 하는 것일까? 이는 많은 이유가 있겠지만 개발 및 유지 보수가 편리하기 때문이다.

일을 할 때 무작정 진행하는 것보다 역할을 분할해서 진행하는 것이 훨씬 효율적이다. 이처럼 애플리케이션을 개발할 때도 여러 가지 기능들을 한 곳에서 처리하는 것보다 기능의 역할에 따라 분리하여 처리하도록 하는 것이 훨씬 효율적일 것이다.

또한, 역할들을 분리하면서 역할들 간의 의존성을 줄이도록 설계한다면 개발하기가 편리할 것이다.

예를 들어 View의 기능과 Controller의 기능이 서로 직접적으로 알지 못하도록 설계했다면 후에 View의 내용을 변경하여도 Controller에는 영향을 끼치지 않기 때문에 내용을 수정할 필요가 없다.

즉, 애플리케이션을 프론트엔드/백엔드 영역으로 나눠서 개발하더라도 서로에게 영향을 주지 않게 되므로 서로의 역할만 집중해서 개발할 수 있는 장점이 있다.

이러한 이유 때문에 웹 애플리케이션을 개발할 때 기본적으로 MVC 패턴을 사용하는 것이다. MVC 패턴을 사용하는 이유를 알았으니 MVC 패턴에 대해서 알아보자.

 

MVC 패턴의 Model, View, Controller는 다음과 같이 동작한다.

  • 사용자가 애플리케이션의 Controller를 조작하면 Controller는 Model에게 요청에 맞는 Data를 요청한다.
  • Model은 연동된 Database를 통해 적합한 Data를 Controller에게 전달한다.
  • Controller는 수신한 Data를 View에게 전달한다.
  • View는 수신한 Data를 토대로 만든 화면을 사용자에게 보여준다.

그렇다면 각 역할에 대해서 하나씩 알아보자.

1. Model

비즈니스 로직을 구현하는 영역으로 애플리케이션에 사용되는 모든 데이터를 의미한다. Model은 Controller, View에 대한 정보가 전혀 없다.

단지, Data를 반환하거나 설정하는 역할만 수행한다.

2. View

인터페이스를 표현하는 영역으로 사용자가 어떤 서비스를 요청하면 그에 알맞은 Data를 Controller에게 전달받아 요청한 서비스를 화면에 출력해 주는 역할을 한다.

View는 별도의 Data를 가지고 있지 않는다. 모든 데이터는 Model과 Controller를 통해 전달받는다.

3. Controller

사용자가 어떤 서비스를 요청했을 때, 그 요청에 대해 수행하는 Model 컴포넌트를 호출한다. 또한 Model에서 처리한 Data를 View에게 전달하는 역할을 한다.

일종의 Model과 View의 다리 역할을 해주는 조정자로써 이로 인해 Model과 View는 다른 영역에 대해서 알지 못해도 애플리케이션은 정상적으로 수행되는 것이다.

다리 역할을 해주기 때문에 Controller는 Model과 View에 대해 알고 있어야 한다.

MVC 패턴이 뭔지 알았으니 다음에는 Spring에서의 MVC 패턴에 대해서 알아보자.

반응형

'IT 개인 공부 > Web' 카테고리의 다른 글

웹 서버(Web Server) vs WAS(Web Application Server)  (0) 2021.07.24
HTTP 메서드  (0) 2021.07.24
쿠키(Cookie) vs 세션(Session)  (0) 2021.07.24
HTTP 상태 코드  (0) 2021.07.23
HTTP vs HTTPS  (0) 2021.07.23

댓글