티스토리 뷰

JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능

 

사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보자.

여기서 고객은 클라이언트이고, 123번은 URL이며, 상담원은 서버가 된다.

 

첫번째 사례(redirect)

1) 고객이 고객센터로 상담원에게 123번으로 전화를 건다.

2) 상담원은 고객에게 다음과 같이 이야기한다. "고객님 해당 문의사항은 124번으로 다시 문의 해주시겠어요?"

3) 고객은 다시 124번으로 문의해서 일을 처리한다.

 

두번째 사례(forward)

1) 고객이 고객센터로 상담원에게 123번으로 전화를 건다.

2) 상담원은 해당 문의사항에 대해 잘 알지 못해서 옆의 다른 상담원에게 해당 문의사항에 답을 얻는다.

3) 상담원은 고객에게 문의사항을 처리해준다.

 

그렇다면 redirect와 forward의 차이점이 무엇인지 구체적으로 알아보자.

 

1> forward

 

  • web container 차원에서의 페이지 이동, 실제로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다.(두번째 사례의 경우, 고객은 상담원이 누구한테 물어봤는지 알 수 없다.)

  • 웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL정보는 볼수가 없다.(두번째 사례의 경우, 고객은 123번으로만 전화했기 때문에 알 수 없다.)

  • 동일한 web container에 있는 페이지로만 이동이 가능하다.

  • 현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.(고객이 요청한 문의사항은 고객이 전화를 끊을 때까지 유효하다.)

forwar방식은 다음 이동한 URL로 요청정보를 그대로 전달한다. 말 그대로 forward(건네주기)하는 것이다. 그렇기 때문에 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효하다.

 

2> redirect

 

  • web container는 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다.(첫번째 사례의 경우, 고객은 전화를 끊고 124번으로 다시 전화를 건다)

  • 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다.

  • 다른 web container에 있는 주소로 이동이 가능하다.(123 -> 124)

  • 새로운 페이지에서는 request, response객체가 새롭게 생성된다.(123번에서 고객이 요청했던 문의사항은 사라지고 124번으로 다시 걸어서 요청한 문의사항을 다시 말해야한다.)

redirect의 경우 최초 요청을 받은 URL1에서 클라이언트에 redirect할 URL2를 리턴하고, 클라이언트에게 전혀 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다. 따라서 처음 보냈던 최초의 요청정보는 더이상 유효하지 않게된다.

 

다시 정리해보자면 redirect와 forward의 차이점은 크게 두가지로 나눌 수 있다.

첫째, URL의 변화여부(변화 O -> redirect, 변화 X -> forward)

둘째, 객체의 재사용여부(재사용 O -> forward, 재사용 X -> redirect)

 

위와 같은 차이점 때문에 웹 애플리케이션을 작성할 때 forward와 redirect 두 가지 방식 중 하나를 적절히 선택하여 사용해야한다. 예를 들어 게시판 애플리케이션을 작성한다고 해보자. 사용자가 보낸 요청정보를 이용하여 글쓰기 기능을 수행하는 CGI(Common Gateway Interface)가 있다면, 이 CGI의 응답 페이지는 forward와 redirect 중 어느 것을 사용해야 될까? 정답은 redirect이다. 

사용자가 실수 혹은 고의로 글쓰기 CGI응답 페이지에서 새로고침을 누르면 어떻게 될까? forward의 경우 요청정보가 그대로 살아있기 때문에 똑같은 글이 여러번 등록될 수 있다. 하지만 redirect의 경우 처음 글을 작성할 때 보냈던 요청정보는 존재하지 않는다. 또한 글쓰기 기능을 하는 URL1이 아닌 URL2로 요청을 보내기 때문에 글쓰기가 여러번 수행되지 않는다. 

즉, 시스템(session, DB)에 변화가 생기는 요청(로그인, 회원가입, 글쓰기)의 경우 redirect방식으로 응답하는 것이 바람직하며, 시스템에 변화가 생기지 않는 단순조회(리스트보기, 검색)의 경우 forward방식으로 응답하는 것이 바람직하다.

 

*출처

http://ripper.tistory.com/34

http://blog.naver.com/saintw/100165339381

'Web(국비) > JSP' 카테고리의 다른 글

[Java]onsubmit()이란?  (0) 2019.10.27
[JSP]-onchange란?  (0) 2019.10.27
[JSP]post방식 데이터 값 넘기기  (0) 2019.10.25
[JSP]RequestDispatcher인터페이스란?  (0) 2019.10.25
JSP-포워딩/리다이렉트 관련 문제  (0) 2019.10.24