[내일배움캠프 Spring 3기] 프론트 컨트롤러 패턴, 어댑터 패턴

jiiim_ni·2026년 2월 6일

프론트 컨트롤러 패턴(Front Controller Pattern)

프론트 컨트롤러 패턴이란?

모든 클라이언트 요청을 단일 진입점(Single Point of Entry)에서 처리하는 디자인 패턴

요청에 대한 공통 처리(보안, 로깅, 인코딩 등)를 중앙에서 효율적으로 관리할 수 있으며, 개별 요청을 처리할 핸들러(Controller)로 작업을 위임하는 역할을 함

프론트 컨트롤러가 왜 필요할까?

전통적인 방식의 문제점

  • 각 서블릿마다 공통 로직(인증, 로깅, 인코딩 등)이 중복됨
  • 새로운 기능 추가 시 모든 서블릿 수정 필요
  • 관리가 어렵고 일관성 유지 어려움

프론트 컨트롤러 패턴을 사용한다면

  • 모든 요청을 하나의 컨트롤러가 받아서 처리(공통 로직을 중앙화)
  • 요청에 따라 적절한 컨트롤러로 위임

프론트 컨트롤러 패턴의 장점

  • 공통 로직의 중앙화
  • 일관된 처리 흐름
  • 새로운 컨트롤러 추가 시에도 공통 로직 자동 적용
  • 유지보수성 향상

어댑터 패턴(Adapter Pattern)

어댑터 패턴이란 서로 다른 인터페이스를 가진 클래스들을 연결해주는 패턴

즉, 이는 다형성을 잘 활용한 패턴이라고 볼 수 있음

Spring MVC에서 왜 어댑터 패턴이 필요할까

Spring에서는 다양한 형태의 컨트롤러를 지원하기 때문에, 프론트 컨트롤러 패턴만으로는 다양한 종류의 컨트롤러를 처리하기 어려움

이때 어댑터 패턴이 함께 사용되면 다형성을 활용해 쉽게 다양한 컨트롤 타입을 통일된 방식으로 다룰 수 있음

어댑터 패턴의 장점

  • 다양한 컨트롤러 타입을 통일된 방식으로 처리(다형성)
  • 새로운 컨트롤러 타입 추가 시 새 어댑터만 만들면 됨
  • 기존 코드 수정 없이 확장 가능

DispatcherServlet

DispatcherServlet은 프론트 컨트롤러 패턴(Front Controller Pattern)을 구현한 스프링 MVC의 핵심적인 프론트 컨트롤러

Spring MVC와 DispatcherServlet 연관 흐름도

1. 요청

  • 클라이언트가 웹 애플리케이션에 요청(Request)을 보내고, 이 요청은 가장 먼저 DispatcherServlet에 도달함

2. 핸들러 조회

  • DispatcherServlet은 HandlerMapping에게 요청을 처리할 Handler(=Controller)를 찾아달라고 요청함

3. 핸들러 실행

  • DispatcherServlet은 HandlerMapping으로부터 받은 정보를 이용해 해당 Controller에게 요청 처리를 위임함

4. ModelAndView 반환

  • Controller는 비즈니스 로직을 수행한 후, 결과 데이터(Model)와 뷰의 논리적 이름(View Name)을 담은 ModelAndView 객체를 DispatcherServlet에 반환함

5. 뷰 해석

  • DispatcherServlet은 ModelAndView에서 뷰 이름을 추출하여 ViewResolver에게 전달하고, 해당하는 실제 View 객체를 찾아달라고 요청함

6. 뷰 렌더링

  • DispatcherServlet은 ViewResolver로부터 받은 View 객체에게 모델 데이터를 전달하여 뷰를 렌더링하도록 요청함

7. 응답

  • 렌더링된 View의 결과물이 DispatcherServlet을 통해 클라이언트에게 최종적으로 응답(Response)으로 전달됨

0개의 댓글