공부노트/JSP

[JSP] Redirect , Forward (둘은 무엇이며, 각각 언제 사용할까?)

Reload0213 2021. 12. 10. 18:20

Redirect & Forward (Redirect와 Forward의 차이)

 

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

 

1. Forward

 

예시 )

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

2) 상담원은 해당 문의사항에 대해 잘 알지 못하여 옆자리에 있는 다른 상담원에게 문의사항에 답을 구한다.

3) 고객은 전화를 끊지 않은채로 옆에서 자문을 얻은 상담원에게 문의사항을 해결 받는다.

 

Forward의 경우

 

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

 

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

 

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

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

Users user = new Users(5, username, password, email);
		request.setAttribute("user", user);
		RequestDispatcher dis = request.getRequestDispatcher("joinCompleteDis.jsp");
		dis.forward(request, response);

 

2. Redirect

예시 )

1) 고객이 고객센터로 상담원에게 070-1234 로 전화를 건다.

2) 상담원은 고객에게 다음과 같이 이야기한다. " 고객님 해당 문의사항은 070-2345으로 다시 문의 해주셔야합니다."

3) 고객은 전화를 끊고, 다시 070-2345 으로 문의하여 문제를 해결한다.

 

Redirect의 경우

 

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

 

- 웹 브라우저는 URL을 지시된 주소로 변경하여 그 주소로 이동한다.

 

- 다른 web container에 있는 주소로 이동이 가능하다. ( 070-1234 => 070-2345 )

 

- 새로운 페이지 에서는 request, response객체가 새롭게 생성된다.( 070-1234 번호로 요청했던 문의사항은 소멸하고

070-2345 으로 다시 전화하여 요청한 문의사항을 다시 문의해야만 한다.)

 

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

response.sendRedirect("joinComplete.jsp");

 

 

위 2가지 방식을 정리 해보자면 다음과 같다.

Forward는 객체의 재사용성이 강한 방식이고 URL의 변화가 없다. ( 객체의 재사용 O , URL변화 X )

반대로 Redirect는 URL의 변화가 있으며 객체의 재사용성이 없다. ( 객체의 재사용 X , URL 변화 O)

 

그렇다면 게시판 애플리케이션을 작성한다고 생각해보자. 사용자가 보낸 요청정보를 이용하여 글쓰기 기능을 수행하는 응답 페이지를 만들어야한다면 Forward와 Redirect 중 어느 것을 사용하는것이 맞을까?

 

정답은 Redirect 이다.

 

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