본문 바로가기

WEB

[WEB]Forward와 Redirect의 차이

Forward와 Redirect

  • Forward와 Redirect는 작업 중이 페이지가 전환된다는 점에서 비슷한 역할을 하지만, 이 둘 사이에는 페이지를 전환하는 주체가 다르다는 큰 차이점이 존재하며, 이로인해 동작에 큰 영향을 미친다.
  • Redirect는 페이지 전환 주체가 클라이언트이며 Forward는 페이지 전환 주체가 서버이다.
  • 전환 주체가 클라이언트인 Redirect는 URL이 변경되며, 객체의 재사용이 불가하다.
  • 전환 주체가 서버인 Forward는 URL이 변경되지 않으며, 객체의 재사용이 가능하다.

Forward

  • Redirect와 다르게 Forward는 서버 내부에서 일어나는 호출이다.
  • 서버는 클라이언트의 요청을 수행하던 중 해당 페이지가 Forawrding 되어야 함을 알았으면, 수행중이던 페이지의 모든 내용을 버리고서 Forward될 URL로 이동을한 뒤 해당 URL에 제어권을 넘긴다.
  • 모든 동작을 서버에서 처리하기 때문에 URL은 물론 요청정보가 바뀌지 않으며, 이전페이지의 객체또한 재사용이 가능하다.

Redirect

  • Re-direct는 'URL을 다시 가리킨다'라는 뜻이다.
  • 서버는 클라이언트 요청을 처리하다 페이지가 Redirect가 될 경우 클라이언트에게 HTTP상태 코드중 3xx 번과 함께 리다이렉트될 URL을 전달하여 리다이렉션이 되어야함을 알린다.
  • 클라이언트는 상태코드와 전달받은 URL을 통해 서버에게 다시 Request를 하여 Redirect된 결과를 받아온다.
  • 즉 페이지의 전환 주체가 클라이언트이며, 클라이언트는 Redirect될 URL을 서버에게 다시 요청함으로써 결과를 얻어오기 때문에 URL이 변경되고, 이전 URL에서 사용하던 객체와는 접점이 없기 때문에 재사용이 불가하다.

왜 Forward는 객체의 재사용이 가능한데 Redirect는 불가능할까?

  • Servlet Container의 동작방식을 생각해보면 이해하기 한결 쉬워질것이다.
  • 클라이언트측이 요청하면 Container는 HttpServletRequest, HttpServletResponse 객체를 생성하고, 요청된 Servlet/JSP를 찾고 생성된 request, response 객체와 함께 Thread에 올린다. 이후 서버측은 요청을 처리하고 생성된 결과를 클라이언트에게 반환함과 동시에 request, response 객체를 소멸시킨다.
  • 그렇기 때문에 전환 주체가 Server인 forward인 경우에는 request, response객체를 유지하며 페이지를 이동할 수 있어 재사용이 가능하다.
  • 반면 전환 주체가 Client은 Redirect인 경우에는 Redirect를 위해 서버가 응답함과 동시에 request, response객체가 소멸되고 새로운 요청을 통해 페이지를 얻어오는 방식이기 때문에 객체의 재사용이 불가능하다.

참고하면 좋은 글

https://tatsu.tistory.com/entry/JSP-Servlet%EA%B3%BC-Container%EC%9D%98-%EA%B0%9C%EB%85%90

 

[JSP] Servlet과 Container의 개념

Applet Client Side 동작방식을 갖는다. 자바로 개발한 응용 프로그램을 웹 페이지와 함께 사용자측으로 보낼 수 있도록 만든 프로그램 클라이언트(브라우저)에서 호출시 클래스 파일이 클라이언트 P

tatsu.tistory.com

 

Forward와 Redirect의 사용

  • Forward : 특정 URL에 대해 외부에 공개되지 않아야 되는 부분을 숨기는데 사용하거나 조회를 위해 사용된다.
  • Redirect : 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용된다.
  • 예를들어 Forward는 게시판 조회와같이 사용자의 상태를 유지해, 어떤 글을 본 이후 계속해서 보던 위치부터 이어볼 수 있도록 사용자 편의를 제공한다.
  • 반면에 결제와 같이 민감한 DB작업을 수행하는 경우 Forward를 사용시 응답요청중 새로고침을 하게된다면 동일한 요청이 서버에 전송되어 중복결제가 될 수 있는 문제점이 있다. 따라서 Redirect를 통해 결제이후 새로운 요청을 서버에게 전달하도록 유도함으로써 이러한 문제점을 해결할 수 있다.

'WEB' 카테고리의 다른 글

[Network]쿠키와 세션  (0) 2023.03.10
[WEB]3-tier architecture와 WAS의 개념  (0) 2023.03.10
[WEB]정적 페이지와 동적 페이지  (0) 2023.03.10
[WEB]클라이언트 / 서버  (0) 2023.03.10
[WEB]웹의 동작방식  (0) 2023.03.10