✅ 프론트 컨트롤러 패턴(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을 통해 자동으로 이 기능을 제공!
'스프링(Spring) 및 자바(JAVA)' 카테고리의 다른 글
| 스프링 부트 개념 정리 - 이론11 (0) | 2025.03.11 |
|---|---|
| 스프링 부트 개념 정리 - 이론10 (0) | 2025.03.11 |
| 스프링 부트 개념 정리 - 이론09 (0) | 2025.03.09 |
| 스프링 부트 개념 정리 - 이론08 (0) | 2025.03.09 |
| 스프링 부트 개념 정리 - 이론07 (0) | 2025.03.08 |