늦은 프로그래밍 이야기
Spring MVC 본문
MVC
- Model View Controller
- 소프트웨어 공학에서 사용되는 아키텍쳐 패턴
- 주 목적은 Business Logic과 Presentation Logic을 분리하기 위함
- 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시작적 요소나 그 이면에서 실행되는 비지니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있음
- Model : 애플리케이션의 정보 (데이터, Business Logic 포함)
- View : 사용자에게 제공할 화면 (Presentation Logic)
- Controller : Model과 View 사이의 상호 작용을 관리

- 실질적으로 클라이언트는 컨트롤러와만 직접 소통 (Request, Response)
- Model에 Service와 DAO가 구현
- View는 주로 HTML 형태 또는 JSON 형태
Model
- 데이터베이스와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 함
- 여러개의 데이터 변경 작업(추가, 변경, 삭제)을 하나의 작업으로 묶는 Trasaction을 다루는 일을 함
- DAO 클래스, Service 클래스에 해당
View
- Model이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 함
- 생성된 화면은 웹 브라우저가 출력, View는 HTML과 CSS, Javascript를 사용하여 출력할 UI를 만듬
- HTML과 JSP를 사용하여 작성
Controller
- Client의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 Model을 호출하는 일을 함
- Client가 보낸 데이터가 있다면, Model을 호출할 때 전달하기 쉽게 데이터를 적절히 가공
- Model이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 View에게 전달
- Servlet과 JSP를 사용하여 작성
Spring MVC
- 스프링에서 제공하는 웹 모듈
- Model View, Controller 세가지 구성요소를 사용
- 사용자의 다양한 HTTP Request를 처리
- 단순한 텍스트 형식의 응답부터 REST 형식의 응답, View를 표시하는 html을 return하는 응답까지 다양한 응답을 할 수 있다.
Spring Layered 구조

Presentation Layer
- Spring MVC 객체를 말한다.
- 프론트 컨트롤러(DispatcherServlet), 컨트롤러, 뷰, 모델이 포함
Service Layer (Business Layer)
- 비지니스 로직을 수행하는 컴포넌트
- 컨트롤러(Presentation Layer)에서 요청을 보내면 DAO(Data Access Layer)를 이용해 실제로 비지니스 로직을 수행
- 보통 하나의 비지니스 로직은 하나의 트랜잭션으로 동작
Data Access Layer (Repository Layer)
- DB에 값을 저장하거나 가져오기 위해 JDBC, Mybatis, JPA 등을 사용해 구현한 DAO
Spring MVC 구조

- Client의 요청을 DispatcherServlet이 받아 HandlerMapping에 요청을 처리할 Controller에 대한 검색을 요청
- HandlerMapping이 매핑된 핸들러 객체를 DispatcherServlet에게 리턴
* 핸들러 객체 : 해당 핸들러의 Handler 메소드(요청 처리 메소드, controller 클래스에 구현) 정보를 포함 - DispatcherServlet이 HandlerAdapter에게 실제 요청을 처리할 Handler 메소드 호출을 위임
- HandlerAdapter는 전달받은 Controller 정보를 기반으로 해당 Controller의 Handler 메소드를 호출
- Handler 메소드가 비즈니스 로직 처리 후 리턴 받은 Model 데이터를 HandlerAdapter에게 전달
- HandlerAdapter가 전달받은 Model 데이터와 View 정보를 DispatcherServlet에게 전달
- DispatcherServlet이 전달받은 View 정보를 ViewResolver에게 전달해서 View 검색 요청
- ViewResolver가 View 정보에 해당하는 View를 찾아서 리턴
- DispatcherServlet이 전달받은 View 객체에게 Model 데이터를 넘겨주면서 응답 데이터 생성을 요청
- View가 응답 데이터를 생성하여 DispatcherServlet에게 전달
- DispatcherServlet이 View로부터 전달받은 응답 데이터를 최종적으로 Client에게 전달
출처 : https://gnidinger.tistory.com/464
[Spring]Spring MVC
이전 글에서 스프링의 모듈 구조에 대해 본 적이 있다. 출처: https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/overview.html
gnidinger.tistory.com
'내일배움캠프 > Spring' 카테고리의 다른 글
| Annotation (1) | 2022.12.21 |
|---|---|
| UnsatisfiedDependencyException 에러 해결 (0) | 2022.12.16 |
| JPA (0) | 2022.12.06 |
| Database, SQL (0) | 2022.12.06 |
| Layered Architecture (계층형 구조) (0) | 2022.12.06 |