Forward와 Redirect의 차이점, 도식화
오늘은 프런트 컨트롤러 패턴에서 자주 쓰이는
Forward와 Redirect의 차이점에 대해 알아보도록 하겠다.
Forward와 Redirect의 차이점을 한눈에 도식화하면 아래와 같다.
Forward 방식:
특징:
- 서블릿에서 웹 브라우저 (즉, Client)를 거치지 않고 바로 다른 서블릿에게 요청을 하는 방식이다.
서버의 자원 관점:
- 서버 내부에서 일어나는 요청이므로 새롭게 자원을 만들지 않는다. 즉 HttpServletRequest, HttpServletResponse 객체를 새롭게 만들지 않고 공유한다.
ex) RequestDispatcher dispatcher = request.getRequestDispatcher("JSP to be forwarded")
dispatcher.forward(request, response)
URL 관점:
- 최초 요청한 URL이 유지된다.
새로운 객체 관점:
- 같은 요청을 처리하는 동안 같은 객체를 사용한다.
Redirect 방식:
특징:
- 서블릿이 웹 브라우저 (즉, Client)를 다시 거쳐 다른 서블릿에게 요청을 하는 방식이다.
서버의 자원 관점:
- 클라이언트로부터 온 새로운 요청이기 때문에 새로운 HttpServletRequest, HttpServletResponse의 객체가 생성된다.
URL 관점:
- 최초 요청한 URL과 다른 URL이 사용되며, HttpServletResponse 객체의 sendRedirect()를 이용한다.
새로운 객체 관점:
- 새로운 객체가 생성된다.
차이점 요약:
Forward:
- URL이 변경되지 않음.
- 같은 요청을 처리하는 동안 같은 객체를 사용.
- dispatcher.forward
Redirect:
- URL이 변경됨.
- 새로운 요청을 처리하는 동안 새로운 객체를 사용.
- sendRedirect()