✏️ Front Controller 패턴, Adapter 패턴

2026. 7. 18. 18:44·Backend/Spring MVC

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

⭐️ Front Controller 패턴?

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


📌 Front Controller 패턴 도입 전, 후

✔︎ Front Controller 도입 전


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

✔︎ Front Controller 도입 후


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

Front Controller 패턴 특징

  • Front Controller Servlet 하나로 클라이언트의 요청을 받는다.
  • Front Controller가 요청에 맞는 Controller를 찾아서 호출한다.
  • Front Controller를 제외한 나머지 Controller는 Servlet을 사용하지 않아도 된다.
  • 공통 로직 처리가 가능하다.
  • 즉, 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 Controller와 Controller 사이에 Adapter를 배치하는 것이다.

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


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

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

'Backend > Spring MVC' 카테고리의 다른 글

✏️ 요청 매핑  (0) 2026.07.18
✏️ Logging  (0) 2026.07.18
✏️ Spring MVC 시작하기  (0) 2026.07.18
✏️ MVC 패턴  (0) 2026.07.18
✏️ HttpServlet 요청과 응답  (0) 2026.07.18
'Backend/Spring MVC' 카테고리의 다른 글
  • ✏️ Logging
  • ✏️ Spring MVC 시작하기
  • ✏️ MVC 패턴
  • ✏️ HttpServlet 요청과 응답
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Book
    척척학사
    Algorithm
    OS
    개념 정리!
    나의 작은 프로젝트
    interview
    Project
    jpa
    HTTP WEB 기본 지식
    BOJ
    Spring
    트러블슈팅
    Python
    http
    Spring MVC
    게시판
    object
    java
    CS Interview
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
✏️ Front Controller 패턴, Adapter 패턴
상단으로

티스토리툴바