본문 바로가기
코딩 공부/web & Java

[Web] MVC패턴

by 현장 2022. 11. 10.

MVC 패턴

Model-View-Controller의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론입니다. 아래의 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 데이터를 바탕으로 View를 통해 시각적 표현을 제어하여 사용자에게 전달하게 됩니다.

오픈듀토리얼스

이러한 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시작적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있게 됩니다.

MVC패턴 방식 

1. Model 1 

→ JSP에서 출력과 로직을 전부 처리

2. Model 2

→ JSP에서 출력만 처리

※ Model1 vs Model2

  Model 1  Model 2
장점 빠르고 쉽게 개발 가능 디자이너와 개발자의 분업이 가능하며 유지보수 및 확장이 쉬움
단점 JSP파일이 너무 비대해지며 Controller와 View가 혼재하므로 향후 유지보수에 어려움 설계가 어려우며 개발 난이도가 높음

모델 (Model)

데이터를 가진 객체를 모델이라고 지칭합니다. 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있습니다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보합니다. 이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거, 수정할 수 있습니다.

모델의 규칙

1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 한다.

2. 뷰나 컨트롤러에 대해서 어떠한 정보도 알지 말아야 한다.

3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다.

 

뷰 (View)

View는 클라이언트 측 기술은 HTML/CSS/Javascript들을 모와둔 컨테이너입니다.  다시 말해 데이터 및 객체의 입력, 그리고 보여주는 출력과 같은 용자 인터페이스 요소를 나타냅니다.

 

1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.

2. 모델이나 컨트롤러와 같이 다른 구성 요소를 몰라야 한다.

3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다.

 

컨트롤러 (Controller)

데이터와 사용자인터페이스 요소들을 잇는 다리역할을 합니다. 사용자가 접근한 URL에 따라 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model을 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려줍니다.

컨트롤러의 규칙

1. 모델이냐 뷰에 대해서 알고 있어야 한다.

2. 모델이나 뷰의 변경을 모니터링해야 한다.


 Spring Boot에서의 MVC

  1. 브라우저 특정 URL에 요청을 DispathcherServlet이 받음.
  2. DispatcherServlet이 URI을 보고 controller 식별하기 위해 핸들러 매핑과 통신
  3. 핸들러 매핑은 요청을 처리하는 특정 핸들러 메서드 반환. (Controller 특정 메서드)
  4. DispatcherServlet은 특정 핸들러 메서드 호출. (public String 특정메서드 (Model model) 호출)
  5. 핸들러 메서드는 모델과 뷰를 반환. (public String 특정메서드 (Model model) { return “view”; })
  6. DispatcherServlet 논리적 뷰 “view” 결정하는 뷰 리졸버 찾아 호출 (논리적 뷰 이름입력)
  7.  뷰 리졸버는 논리적 뷰 이름을 물리적 뷰 이름에 매핑하는 로직 실행 (/template/view.html으로 변환)
  8. DispatcherServlet은 뷰 실행 -> 뷰에서 model객체 사용할 수 있게 함.
  9. 뷰는 DispatcherServlet으로 보내질 내용을 반환
  10. DispatcherServlet은 응답을 다시 브라우저로 보냄


MVC 패턴 사용 이유

1, 비즈니스 로직과 UI로직을 분리하여 유지보수를 독립적으로 수행가능합니다.

2. Model과 View가 다른 컴포넌트들에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리합니다.

3. 중복 코딩의 문제점 제거합니다.

'코딩 공부 > web & Java' 카테고리의 다른 글

[Java/JSP] EL(Expression Language)  (0) 2022.11.12
[Java] HttpServletRequest와 HttpServletResponse  (0) 2022.11.11
[Web] Forward와 Redirect  (0) 2022.11.05
[Java] Servlet  (0) 2022.11.04
[Web] 브라우저 렌더링  (0) 2022.11.01