✏️ Front Controller 패턴, Adapter 패턴

박상민·2023년 7월 24일
0

SpringMVC

목록 보기
3/11

⭐️ Front Controller 패턴?

MVC 패턴은 공통 처리가 어렵다는 문제가 있다. 이 문제를 해결하기 위해서는 Controller 호출 전에 먼저 공통 기능을 처리해야 한다.
Front Controller 패턴은 이 문제를 해결한다.


📌 Front Controller 패턴 도입 전, 후

✔︎ Front Controller 도입 전


Front Controller 도입 전에는 요청 경로마다 View로 이동하는 forward 코드, ViewPath 설정 코드 등 중복 되는 코드가 생긴다. 또한, Controller의 테스트 코드를 작성할 때 Servlet에 의존하여 순수한 자바 코드 단위 테스트가 불가능한 문제가 있다.
Front Controller 패턴은 이 문제를 해결해준다.

✔︎ Front Controller 도입 후


Front Conroller 패턴은 공통된 로직을 하나의 ServletFront Controller로 처리함으로써 이 문제를 해결한다. Front Controller 패턴을 도입함으로 인해서 개발자는 공통된 로직을 매번 작성하지 않고 핵심 로직에만 집중할 수 있게 된다.

Front Controller 패턴 특징

  • Front Controller Servlet 하나로 클라이언트의 요청을 받는다.
  • Front Controller가 요청에 맞는 Controller를 찾아서 호출한다.
  • Front Controller를 제외한 나머지 ControllerServlet을 사용하지 않아도 된다.
  • 공통 로직 처리가 가능하다.
    즉, Front Controller는 공통 코드를 처리하고 요청에 맞는 컨트롤러를 Mapping하는 역할을 한다.
    기존 Servlet, JSP, MVC 패턴의 단점을 해결한다

Spring Web MVC의 핵심도 바로 Front Controller이다. Spring Web MVC의 핵심인 DispatcherServlet이 Front Controller 패턴으로 구현되어 있다.

그러나 Front Controller에도 단점이 존재한다. 
바로, Front Controller는 한 가지 타입의 Controller만 호출이 가능하다는 것이다. 
즉, Front Controller 패턴은 유연하지 못하다.

📌 단점을 해결하는 Adapter 패턴


📌 동작 순서

1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(Controller)를 조회한다.
2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
3. 핸들러 어탭터 실행: 핸들러 어탭터를 실행한다.
4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
5. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
6. viewResolver 호출: 뷰 리졸버를 찾고 실행한다.
7. View반환:뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
8. 뷰 렌더링: 뷰를 통해서 뷰를 렌더링한다.

Adapter 패턴은 Front Controller의 유연하지 못한 단점을 해결한다. Adapter 패턴은 여러 Controller interface와 호환 가능하도록 Front ControllerController 사이에 Adapter를 배치하는 것이다.

이는 돼지코로 비유할 수 있다. Controller A, B interface가 있을 때 각각을 110V, 220V 전기 콘센트로 생각하자. A, B interface를 모두 수용하기 이해서는 110V에 220V 돼지코(Adapter)를 추가해야 한다. 이때 220V 돼지코가 Adapter의 역할을 한다.


출처
김영한님의 Spring MVC 강의
https://jaimemin.tistory.com/1817

틀린 내용에 대한 지적은 언제나 환영합니다!

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글