프론트 컨트롤러 패턴

Jiwon Jung·2025년 10월 31일

스프링(Spring)

목록 보기
6/20

이번 포스팅에서는 프론트 컨트롤러 패턴에 대해 기록한다.


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

  • 모든 클라이언트 요청을 단일 진입점(Single Point of Entry)에서 처리하는 디자인 패턴이다.
  • 요청에 대한 공통 처리(보안, 로깅, 인코딩 등)를 중앙에서 효율적으로 관리할 수 있으며, 개별 요청을 처리할 핸들러(Controller)로 작업을 위임하는 역할을 한다.
  • 전통적인 방식

  • 프론트 컨트롤러 패턴

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

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

📖 어댑터 패턴(Adapter Pattern)

  • 서로 다른 인터페이스를 가진 클래스들을 연결해주는 패턴
  • 다형성을 잘 활용한 패턴이라고 볼 수 있다.
  • HandlerAdapter라는 인터페이스를 이용해 Controller를 모두 하나의 HandlerAdapter라는 타입으로 처리한다.

✅ 어댑터 패턴 장점

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

📖 DispatcherServlet

  • DispatcherServlet은 프론트 컨트롤러 패턴을 구현한 스프링 MVC의 핵심적인 프론트 컨트롤러이다.
  • DispatcherServlet은 프론트 컨트롤러 패턴과 어댑터 패턴을 기반으로 만들어졌다.

  • 💡 프론트엔드가 백엔드로부터 분리되면서 역할이 다음과 같이 바뀌었다.
    • 여기서 데이터는 JSON이다.

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개의 댓글