게으른 개발자의 끄적거림

JSP sendRedirect vs forward 차이점

끄적잉 2023. 9. 18. 21:50
728x90

Java에서 sendRedirect와 forward는 서블릿에서 클라이언트 요청을 다른 자원(서블릿, JSP, HTML 등)으로 전달하거나 리다이렉트하는 데 사용되는 두 가지 다른 메커니즘입니다. 이 두 가지 방식의 주요 차이점은 다음과 같습니다.

 

 

  1. 동작 방식:
    • forward: 서버 측에서 내부적으로 자원(서블릿, JSP 등)으로 요청을 전달하는 방식입니다. 클라이언트에게 새로운 요청이 발생하지 않습니다. 서버 내에서만 동작하며, 클라이언트는 이 동작을 인식하지 못합니다.
    • sendRedirect: 클라이언트에게 새로운 요청을 만들어 보내고, 클라이언트는 이 새로운 요청을 받아 처리합니다. 즉, 클라이언트는 서버에서 다른 자원으로 리다이렉트 된 것처럼 동작합니다. 이로 인해 클라이언트는 두 개의 요청을 인식하게 됩니다.
  2. 속도와 성능:
    • forward: 빠르고 경제적입니다. 왜냐하면 서버 내부에서만 작동하기 때문에 추가적인 HTTP 요청과 응답을 생성하지 않습니다. 따라서 더 빠른 처리 속도와 낮은 대역폭 사용량을 가집니다.
    • sendRedirect: 느릴 수 있으며 대역폭을 사용합니다. 왜냐하면 새로운 HTTP 요청이 만들어져야 하므로 추가적인 네트워크 트래픽과 클라이언트 및 서버 자원을 소비합니다.
  3. 주요 사용 사례:
    • forward: 주로 서버 내부에서 자원을 공유하거나 작업을 분할할 때 사용됩니다. 예를 들어, 한 서블릿에서 다른 서블릿으로 데이터를 전달할 때나, JSP에서 Java 코드로 로직을 처리할 때 주로 사용됩니다.
    • sendRedirect: 주로 클라이언트를 다른 페이지로 리다이렉트하고 싶을 때 사용됩니다. 예를 들어, 로그인 후에 홈 페이지로 리다이렉트하거나, 사용자를 다른 도메인으로 보낼 때 사용됩니다.
  4. 데이터 공유:
    • forward: 요청과 응답 객체를 공유하기 때문에 서블릿 또는 JSP 페이지 간에 데이터를 쉽게 전달할 수 있습니다.
    • sendRedirect: 새로운 요청이 생성되기 때문에 데이터를 공유하기 위해서는 쿠키, 세션 또는 URL 매개변수와 같은 메커니즘을 사용해야 합니다.
  5. URL 변화:
    • forward: 클라이언트의 주소 표시줄은 변경되지 않습니다. 즉, 원래 요청된 URL이 유지됩니다.
    • sendRedirect: 클라이언트의 주소 표시줄이 변경됩니다. 새로운 URL로 리다이렉트됩니다.

각각의 사용 사례와 요구 사항에 따라 sendRedirect와 forward 중에서 선택해야 합니다. 주로 내부적인 작업에는 forward가 유용하며, 클라이언트 리다이렉션에는 sendRedirect를 사용하는 것이 일반적입니다.

728x90