-
[Spring] 스프링 MVC란 무엇인가?Spring 2024. 4. 18. 18:21
MVC(Model View Controller)란?
- MVC 패턴은 애플리케이션을 개발할 때 사용하는 디자인 패턴이다.
- Spring MVC는 MVC 디자인 패턴에 기반해 웹 애플리케이션을 만들기 위한 Spring기능 중 하나이다.
- 애플리케이션의 개발영역을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식이다.
- MVC 패턴을 도입하면서 UI 영역과 도메인(비즈니스 로직) 영역으로 구분되어 서로에게 영향을 주지 않으면서 개발과 유지보수를 가능하게 되었다.
Spring MVC는 Spring에서 제공하는 웹 모듈로, Model, View, Controller 세 가지 구성요소를 사용해 사용자의 다양한 HTTP Request를 처리하고 단순한 텍스트 형식의 응답부터 REST 형식의 응답은 물론 View를 표시하는 html을 return 하는 응답까지 다양한 응답을 할 수 있는 프레임워크이다.
Model
- Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다.
- 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라고 한다
- 클라이언트의 요청 사항을 구체적으로 처리하는 영역을 서비스 계층(Service layer)이라고 하며,
- 요청 사항을 처리 하기위해 Java 코드로 구현한 것을 비즈니스 로직(Business Logic)이라고 한다.
View
view는 Model을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스(Resource)를 제공하는 역할을 한다.
Spring MVC에는 다양한 View 기술이 포함되어 있다.
- HTML 페이지 출력
- PDF, Excel 등의 문서 형태로 출력
- XML, JSON 등 특정 형식의 포맷으로 변환
Controller
컨트롤러는 클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트(Endpoint)로써 Model과 View의 중간에서 상호작용을 해주는 역할을 한다.
클라이언트 측의 요청을 전달받아 비지니스 로직을 거친 후, Model 데이터가 만들어지면, 이 Model 데이터를 View로 전달하는 역할을 한다.
MVC 패턴의 구조
MVC 패턴에서도 여러 가지 구조를 가진다.
여러 가지 구조를 가진 MVC 패턴 중 위 그림의 구조를 그대로 사용하고 있는 것이 Spring MVC이다.
일반 MVC 패턴도 유지보수하기에 좋은 패터임은 확실하나,
구조가 복잡해지는것을 극복한 것이 Spring MVC이다.
Spring MVC의 동작 방식과 구성 요소
DispatcherServlet
- HttpServlet을 상속받아 사용하고, 서블릿으로 동작한다.
DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet
- DispacherServlet을 사용하면 서블릿을 등록하면서 모든 경로에 (urlPatterns="/")에 대해 매핑한다.
요청 흐름
- 서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출된다.
- 스프링 MVC는 FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서 **DisparcherServlet.doDispatch()**가 최종적으로 호출된다.
동작 순서
- 핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
- 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
- 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.
- 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다.
- ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 .ModelAndView로 변환하여 반환한다.
- viewResolver호출 : 뷰 리졸버를 찾고 실행한다.
- View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다
- 뷰 렌더링 : 뷰를 통해 뷰를 렌더링한다.
인터페이스
스프링 MVC의 큰 장점은 DispatcherServlet코드의 변경 없이 원하는 기능을 변경하거나 확장할 수 있다는 것이다.
동작에 필요한 대부분의 기능을 확장할 수 있도록 인터페이스로 제공한다.
따라서 인터페이스들만 구현하여 DispatcherServlet에 등록하면 원하는 기능의 컨트롤러를 만들 수 있다.
"디자인 패턴" = 일반적으로 적용 가능한 프로그램 구조를 다루는 이론.
"엔드포인트" = 컴퓨터 네트워크에서 데이터 송수신이 시작되거나 종료되는 지점을 가리킵니다.
"서블릿(Servlet)" = 자바 언어를 기반으로 하는 웹 애플리케이션에서 동적인 웹 페이지를 만들기 위해 사용되는 자바 클래스입니다.
"REST(Representational State Transfer)" = 아키텍처 스타일을 따르는 웹 서비스에서 클라이언트에게 반환되는 데이터의 형식.
"핸들러(Handler)" = 이벤트나 요청을 처리하거나 처리하는 데 사용되는 코드 블록 또는 함수를 가리킨다.
'Spring' 카테고리의 다른 글
[Spring] Lombok 개념 및 사용법 (1) 2024.04.22 [Spring] Spring Data JPA(Java Persistence API)란? (1) 2024.04.21 [Spring] Controller, Service, Repository 가 무엇일까? (0) 2024.04.20 [Spring] JdbcTemplate의 기본 (0) 2024.04.19 [Spring] DAO, DTO, VO, Entity 개념 및 차이점 (0) 2024.04.19