Written by
Sunwoo Han
on
on
MVC 프레임워크 만들기 - V4, V5
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 공부하고 정리하는 포스트입니다.
MVC 프레임워크 만들기
개요
- MVC 패턴에서 발생되는 많은 중복을 개선하기 위해 프론트 컨트롤러(Front Controller) 패턴 도입
- 공통된 부분을 처리해주는 Front Controller로 중복을 줄일 수 있음
- 점진적으로 개선
- V1 : 프론트 컨트롤러(Front Controller) 패턴 도입
- V2 : view render를 처리해주는 MyView 도입
- V3 : 서블릿(Servlet) 종속성 제거 / View Resolver 도입으로 논리 뷰 이름 사용
- V4 : V3 코드에서 반환타입을 논리 주소명으로 변경
- V5 : 어댑터(Adapter) 패턴 도입으로 다양한 종류의 컨트롤러 처리
- V5까지 점진적으로 개선시킨 구조는 실제 스프링 MVC의 핵심 구조와 동일
단순하고 실용적인 컨트롤러 - V4
구조
- 기존 V3 구조와 동일. 각 Controller는 ModelView 객체가 아닌 String 타입의 view path만 반환
- 매번 ModelView 객체를 return 하지 않아도 되서 덜 귀찮음
- 대신 ModelView를 사용하지 않기 때문에 model 정보를 저장하는
<String, Object> model
이 필요!
코드
ControllerV4
MemberFormControllerV4
MemberSaveControllerV4
MemberListControllerV4
FrontControllerServletV4
유연한 컨트롤러 - V5
구조
- 다양한 종류의 인터페이스를 처리하기 위해
어댑터(Adapter) 패턴
1. 추가- 핸들러(Handler) : 컨트롤러의 이름을 더 넓은 범위인 핸들러(Handler)로 변경 -> 어댑터가 있기 때문에 컨트롤러가 아닌 어떤 것도 알맞게 처리할 수 있음!
- 핸들러 어댑터(Handler Adapter) : 중간에 어댑터 역할을 하는 인터페이스를 추가 -> 다양한 컨트롤러 호출
코드
MyHandlerAdapter
boolean supports(Object handler)
: 어댑터(Adapter)가 해당 컨트롤러를 처리할 수 있는지 판단하는 메서드ModelView handle(HttpServletRequest req, HttpServletResponse resp, Object handler)
: 어댑터(Adapter)를 통해서 실제 컨트롤러의 비즈니스 로직을 호출하는 메서드
ControllerV3HandlerAdapter
(handler instanceof ControllerV3)
: handler가 ControllerV3와 같은 인스턴스인지 검사
ControllerV4HandlerAdapter
FrontControllerServletV5
1 : 서로 호환이 불가능한 V3, V4 버전을 동시에 사용할 수 있도록, 마치 110v, 220v 전기 콘센트를 호환해주는 어댑터와 같이 동작하는 패턴.
Comments
SPRING 의 다른 글
-
스프링 타입 컨터버 24 Jun 2022
-
API 예외 처리 17 Jun 2022
-
예외 처리와 오류 페이지 12 Jun 2022
-
로그인 처리 - 인터셉터 08 Jun 2022
-
로그인 처리 - 필터 06 Jun 2022
-
로그인 처리 - 쿠키, 세션 31 May 2022
-
Bean Validation 22 May 2022
-
검증 22 May 2022
-
메시지, 국제화 21 May 2022
-
타임리프 - 스프링 통합과 폼 19 May 2022
-
타임리프 - 기본 기능 10 May 2022
-
스프링 MVC 기본 기능 - 웹 페이지 만들기 02 May 2022
-
스프링 MVC 기본 기능 - HTTP 응답 30 Apr 2022
-
스프링 MVC 기본 기능 - HTTP 요청 24 Apr 2022
-
스프링 MVC 기본 기능 - 요청 매핑 19 Apr 2022
-
스프링 MVC 기본 기능 19 Apr 2022
-
스프링 MVC 구조 이해 14 Apr 2022
-
MVC 프레임워크 만들기 - V4, V5 12 Apr 2022
-
MVC 프레임워크 만들기 - V1, V2, V3 09 Apr 2022
-
서블릿, JSP, MVC 패턴 05 Apr 2022
-
서블릿 29 Mar 2022
-
웹 애플리케이션 이해 24 Mar 2022
-
스프링 웹 계층이란? 05 Nov 2021
-
스프링 시큐리티 공식문서 번역 27 Sep 2021
-
스프링 AOP 총정리 : 개념, 프록시 기반 AOP, @AOP 27 Apr 2021
-
SpEL (스프링 Expression Language) 25 Apr 2021
-
데이터 바인딩 추상화 : Converter와 Formatter 21 Apr 2021
-
데이터 바인딩 추상화 : PropertyEditor 12 Apr 2021
-
Validation 추상화 10 Apr 2021
-
Resource 추상화 08 Apr 2021
-
IoC 컨테이너 9부 07 Apr 2021
-
IoC 컨테이너 8부 06 Apr 2021
-
IoC 컨테이너 7부 02 Apr 2021
-
IoC 컨테이너 6부 29 Mar 2021
-
IoC 컨테이너 5부 27 Mar 2021
-
IoC 컨테이너 4부 23 Mar 2021
-
IoC 컨테이너 3부 20 Mar 2021
-
IoC 컨테이너 2부 18 Mar 2021
-
IoC 컨테이너 1부 12 Mar 2021
-
스프링 PSA 07 Jan 2021
-
스프링 @AOP 실습 07 Jan 2021
-
프록시 패턴 06 Jan 2021
-
스프링 AOP 04 Jan 2021
-
의존성 주입(Dependency Injection) 04 Jan 2021
-
스프링 빈(Bean) 02 Jan 2021
-
스프링 IoC 컨테이너 01 Jan 2021
-
스프링 IoC 01 Jan 2021