MVC 모델
스프링의 MVC (Model-View-Controllor) 모델은 웹 어플리 케이션 개발에서 가장 많이 사용되는 구조중 하나
MVC 패턴은 애플리 케이션 비즈니스 로직 , UI , 그리고 이들 간의 상호작용을 분리하는데 중점을 둔다.
이 구조를 사용하면 코드의 유지보수와 확장성이 좋아진다.
MVC 모델의 흐름
- 사용자 요청: 사용자가 웹 브라우저를 통해 특정 URL을 요청하면, 요청은 DispatcherServlet으로 전달.
- Controller: DispatcherServlet은 해당 요청을 처리할 컨트롤러를 찾아서 매핑하고,
컨트롤러가 비즈니스 로직을 처리한다. 필요한 경우 모델 데이터를 준비하고, 이를 뷰에 전달할 준비를 한다. - Model: 비즈니스 로직에서 처리된 데이터를 모델 객체로 담아 컨트롤러에서 뷰로 전달한다.
이때 데이터베이스에서 가져온 정보나 다른 서비스로부터 받은 데이터를 사용하게 된다. - View: 컨트롤러가 반환한 뷰 이름에 해당하는 템플릿 파일을 이용해,
모델 데이터를 HTML로 변환하고, 사용자의 브라우저에 표시한다. - 응답: 최종적으로 사용자에게 렌더링된 페이지가 브라우저에 표시된다.
Spring에서의 용어 변경
스프링의 용어변경은 전통적 서블릿 기반 웹개발의 방식에서
스프링 MVC 아키텍쳐로 전환되면서 생긴 개념의 차이로 비롯된다.
각 부분의 역할을 명확히하고 기능을 캡슐화 되었다.
전통적 서블릿 기반의 용어와 스프링 mvc 용어가 어떻게 변화 했는지 알아보자
1. Front Controller → DispatcherServlet
- Front Controller: 전통적인 웹 애플리케이션에서는 클라이언트의 모든 요청을 하
나의 중앙 컨트롤러(서블릿)가 처리했다. - DispatcherServlet: 스프링 MVC에서 Front Controller 역할을 하는 것이 DispatcherServlet이다.
모든 HTTP 요청을 중앙에서 받아 각 컨트롤러와 뷰로 분배하는 역할을 한다.
2. ServiceFactory → Handler Mapping
- ServiceFactory: 전통적으로 애플리케이션의 비즈니스 로직을 처리하는 객체(서비스)를 관리하고,
각 요청을 처리할 서비스를 찾아주는 역할을 했다. - Handler Mapping: 스프링 MVC에서는 Handler Mapping이 클라이언트 요청을 처리할 컨트롤러(핸들러)를 찾아주는 역할을 한다. 요청 URL에 따라 적절한 Controller나 메서드를 매핑한다.
3. Interface Controller → Controller
- Interface Controller: 전통적으로 특정 작업을 처리하는 인터페이스를 만들어 모든 컨트롤러들이 같은 규칙을 따르도록 했었다.
- Controller: 스프링에서는 @Controller 애노테이션을 사용하여 비즈니스 로직을 처리하고, 모델을 뷰에 전달하는 역할을 하는 컨트롤러를 만들 수 있다. 이 컨트롤러는 MVC 패턴에서 'C'에 해당하는 역할을 한다.
4. ModelAndView 객체 → Model과 View로 분리
- ModelAndView: 전통적으로는 ModelAndView 객체를 사용해 **데이터(Model)와 뷰(View)**를 함께 관리했다.
모델 객체를 설정하고, 뷰로 데이터를 전달하고, 뷰를 지정하는 역할을 했다. - Model과 View의 분리: 스프링에서는 Model과 View를 명확히 분리한다.
5. ViewResolver → View를 찾는 역할
- ViewResolver: 전통적인 방식에서는 개발자가 직접 forward() 메서드를 통해 요청을 특정 JSP 파일로 포워딩했다.
- ViewResolver: 스프링 MVC에서는 뷰 이름만 반환하면 ViewResolver가 해당 이름에 맞는 뷰(JSP, Thymeleaf 등)를 찾아준다.
스프링의 MVC 패턴을 병원에 비유하여 설명한다면 ?
1. DispatcherServlet - 접수 담당 직원
- 방문자가 병원에 들어오면 가장 먼저 만나게 되는 사람
- 방문자의 상태에 따라 적절한 진료과(컨트롤러)로 안내하고, 필요할 경우 진료 기록(모델)을 준비하여 의사(뷰)에게 전달
2. HandlerMapping - 안내 데스크
- 병원의 각 부서를 안내하는 역할
- 태에 맞는 진료과를 찾을 수 있도록 안내판(HandlerMapping)을 통해 올바른 의사(컨트롤러)에게 연결
3. Controller - 의사
- 의사는 방문자(클라이언트)의 상태를 진단하고, 필요한 검사를 하거나 치료 계획을 세움
- 이 과정에서 필요한 정보를 취합하여 보고서(모델)를 작성하고, 이를 기반으로 환자에게 설명하거나 처방(뷰)을 제공
4. Model - 진료 기록
- 진료 기록은 환자의 병력, 현재 상태, 검사 결과 등을 담고 있는 문서
- 의사(컨트롤러)가 작성하고, 환자(클라이언트)에게 전달되기 전에 간호사나 약사(뷰)에 의해 처리
5. ViewResolver - 조제실
- 의사의 처방을 바탕으로 실제 약을 준비하는 곳
- 사의 처방전(뷰 이름)을 받아 적절한 약(실제 뷰)으로 변환하여 환자에게 전달
6. View - 약
- 약은 의사가 환자에게 줄 치료제
- 조제실(ViewResolver)에서 준비된 약은 환자(클라이언트)에게 직접 전달되며, 이 약을 통해 환자는 치료받음.
- 사용자가 볼 수 있는 최종 결과물로, HTML, PDF, JSON과 같은 형태로 제공
'Developer > Spring eGov4.0 (Java11, Tomcat9)' 카테고리의 다른 글
Spring , 기본 mvc 패턴 제작형식 , 주요 애노테이션 (1) | 2024.09.27 |
---|---|
spring , service를 나누는 이유 (0) | 2024.09.27 |
Spring , java_config 방식을 활용한 스프링 빈 설정 관리, xml과 혼용 관리 (1) | 2024.09.26 |
Spring , @Autowired & @Qualifier 를 활용한 bean 주입 (0) | 2024.09.25 |
Spring , @Component 스프링 빈 등록 (0) | 2024.09.24 |