포워딩 vs 리다이렉팅

블랑·2023년 3월 22일
0

JSP를 공부하는 도중, 헷갈리는 내용인 포워딩과 리다이렉팅을 정리하였다.
포워딩과 리다이렉팅 모두 주소를 이동하는(페이지를 전환하는) 기능이다.
언뜻 보면 같지만, 근본적으로 페이지 이동을 위한 방식에 차이가 있다.

포워딩을 통해서 요청을 했을 경우

포워딩(Forwarding)은 서버에서 일어나는 내부적인 페이지 이동이다.
클라이언트로부터의 요청을 처리한 후, 결과를 생성한 서블릿이 다른 서블릿이나 JSP 페이지로 요청을 전달하는 방식

기존 요청(Request) 객체와 응답(Response) 객체를 그대로 유지한 채, 서버 내부에서 다른 페이지나 서블릿으로 제어권을 이동시키는 것이다.

따라서 요청 정보는 페이지를 전환하면서 그대로 이어진다.
이는 공유 자원을 통한 것이 아니기에 외부에서 공유할 수 없다.

또한, 웹 브라우저의 URL 주소창에는 최초 요청한 URL이 표시된다. 여기서 중요한 사실이 하나 있다.

포워딩된 페이지는 url이 달라지지만, 웹 브라우저에서는 최초 실행된 url이 표시된다.

제어권만 이동하였기에, 웹 브라우저는 실제로 어떤 페이지로 이동했는지 알 수 없기 때문이다. 따라서, URL도 변경되지 않는다.

리다이렉팅을 수행했을 경우

포워딩이 기존 정보를 가진 채로 이동하는 것이라면, 리다이렉팅은 기존 정보를 토대로 새로운 객체를 만들어(HttpServlet을 호출하여)내는 쪽이다.

redirect는 서버에서 클라이언트로의 완전한 새로운 요청을 발생시키는 방식으로, 클라이언트가 다른 페이지로 이동하게 만드는 방식이다.

리다이렉트(Redirect)는 새로운 요청(Request) 객체와 응답(Response) 객체를 생성하여 웹 브라우저에게 새로운 URL을 전송하는 방식이다.
새로운 페이지에서는 HttpServlet에 의해 새로운 res, req 객체가 생성되기에 요청이 두 번 발생한다.

즉, 웹 브라우저는 새로운 URL을 받아서 해당 페이지로 이동하며, 이때 URL이 변경된다.

리다이렉팅이 실행되면?

만약 리다이렉팅이 실행되면 해당 값을 찾아가며 리다이렉팅했다고 이를 브라우져에게 알려준다.
이는 상태코드 302번이며, location Header에 담겨서 브라우저를 통해 전송된다.
평소였다면 HTTP 헤더에 200번 OK가 가야 하지만, 302번이 갔기에 다음과 같은 과정을 수행한다.

  1. location의 Header를 찾는다.
  2. 브라우저가 Header에 담긴 'login.jsp'를 찾은 뒤, 이를 서버에 요청한다.
  3. 서버는 해당 값을 찾아 응답해준다.

주소값은 마지막 2번을 기준으로 바뀐다.
그리고 이러한 요청 요소들은 공유 자원을 통해 전달된 것이 아니기 때문에 다른 서블릿 등이 참조할 수 없다.

새롭게 알게 된 사실

리다이렉팅은 페이지를 새로 만들어내는 것이기 때문에 공유영역에 저장된 값 역시 초기화된다.
JSP로 웹 사이트를 제작하다가 알게되었음!

profile
안녕하세요.

0개의 댓글