본문 바로가기

Web

[Web] Forward 와 Redirect

Servlet & JSP 환경에서 웹은 현재 작업중인 페이지에서 다른 페이지로 이동하기 위해 두 가지 페이지 전환 기능을 제공한다. 바로 Forward 방식과 Redirect 방식이다.

 

[Forward]

e.g)

  1. 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
  2. 상담원은 해당 문의 사항에 대해 잘 알지 못해서 옆의 다른상담원에게 해당 문의 사항에 대한 답을 얻는다.
  3. 상담원은고객에게 문의 사항을 처리해준다.

포워드 방식은 웹 컨테이너 차원에서 페이지의 이동만 존재한다. 실제로 웹 브라우저는 다른 페이지로 이동했음을 알 수 없다. 그렇기 때문에 웹 브라우저에는 최초에 호출한 URL이 표시되고, 이동한 페이지의 URL 정보는 확인할 수 없다. 또한, 현재 실행중인 페이지와 forward에 의해 호출될 페이지는 Request 객체와 Response 객체를 공유한다.

 

img

 

위와 같이 forward는 다음으로 이동할 URL로 요청 정보를 그대로 전달한다. 그러므로 사용자가 최초로 요청한 요청 정보는 다음 URL에서도 유효하다.

 

예를 들어 게시판을 작성하는 과정에서, 사용자가 보낸 요청 정보를 이용하여 글쓰기 기능을 수행하는 경우, forward를 사용하여 응답 페이지를 부르면 다음과 같은 문제가 발생하게 된다. 만약 사용자가 실수 혹은 고의로 글쓰기 응답 페이지에서 새로고침을 누른다면, 요청 정보가 유지되어 있기 때문에 요청이 여러 번 전달되어 동일한 게시물이 여러 번 등록될 수 있다. 그렇기 때문에 시스템에 변화가 생기지 않는 단순 조회 요청(글 목록 보기, 검색)과 같은 경우 forward로 응답하는 것이 바람직하다.

 

[Redirect]

e.g)

  1. 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
  2. 상담원은 고객에게 다음과 같이 이야기한다. "해당 문의 사항은 124번으로 다시 문의 해주시겠어요?"
  3. 고객은 다시 124번으로 문의해서 일을 처리한다.

 

Redirect는 웹 컨테이너로 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라고 명령을 내린다. 그러면 웹 브라우저는 URL을 지시된 주소로 바꾸고 해당 주소로 이동한다. 다른 웹 컨테이너에 있는 주소로 이동하며, 새로운 페이지에서는 Request와 Response 객체가 새롭게 생성된다.

 

img

 

Redirect의 경우 최초 요청을 받은 URL1에서 클라이언트에게 redirect할 URL2를 반환하고, 클라이언트에서는 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다. 그러므로 처음 보냈던 최초의 Request와 Response 객체는 유효하지 않고 새롭게 생성이 된다.

 

게시글을 작성하는 과정에서 사용자가 보낸 요청 정보를 이용하여 글쓰기 기능을 수행한다고 할 때, redirect를 사용하여 응답 페이지를 부르면 사용자가 실수 혹은 고의로 글쓰기 응답 페이지에서 새로고침을 누르더라도 처음의 요청 정보는 존재하지 않으므로 게시글이 여러 번 등록되지 않는다. 그렇기 때문에 시스템에 변화가 생기는 요청 (글쓰기, 회원가입 등)의 경우에는 redirect 를 사용하는 것이 바람직하다.

 

 

 

 

 

 

 

Reference

https://doublesprogramming.tistory.com/63

https://mangkyu.tistory.com/51

'Web' 카테고리의 다른 글

[Web] Servlet & JSP  (0) 2020.10.04