Post

forward, include, redirect 비교

JSP 환경에서 페이지에서 작업 중일 때 다른 페이지로 이동하는 방식에 대해 알아보자.

각 예제를 통해 어떤 식으로 작동되는지 알아보자.

만약 고객이 상담원에게 전화해 문제를 해결하고 싶다고 가정해보자.

고객은 클라이언트, 상담원 번호는 URL, 상담원은 서버가 된다.

forward의 경우

  1. 고객이 고객센터로 123번 상담원에게 전화를 건다.
  2. 고객의 요청을 처리하기 위해 123번 상담원은 124번 상담원에게 요청을 넘겨준다.
  3. 124번 상담원이 요청을 처리하고 고객에게 응답을 해준다.

여기서 고객은 상담원이 바뀐 사실을 알지 못한다는 점과 고객이 요청한 정보(데이터)가 공유된다는 점이 특징이다.

redirect의 경우

  1. 고객이 고객센터로 123번 상담원에게 전화를 건다.
  2. 123번 상담원이 고객의 요청을 처리할 수 없으니 124번 상담원을 연결해주겠다고 응답한다.
  3. 124번에게 연결시켜준 뒤 124번 상담원이 요청을 처리해준다.

redirect의 경우 123번 상담원에서 124번 상담원으로 전환될 때 새로운 요청을 보낸다는 점과 새로운 상담원이 누구인지 알 수 있다는 점이다.

forward VS redirect

forward

  • 서버 내에서만 이루어지고, 클라이언트는 이를 인지 못함
  • forward가 발생하면, 현재 실행 중인 JSP 페이지나 서블릿이 요청을 처리하는 도중에 다른 JSP 페이지나 서블릿으로 제어를 넘김
  • 클라이언트에게는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL 정보는 볼 수 없다.
  • forward로 전달된 데이터는 동일한 HTTP 요청 내에서 공유되므로, 서버 측에서 데이터를 공유하고 재사용하는 데 유용하다.

redirect

  • 클라이언트에게 새로운 요청을 보내고 새로운 URL로 이동시킨다.
  • 클라이언트는 새로운 요청을 받아들이고, 서버는 새로운 페이지에 대한 응답을 반환한다.
  • 이 과정에서 URL이 변경되고, 클라이언트는 새로운 URL로 이동한다.
  • redirect는 외부 URL로도 이동할 수 있다.
  • redirect는 다른 도메인으로의 이동이나 외부 사이트로의 이동에 유용하다.

이와 같은 특징을 가지고, 큰 차이점은 두가지로 나눌 수 있다.

  1. URL의 변화여부 (redirect - 변화, forward는 변화 X)
  2. 객체의 재사용 여부 (redirect는 재사용 X, forward는 재사용)

이런 점을 잘 생각해 적절한 방식을 선택해 사용해야된다.

보통 시스템(session, DB)에 변화가 생기는 요청의 경우 redirect 방식으로 응답하는 것이 일반적이고, 시스템에 변화가 생기지 않는 단순조회의 경우 forward 방식으로 응답한다.

include

include는 보통 forward와 비교한다.

forward의 경우 현재 페이지의 요청과 응답에 대한 제어권을 새로운 URL에 넘겨준다. 하지만 include의 경우 현재 페이지에 include한 URL의 페이지 내용을 포함한다.

include의 경우 페이지에 대한 요청을 진행하다 include문을 만나게 된다면 include로 지정한 URL로 넘어가 요청을 처리한다. 그리고 해당 URL의 처리가 끝난다면 다시 원래 페이지로 돌아가 다시 이어서 요청을 처리해준다.

forward의 경우 제어권을 완전히 넘겨주는 반면, include는 다른 페이지의 내용을 현재 페이지에 통합하는 것이다.

forward는 제어의 이동도 포함되지만, include는 페이지의 내용만을 처리한다.

즉, include는 페이지에 삽입한다고 이해하면 편하다.

이런 특성을 이용해 보통 Header와 footer를 삽입해줄 때 사용한다.

출처)

https://doublesprogramming.tistory.com/63ssadfsfafdsfa

This post is licensed under CC BY 4.0 by the author.