[디자인 패턴] MVC 패턴

James·2023년 7월 25일
1
post-thumbnail

MVC 패턴이란 ?


개념: Model-View-Controller의 약자로 애플리케이션을 세가지로 구분한 개발 방법론

Model

데이터를 다루는 부분. 비즈니스 로직을 포함한다.

모델의 규칙

  • 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 함
  • 뷰나 컨트롤러에 대해서 어떠한 정보도 알지 말아야 함
    변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 함

View

레이아웃과 화면을 보여주는 역할

뷰의 규칙

  • 모델이 가지고 있는 정보를 따로 저장해서는 안됨
  • 모델이나 컨트롤러와 같이 다른 구성 요소를 몰라야 함
  • 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 함

Controller

:사용자의 명령을 받아 Model과 View 부분을 이어주는 역할

컨트롤러의 규칙

모델이나 뷰에 대해서 알고 있어야 함
모델이나 뷰의 변경을 모니터링해야 함


과정 (Process)


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

MVC 패턴을 사용해야 하는 이유

  • 비즈니스 로직과 UI로직을 분리하여 유지보수를 독립적으로 수행가능
  • Model과 View가 다른 컴포넌트들에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리함
  • 중복 코딩의 문제점 제거

MVC 장단점


장점

분리된 관심사

  • 각각 애플리케이션이 맡은바에만 집중할 수 있다.
  • 각 컴포넌트의 독립적인 개발과 테스트를 가능하게 한다.
  • 가독성과 유지보수성 증가
  • 재사용성과 확장성이 증가한다.
  • 병렬적으로 각기 개발 가능

단점

  • 복잡성으로 인해 MVC 패턴에 대한 이해가 필요하다.
  • 여러 파일과 클래스로 분하라기 때문에 코드 네비게이션이 많이 필요. 코드를 추적하고 디버그하는데 어려움 초래 가능
  • 컨트롤러를 통해 소통을 하기 떄문에 의존성이 완전히 분리될 수 없다.

MVC 패턴 방식


모델 1 방식

개념: JSP에서 출력과 로직을 전부 처리

JSP란?
JSP 란 JavaServer Pages 의 약자이며
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.

Model 1 방식으로 웹서비스를 개발하는 사례는 백엔드와 프론트엔드의 역할 분담이 모호해져 협업이 쉽지 않으며 실제 서비스들 중에서 거의 없다고 봐도 무방합니다.

자세한 설명

Controller 영역에 View 영역을 같이 구현하는 방식이다.
사용자의 요청을 JSP가 전부 처리합니다.
요청을 받는 JSP는 JavaBean Service Class를 사용하여 웹브라우저 사용자가 요청한 작업을 처리하고 그 결과를 출력한다.

모델 2 방식

개념: JSP에서 출력만 처리

자세한 설명

모델 2 방식은 웹브라우저 사용자의 요청을 서블릿이 받고 서블릿은 해당 요청으로 View로 보여줄 것인지 Model로 보낼 것인지를 판단하여 전송합니다. 또한 모델 2 방식의 경우 HTML 소스와 JAVA소스를 분리해놓았기 때문에 모델 1 방식에 비해 확장시키기도 쉽고 유지보수 또한 쉽습니다.


MVC 패턴의 한계

  • MVC패턴에서 View는 Controller에 연결되어 화면을 구성하는 단위 요소이므로 다수의 View를 가질 수 있습니다.
  • 그리고 Model은 Controller를 통해서 View와 연결되지만, Controller에 의해서 하나의 View에 연결될 수 있는 Model도 여러 개가 될 수 있어 View와 Model이 서로 의존성을 띄게 됩니다.
  • 즉, Controller에 다수의 Model과 View가 복잡하게 연결되어 있는 상황이 발생할 수 도 있습니다.

Reference & Additional Resources

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글