FrontController

2025. 6. 5. 11:15·Dev Trivia
728x90

Front Controller 패턴

 웹 애플리케이션의 진입점을 하나로 통합하여 공통된 처리 로직을 중앙 집중화 하는 디자인 패턴

주로 MVC 아키텍처에서 사용되며, 요청을 하나의 컨트롤러 (Front Controller)에서 받아 적절한 처리기로 위임하는 방식


핵심 개념

Front Controller는 모든 요청을 하나의 진입점에서 받아 처리

인증, 인가, 로깅, 에러 처리, 로케일 설정 같은 공통 기능을 이 중앙 컨트롤러에서 처리함

이후 실제 요청에 맞는 컨트롤러로 분기(Dispatch)

Client ──> FrontController ──> Dispatcher ──> Controller ──> View

 

구성 요소 설명
Front Controller 모든 요청을 받는 중앙 서블릿 (또는 핸들러)
Dispatcher URI나 요청 정보를 기반으로 실제 컨트롤러에 분기
Handler / Controller 요청을 처리하는 구체적인 로직 담당
View Resolver 응답할 View를 선택하여 렌더링

 

장점

  • 공통 기능을 한 곳에서 관리하므로 유지보수 용이
  • 요청 흐름이 일관성 있게 제어
  • 로깅, 인증 등 관심사의 분리 가능

단점

  • 모든 요청이 하나의 컨트롤러로 들어오므로 복잡도 증가 가능
  • 단일 장애 지점 (Single Point of Failure)이 될 수 있음
📌 프레임워크 적용 예시) Spring MVC의 `DispatcherServlet`

❓ FrontController ≠ Dispathcher ?

Front Controller 자체가 Dispatcher 역할을 수행하는 경우가 많음

개념적: Front Controller  = Dispatcher

대부분 프레임워크에서 FrontController가 Dispatcher 역할까지 수행

예시: Spring MVC의 DispatcherServlet

// DispatcherServlet 내부
doDispatch(HttpServletRequest request, HttpServletResponse response) {
    Handler handler = handlerMapping.getHandler(request);
    ModelAndView mv = handlerAdapter.handle(request, response, handler);
    viewResolver.resolveViewName(mv.getViewName()).render(...);
}

즉, FrontController == Dispatcher (구현에서는 대부분 합쳐져 있음)


구조적: 역할 분리할 수 있음

디자인 패턴 설명에서 분기 역할을 따로 설명하는 이유는 다음과 같음

  • 유지보수성과 관심사 분리:
    • 공통 처리 (인증, 로깅 등) = Front Controller
    • 요청 분기 로직 (URI 매핑 등) = Dispatcher 혹은 HandlerMapping
  • 유연한 확장성: Dispatcher 로직만 수정하여 다른 라우팅 방식 도입 (ex: REST → GraphQL)

요약

구분 설명
현실적인 구현 대부분 Front Controller가 Dispatcher 역할까지 함
개념적인 분리 요청 수신, 공통 처리 ↔ 요청 분기, 매핑 등 역할을 나눌 수 있음
이유 코드 구조를 명확히 하고, 유지보수성과 확장성을 높이기 위해서

 

728x90
'Dev Trivia' 카테고리의 다른 글
  • Domain 구현 시 Wrapper 타입 사용 이유
  • DNS
  • Comparable vs Comparator
  • [HTML] Attribute vs Property
0woy
0woy
Algorithm, CS, Web 등 배운 내용을 기록합니다.
  • 0woy
    0woy dev
    0woy
  • 전체
    오늘
    어제
  • 🌐 LANGUAGE
    • 분류 전체보기 (80)
      • Backend (21)
        • JAVA (7)
        • DB (11)
        • Spring (1)
        • Spring Security (2)
      • Computer Science (22)
        • 네트워크 (9)
        • 운영체제 (5)
        • 보안 (7)
      • Frontend (15)
        • HTML5 (1)
        • CSS (1)
        • JS (4)
        • Vue 3 (9)
      • PS (16)
        • LeetCode (2)
        • Baekjoon (1)
        • Programmers (1)
        • 알고리즘 (12)
      • Dev Trivia (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    JDBC
    set
    DP
    javascript
    그래프
    가용성
    Filter
    트리
    select
    tcp
    PreparedStatement
    대칭키
    Props
    Vue3
    CA
    공개키
    Graph
    function
    shortestpath
    비밀키
    java
    BFS
    https
    RDB
    속성
    JS
    security
    Spring
    leetcode
    dfs
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
0woy
FrontController
상단으로

티스토리툴바