1. MVC란?
MVC란 Model View Controller(모델 뷰 컨트롤러)의 약자로 애플리케이션을 세 가지의 역할로 구분한 소프트웨어 디자인 패턴, 개발 방법론이다.
Model : 애플리케이션의 데이터들을 의미하며, 사용자들에게 보이는 것에 대해 신경 쓰지 않으며 순수 public 함수로 이루어진다.
View : 화면을 보여주는 역할로 모델의 데이터를 전달받아서 사용자에게 보여준다.
Controller : 화면의 처리 기능과 Model과 View를 연결시켜주는 역할을 한다.
사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 데이터를 바탕으로 View를 제어해 사용자에게 전달된다.
2. Spring MVC 프로젝트
1) 프로젝트 구조
-
JAVA 파일 : JAVA로 작성된 Controller, Service, DAO 파일들이 위치해있다.
-
webapp : 웹 관련 디렉토리. html, css, js, jsp 파일과 웹 애플리케이션 구동에 필요한 xml 설정 파일들이 위치해있다.
-
spring : spring 설정 파일들이 위치해있다. (spring 컨테이너 생성 위함)
-
views : jsp 파일들이 위치해있다.
-
web.xml : 웹 설정 파일
-
pom.xml : Maven 설정 파일, Maven은 프로젝트 관리 도구로 필요한 라이브러리를 pom.xml에 정의하면 자동으로 라이브러리가 다운받아진다.
2) 프로젝트 구성 요소
구성요소 | 역할 |
DispatcherServlet | Client의 요청을 전달 받아 요청에 맞는 handler로 요청을 보내고 Controller가 return한 결과값을 View에 전달하여 알맞은 응답을 생성한다. |
HandlerMapping | Client의 요청 url과 Controller를 매핑시킨다. |
Controller | Client의 요청을 처리한 뒤, 결과를 DispatcherServlet에 전달한다. |
ModelAndView | Controller가 처리한 결과 정보와 View 정보가 담겨있다. |
ViewResolver | Controller가 처리한 결과를 생성할 View를 결정한다. |
View | Controller의 처리 결과 화면을 설정한다. |
3. Spring MVC 처리 과정
1) 일반적인 Spring MVC
-
클라이언트(Client)가 서버(Server)에 어떤 요청(Request)을 하면 Spring의 DispatcherServlet 클래스가 요청을 가로챈다. (web.xml에서 서블릿 매핑)
-
DispatcherServlet은 HandlerMapping정보를 참조하여 해당 요청을 처리하기 위한 Controller를 찾는다. (servlet-context.xml에서 @Controller 등록)
-
HandlerMappring에 매핑된 Controller가 존재하면 @RequestMapping을 통해 요청을 처리할 메서드로 이동한다.
-
Controller는 해당 요청을 처리할 Service를 받아 비즈니스 로직을 Service에 위임한다.
-
Service는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근이 필요하다면 DAO에 처리를 위임한다.
-
DAO는 mybatis 설정 등을 이용하여 SQL 쿼리를 날려 DB의 정보를 받아 Service에 다시 돌려준다.
-
Service는 모든 로직을 끝내고 결과를 Controller에게 넘긴다.
-
결과를 받은 Controller는 반환해야 될 View 정보를 Model 객체에 담아 DispatcherServlet에게 전달한다.
-
DispatcherServlet은 ViewResolver에게 전달받은 View 정보를 전달한다.
-
ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
-
DispatcherServlet은 응답할 View에게 Render를 지시하고 View는 응답 로직을 처리한다.
-
DispatcherServlet은 클라이언트에게 Rendering 된 View를 응답한다.
2) Restful Spring MVC
- 일반적인 Spring MVC 패턴과는 달리 Response를 Controller가 직접 처리한다.
- HTTP Request에 의해 Controller가 호출되고 Service가 로직을 수행하고 결과를 Controller에 전달하는 과정은 위의 과정과 동일하다.
- Controller는 return 값을 xml 또는 json 형태로 반환한다.
- 요청에 대한 결과는 DispatcherServlet을 거치는 것이 아니라, Request가 왔던 곳으로 바로 Response 된다.
틀린 부분 있으면 댓글로 말씀해주세요. 수정하겠습니다!
'Web Programming > SPRING' 카테고리의 다른 글
테스트 코드 작성법 (0) | 2023.08.18 |
---|---|
멀티 모듈 그룹 경계나누기 (0) | 2023.08.18 |
[Spring] IntelliJ에서 Build가 깨지는 오류 (0) | 2023.07.24 |
[SPRING] MVC패턴의 게시판 만들기(02) - 기본적인 CRUD 구현 (0) | 2020.01.20 |
[SPRING] MVC패턴의 게시판 만들기(01) - 디렉토리 구조와 설정 파일 (0) | 2020.01.16 |