MVC 디자인 패턴

devyumi·2023년 12월 6일
0

Spring

목록 보기
5/14

웹 개발 3가지 방법

  1. 정적 컨텐츠: 정적 페이지를 띄어주는 것

  2. MVC, 템플릿: 서버에서 jsp 등의 html을 동적 페이지로 띄어주는 것

  3. API: json으로 클라이언트에게 데이터를 전달하는 것




MVC 디자인 패턴

  • 어플리케이션을 Model, View, Controller로 구분한 디자인 패턴(=개발 방법론)

  • 사용자 인터페이스(html, jsp)와 비즈니스 로직(java, servlet)을 분리하는 것이 중점임


Model

  • View에 출력될 데이터 관리하는 부분

View

  • 클라이언트에게 보여지는 결과물

Controller

  • Model과 View를 연결하는 부분

  • Model에게 데이터를 요청하고, 반환 받은 데이터를 View에 반영함

  • Controller는 데이터 요청을 담당하며, Service 계층을 별도로 만들어 비즈니스 로직을 처리하도록 함


MVC 데이터 처리 순서

  1. 사용자가 웹 사이트에 접속
  2. Controller는 사용자가 요청한 웹 페이지의 데이터를 가져오기 위해 Model 호출
  3. Model은 Service(비즈니스 로직), Dao(DB 제어)를 거쳐 결과를 리턴
  4. Controller는 Model이 리턴한 결과를 View에 반영
  5. 사용자는 데이터가 반영된 View를 보게됨



장점

  • 개발 로직과 디자인 로직을 구분하여 개발함으로써 서로의 의존성을 낮춤

  • 기능의 세분화로 확장성이 좋고 유지보수에 용이함


단점

  • 프로젝트가 커질수록 Massive-View-Controller 현상 발생

1) 하나의 Controller에 수많은 View와 Model이 연결됨으로 Controller 부하가 커지게 됨

2) 자연스럽게 Model과 View의 의존성을 완전히 분리할 수 없게 됨

3) Controller에 중복, 불필요한 코드가 많아짐


가. forward, ViewPath 중복

request.getRequestDispatcher("/WEB-INF/guestbook/guestbooks.jsp");
rd.forward(request, response);

나. 불필요한 코드 중복
: HttpServlet을 상속 받으므로 불필요한 메서드 파라미터를 Override하게 됨

protected void doPost(HttpServletRequest request, HttpServletResponse response)

다. 공통 기능 처리 불가
: 로깅 처리를 위해 Controller마다 코드를 구현해야 하고 결국 중복 코드 발생


Massive-View-Controller



한계 극복

  • MVP, MVVP, Flux, Redux 등의 디자인 패턴 발생

  • Spring MVC 도입




출처

0개의 댓글

관련 채용 정보