1월 29, 2024

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()