디자인패턴
∙ 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴
∙ 디자인 패턴을 참고하여 개발할 경우 개발의 효율성과 유지보수성, 운용성이 높아지며 프로그램의 최적화에 도움이 됨
∙ MVC 패턴은 디자인 패턴 중 하나
MVC란?
Model, View, Controller의 약자

처리 순서
1. 사용자의 요청(request)을 controller가 받음
2. controller는 처리한 데이터를 model에 저장
3. Model에 저장된 데이터를 바탕으로 View를 제어해서 사용자에게 전달
Model
∙ 어플리케이션의 정보, 데이터를 나타냄
∙ 데이터베이스, 처음 정의하는 상수, 초기화 값, 변수 등을 뜻함
∙ 이러한 Data 정보들의 가공을 책임지는 컴포넌트
∙ Model은 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 함
∙ 데이터 변경이 일어났을 때 Model에서 View를 참조하는 내부 속성값을 가지면 안됨
∙ 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 함
View
∙ input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타냄
∙ 데이터 및 객체의 입출력을 담당
∙ 데이터를 기반으로 사용자들이 볼 수 있는 화면
∙ Model이 가지고 있는 정보를 따로 저장해서는 안됨
∙ 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 함
Controller
∙ 데이터와 사용자 인터페이스 요소들을 잇는 다리역할
∙ 사용자가 데이터를 클릭하고, 수정하는 것에 대한 '이벤트'들을 처리하는 부분
∙ Model 이나 View에 대해 알고있어야 함
∙ Model 이나 View의 변경을 모니터링해야 함
∙ Model 이나 View의 변경 통지를 받으면 이를 해석해서 각각의 구성 요소에게 통지해야함
MVC 패턴은 크게 2가지 방식(Model1, Model2)으로 나뉜다.
Model 1

∙ Java 파일과 <Tag>를 Html에 모두 작성해서 개발
∙ JSP가 모든 요청을 다 처리
∙ 빠르게 개발할 수 있음
∙ 프로젝트 규모가 커질수록 코드가 복잡해져 유지보수가 힘들어짐
Model 2

∙ 처리해야 할 역할을 Model, View, Controller가 모두 나눠서 처리
∙ Controller는 RequestMapping을 통해 URL을 확인 후 View에 던져줄지, Service로 들어가 추가적인 작업을 할 지 결정
∙ Html과 Java를 분리하여 처리하기 때문에 Model 1에 비해 확장성과 유지보수성이 좋아짐
∙ 대부분의 spring 프로젝트들이 이 구조를 따름
Spring MVC Framework
Spring MVC Framework는 MVC 패턴을 따르면서 Spring 만의 독자적인 Class를 통해 처리를 한다.

동작 순서
1) Cilent로부터 요청이 들어오면 DispatcherServlet이 호출됨
2) DispatcherServlet은 받은 요청을 HandlerMapping에게 던져줌 - 요청받은 URL 분석 - 적합한 Controller을 선택하여 반환
3) DispatcherServlet은 다음으로 HandlerAdapter를 호출 - HandlerAdapter는 해당하는 Controller중 요청한 URL에 맞는 적합한 Method를 찾아줌
4) Controller는 Business Logic을 처리하고, 해당하는 결과를 View에, 전달할 객체를 Model에 저장함
5) DispatcherServlet은 ViewResolver를 호출하려 Controller가 리턴한 View name을 기반으로 적합한 View를 찾아줌
7) DispatcherServlet은 View 객체에 처리결과를 넘겨 최종 결과를 보여주도록 요청
8) View 객체는 해당하는 View를 호출하며, View는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리하고 Client에게 넘겨줌
[Spring] MVC 패턴 & Spring Framework MVC
[해당 포스트는 개인적으로 공부를 하고 차후에 참고용으로 하고자 작성한 것입니다. 따라서 잘못된 부분이나 부족한 부분이 있을 수 있기에 참고하시기 바랍니다.] Spring Framework로 웹 개발을 할
aridom.tistory.com
'Framework(Library) > Spring(Springboot)' 카테고리의 다른 글
[스프링부트 입문] 시리즈 #02 정적페이지 만들고 화면 띄우기 (0) | 2023.08.31 |
---|---|
[스프링부트 입문] 시리즈 #01 프로젝트 생성하기 (0) | 2023.08.30 |
[Spring] 빌드 관리 도구 : Maven과 Gradle의 차이 (0) | 2023.08.23 |
스프링 빈(Spring Bean)이란? (0) | 2023.08.04 |
[SpringBoot] 이클립스에서 Test Case 만들기 (0) | 2023.07.27 |