본문 바로가기

Programming/Web

[JSP] Redirect / Forward 의 차이


Redirect VS Forward

JSP / Servlet 에는 현재 작업중인 페이지에서 다른 페이지로 이동하는 두 가지 방식의 페이지 전환 기능이 있다. 하나는 Redirect 이고 다른 하나는 Forward 이다.












Redirect 처리방식

위 그림과 같이 클라이언트의 요청을 처리한 후, 웹 컨테이너는 sendRedirect() 메소드가 호출되면 브라우저에 응답을 보낸다. 

이 응답에는 브라우저가 웹 컨테이너의 응답을 받은 후 다시 요청을 보낼 새로운 URL을 포함하며, 여기에서 하나의 요청이 종결되고, 새로부여받은 URL 로 브라우저에서 완전히 새롭게 요청하기 때문에 이전에 요청 스코프에 저장되어 있던 객체는 새로운 요청 전에 소멸된다. 

첫 요청이 실행되다가, 리다이렉트 요청이 들어오면 다시 클라이언트인 브라우저에게 리다이렉트 요청을 보내고, 브라우저는 그 요청을 받고 요청을 하게된다.






Forward처리방식

요청이 포워딩 될때는 해당 요청이 서버의 다른자원(서블릿)에 전달된다. 이때에는 이 요청을 처리하는것을 클라이언트(브라우저)에게 알리지 않는다. 이런방식의 처리는 웹 컨테이너 내부에서만 일어나고, 클라이언트는 알수없게된다. 그렇기 때문에 브라우저 주소창은 이전 주소가 그대로 남아있고, 내부적으로만 바뀐다. 포워딩은 리다이렉트와 다르게 객체를 요청에 담아서 요청을 처리한다.

그렇기 때문에 그전 스코프에 저장되어 있던 객체들도 포워드 후에도 참조할수 있다.

 

포워딩은 클라이언트와 통신없이 서버에서만 처리되기 때문에 리다이렉트보다 나은 성능을 보여준다.




여기서 한가지 알고가자면, 

Web Container:

Servlet과 JSP의 실행환경 제공 및 Servlet과 JSP를 관리해주는 서버로써, 

대표적으로 Apache Tomcat이 있음!!








정리하자면, 

외부적으로 보이는 가장 큰 차이점은 

사용자(브라우저)의 URL의 변화여부. URL의 변화가 있으면 리다이렉트 방식, 없으면 포워드 방식. 

내부적으로 가장 큰 특징은 요청(Request)속성으로 저장되어있는 객체의 재사용여부이다. 요청객체를 재사용하는 것은 포워드 방식이고 그렇지 않은 것은 리다이렉트 방식이다.