스프링(Spring) 및 자바(JAVA)

스프링 부트 개념 정리 - 이론12

Dev.99_tale 2025. 3. 11. 05:16

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

"모든 요청을 중앙에서 처리하고 적절한 컨트롤러로 전달하는 패턴!"


 프론트 컨트롤러 패턴이 필요한 이유

📌 기존 방식 (web.xml 기반 매핑)

  • web.xml에서 각각의 서블릿을 매핑해야 하므로 설정이 복잡해짐
  • 요청이 많아질수록 관리하기 어려움

📌 프론트 컨트롤러 방식

  • 모든 요청을 하나의 컨트롤러(Front Controller)에서 먼저 받음
  • 이후 적절한 서블릿이나 JSP로 전달
  • 유지보수가 쉬워지고 코드의 일관성이 증가

📌 "web.xml에서 하나하나 매핑하는 것이 아니라, 모든 요청을 프론트 컨트롤러가 먼저 받고 적절한 곳으로 보내는 방식!"


 프론트 컨트롤러 패턴의 동작 흐름

1️⃣ 클라이언트가 요청 (/users, /products 등)
2️⃣ 프론트 컨트롤러가 요청을 가로챔
3️⃣ 적절한 서블릿이나 컨트롤러로 요청을 전달 (RequestDispatcher)
4️⃣ 응답을 생성하여 클라이언트에게 반환

📌 "모든 요청을 프론트 컨트롤러가 먼저 받아 적절한 로직으로 분배한다!"


 프론트 컨트롤러 패턴 vs 기존 방식 비교

구분 기본 방식(web.xml) 프론트 컨트롤러 패턴
요청 처리 방식 요청마다 개별 서블릿 호출 프론트 컨트롤러가 요청을 한곳에서 처리
유지보수 서블릿 추가 시 매핑 수정 필요 로직 추가가 쉽고 유지보수 용이
확장성 URL이 많아질수록 관리 어려움 새로운 요청 처리가 쉬움

📌 "기존 방식은 URL이 많아질수록 복잡해지지만, 프론트 컨트롤러는 중앙에서 일괄적으로 처리할 수 있다!"


 RequestDispatcher – 요청을 유지하면서 넘기는 기법

"요청을 다른 서블릿이나 JSP로 전달하면서, 기존 요청 정보를 유지하는 방법!"

📌 기존 방식 (새로운 요청 생성 – 기존 정보 소멸됨)

response.sendRedirect("next.jsp");
  • 새로운 요청이 발생하여 기존 요청 정보가 사라짐

📌 RequestDispatcher 방식 (기존 요청 정보 유지 가능)

RequestDispatcher dispatcher = request.getRequestDispatcher("next.jsp");
dispatcher.forward(request, response);
  • 기존 요청 정보를 유지하면서 페이지 이동 가능

📌 "RequestDispatcher를 사용하면 기존 요청 정보를 유지하면서 페이지를 넘길 수 있다!"


 스프링에서는 디스패처 서블릿(DispatcherServlet)으로 자동 지원!

📌 JSP에서는 프론트 컨트롤러 패턴을 직접 구현해야 하지만, 스프링에서는 자동 제공됨!
📌 스프링의 DispatcherServlet은 Front Controller + RequestDispatcher 기능을 모두 포함!

클라이언트 요청  →  DispatcherServlet  →  적절한 컨트롤러에 전달  →  응답 반환

📌 "스프링에서는 프론트 컨트롤러 패턴과 RequestDispatcher 기능이 합쳐진 DispatcherServlet을 제공한다!"


 정리

📌 프론트 컨트롤러 패턴은 모든 요청을 중앙에서 처리하고 필요한 컨트롤러로 넘기는 방식!
📌 RequestDispatcher를 사용하면 기존 요청 정보를 유지하면서 페이지를 넘길 수 있음!
📌 스프링에서는 DispatcherServlet을 통해 자동으로 이 기능을 제공!