JSP 환경에서 현재 작업 중인 페이지에서 다른 페이지로 이동하는 두 가지 방식의 페이지 전환 기능인 forward와 redirect가 무엇이고 이 둘이 어떠한 차이가 있는지 확실히 알기 위해 이번 글을 작성하게 되었다.
1. 사례를 통한 둘의 차이점
첫 번째 사례 (redirect)
- 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
- 상담원은 고객에게 다음과 같이 이야기한다. "고객님 해당 문의 사항은 124번으로 다시 문의해주시겠어요?"
- 고객은 다시 124번으로 문의해서 일을 처리한다.
두 번째 사례 (forward)
- 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
- 상담원은 해당 문의사항에 대해 잘 알지 못해서 옆의 다른 상담원에게 해당 문의사항의 답을 얻는다.
- 상담원은 고객에게 문의사항을 처리해 준다.
그렇다면 redirect와 forward의 차이점이 무엇인지 구체적으로 알아보자.
2-1. forward
- web container 차원에서의 페이지 이동, 실제로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다. (두 번째 사례의 경우, 고객은 상담원이 누구한테 물어봤는지 알 수 없다.)
- 웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL 정보는 볼 수가 없다. (두 번째 사례의 경우, 고객은 123번으로만 전화했기 때문에 알 수 없다.)
- 동일한 web container에 있는 페이지로만 이동이 가능하다.
- 현재 실행 중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다. (고객이 요청한 문의사항은 고객이 전화를 끊을 때까지 유효하다.)
위처럼 forward 방식은 다음 이동할 URL로 요청 정보를 그대로 전달한다. 말 그대로 forward(건네주기) 하는 것이다. 그렇기 때문에 사용자가 최초로 요청한 요청 정보는 다음 URL에서도 유효하다.
2-2. redirect
- web container는 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다. (첫 번째 사례의 경우, 고객은 전화를 끊고 124번으로 다시 전화를 건다.)
- 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다.
- 다른 web container에 있는 주소로 이동이 가능하다. (123 -> 124)
- 새로운 페이지에서는 request, response 객체가 새롭게 생성된다. (123번에서 고객이 요청했던 문의사항은 사라지고 124번으로 다시 걸어서 요청한 문의사항을 다시 말해야 한다.)
위처럼 redirect의 경우 최초 요청을 받은 URL1에서 클라이언트에 redirect 할 URL2를 리턴하고, 클라이언트에게 전혀 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다. 따라서 처음 보냈던 최초의 요청정보는 더 이상 유효하지 않게 된다.
3. 요약
Forward | Redirect |
- Response 처리의 주체는 WAS - WAS가 Request를 컨텍스트 내부에서 변경하고 다른 리소스에서 응답을 처리 |
- Response 처리의 주체는 Web Browser - WAS에서 받은 Response로 새로운 URL을 Request |
- One Resource(URL 기반 : 컨텍스트 내의 JSP, Servlet) - To Other Resource(URL 기반 : 컨텍스트 내의 JSP, Servlet, HTML 등) |
URL 기반의 모든 주소 |
RequestDispatcher.forward(); | HttpServletResponse.SendRedirect(); |
- 브라우저의 영향을 받지 않음. - 웹 컨테이너 내부에서 동작 - request 정보가 유지되어 조회할 수 있음 |
- 클라이언트 혹은 브라우저가 처리 - URL을 기반으로 새롭게 서버에 요청 |
비즈니스 로직 처리에 주로 사용 | 페이지 요청을 다른 페이지로 전환 |
서버에서 처리하므로 지연이 일어나지 않으며 redirect보다 더 빠름 | 브라우저가 요청을 처리하므로 상황에 따라 지연이 발생할 수 있음 |
처음 요청 URL이 변경되지 않음 | 요청 변환에 따라 다른 URL로 변경될 수 있음 |
같은 컨텍스트에 있는 Resource만 사용 가능 | 다른 컨텍스트, 다른 서버로 변경 가능 |
출처 / 참고
https://velog.io/@bongf/learned-redirect-forward
forward, redirect 차이
1) return, forward, redirect 차이 호눅스 수업 2번에 걸쳐서 설명해줌 1-1) return return : 해당 html을 반환해주겠다는 의미 return은 뭐야. 그냥 모델과 뷰를 리턴해주는 것 ex.return "user"; 하면
velog.io
https://doublesprogramming.tistory.com/63
Redirect VS, Forward (Redirect와 forward의 차이)
Redirect VS, Forward (Redirect와 forward의 차이) JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능 사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보
doublesprogramming.tistory.com
'WEB' 카테고리의 다른 글
[WEB] 쿠키(Cookie)와 세션(Session) 이해하기 (3) | 2024.08.20 |
---|---|
[WEB] Apache와 Tomcat의 차이 이해하기 (0) | 2024.08.14 |
[WEB] Servlet과 JSP 이해하기 (0) | 2024.08.14 |