091
[JAVA/Spring Boot] Spring MVC 본문
1. Spring MVC
- Spring MVC란 데이터 처리와 비즈니스 로직(Model), 사용자에게 보여지는 화면(View), 그리고 이 둘 사이의 흐름을 제어하는 라우터(Controller)의 역할을 철저하게 분리하여 유연하고 확장 가능한 웹 애플리케이션을 구축하게 해주는 스프링의 핵심 웹 프레임워크입니다.

- 위의 이미지는 Spring MVC의 흐름을 나타내고 있으면 모든 Request는 DispatcherServlet으로 들어오고 모든 Response는 DispatcherServlet을 통해 나간다는 사실을 알 수 있습니다.
(1) DispatcherServlet은 모든 HTTP 요청을 받아 적절한 컨트롤러로 라우팅하는 Front Controller 역할을 합니다. 요청 라우팅, 컨트롤러 실행, View 처리 등의 웹 요청의 중앙 통제를 전적으로 맡고있습니다.
(2) HandlerMapping은 해당 요청이 어떤 컨트롤러를 실행해야할지 매핑해주는 역할을 합니다. 어떤 컨트롤러인지만 알려줍니다.
(3) HandlerAdapter는 매핑하는 과정에서 알려준 컨트롤러에서 어떻게 실행해야하는지 실행 방법을 알려줍니다.
SSR방식------------------------------------------------------------------------------------------------------------
(4) Handler(Controller)는 논리 View 이름을 반환합니다.
(5) ViewResolver는 Controller가 반환한 View 이름을 실제 View 리소스와 매핑합니다.
(6) Template Engine이 HTML을 생성합니다.
(7) 생성된 HTML이 Browser로 전달됩니다.
CSR방식------------------------------------------------------------------------------------------------------------
(4) Handler(@RestController)는 View 이름이 아니라 데이터를 반환합니다.
(5) Spring은 데이터를 JSON 형태로 직렬화합니다.
(6) Browser의 JavaScript가 데이터를 받아 UI를 렌더링합니다.
- 렌더링의 차이에 따라 중간 과정에서 Handler가 View로 이동하거나, @RestController를 통해 데이터만 반환하는 방식이 있습니다.
-> SSR 방식(서버 렌더링)에서의 대표적인 템플릿 엔진에는 JSP, Thymeleaf이 있습니다.
• JSP는 자바 기반 웹 애플리케이션을 위한 서버 사이드 언어이자 템플릿 기술로, HTML,XML 등의 정적 콘텐츠와 자바 코드로 작성된 동적 콘텐츠가 결합해 웹 페이지를 생성합니다.
• Thymeleaf는 HTML 기반의 서버 사이드 템플릿 엔진으로, 현대 Spring에서 사용되며 JSP보다 Spring Boot와 같이 사용되길 권장됩니다.
-> CSR 방식(브라우저 렌더링)에서는 서버가 HTML을 생성하지않고(이후에 SPA를 통해 한번에 브라우저가 렌더링함) JSON 데이터를 반환합니다. 대표적인 프레임워크로는 React, Vue.js가 있습니다.
• React는 Meta Platforms이 개발, 유지하는 오픈소스 JavaScript 기반 UI 라이브러리입니다. 컴포넌트, 가상 DOM, 단방향 데이터 흐름, 훅 등의 특징이 있습니다.
• Vue.js는 사용자 인터페이스와 단일 페이지 애플리케이션을 구축하기 위한 오픈소스 프런트엔디 자바스크립트 프레임워크입니다. MVVM을 특징으로 가지고 있으며 마찬가지로 가상 DOM을 활용하여 렌더링 효율을 극대화합니다.
'Programming Language > Java' 카테고리의 다른 글
| [JAVA/Spring Boot] STOMP: WebSocket 개념 (0) | 2026.03.23 |
|---|---|
| [JAVA/Spring Boot] Spring Framework: IoC, Bean, DI (0) | 2026.03.16 |
| [안드로이드 앱 개발] 뷰(View)(3) - ViewGroup(레이아웃) (1) | 2025.10.20 |
| [안드로이드 앱 개발] 뷰(View)(2) - CompoundButton, ImageView (0) | 2025.10.20 |
| [안드로이드 앱 개발] 뷰(View)(1) - TextView, EditText, Button (0) | 2025.10.17 |