MVC란?
- 하나의 프로젝트를 구성할 때 구성요소를 Model, View, Controller의 세가지의 역할로 구분
구성요소
: Model + View + Controller
Model
- 어떠한 동작을 수행하는 코드
-> Application이 어떤 동작을 할 것인지 ?
-> 보통 DB 테이블에 대응됨
View
- 모델에게 질의해 모델로부터 값을 가져와 사용자에게 보여주기
-> 입출력 과정 및 결과
Controller
- 사용자 요청에 맞는 데이터를 Model에 요청, 데이터를 View에 반영
-> 모델이 어떻게 처리할 지 정의?
장점과 단점
장점
- 유연하고, 확장하기가 쉽다.
- 모델-뷰-컨트롤러를 구분해서 개발함으로 동시 다발적인 개발이 가능하다.
단점
- Model과 View 사이의 의존성이 높다.
- 설계 단계에서 클래스가 많아져 구조가 복잡해질 수 있다.
MVC1과 MVC2
MVC1
: View와 Controller를 전부 JSP가 담당
MVC2
: MVC1과 다르게 Controller와 View가 분리!
-> 요청의 결과를 보여주는 뷰만 JSP가 담당하고, 컨트롤러의 역할은 서블릿이 담당
스프링에서의 MVC
스프링은 DispatcherServlet이 Front Controller의 역할을 한다. 이때 Front Controller란, 우선적으로 유저의 모든 요청을 받고, 그 요청을 분석하여 세부 컨트롤러에게 나누어주는 역할!
모델은 DAO, DTO, Service로 나뉨
전체적인 흐름은
- REST API에 의해 URL 호출을 받는다.
- Controller가 요청사항을 파악한다.
- 상속받고 있는 서비스가 비즈니스 로직을 수행하러 간다.
- 서비스는 이 로직을 처리하기 위해 DAO에 메소드를 호출하고, DAO는 DB에 접근해서 데이터를 조작한 뒤 결과를 다시 서비스에게 전달한다.
- 서비스는 View에 이 결과를 리턴한다.
와 같다.
스프링 부트에서 MVC 패턴 적용
스프링 부트에서는
- 도메인 : db에 주로 저장되고 관리되는 비즈니스 도메인 객체→ Model
- html로 구현한 화면 : 사용자에게 보여지는 화면 → View
- @Controller : 사용자에게 온 요청을 받고, response하는 역할 → Controller
- @Service : Controller를 통해 온 요청을 받고, 비즈니스 도메인 객체를 이용해서 핵심 비즈니스 로직을 구현하는 부분 → Model
- 리포지토리 : db에 접근해서 도메인 객체를 db에 저장하고 관리
와 같이 역할을 나누어 개발했었다.