반응형
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
https://doublesprogramming.tistory.com/63
'WEB' 카테고리의 다른 글
[WEB] 쿠키(Cookie)와 세션(Session) 이해하기 (1) | 2024.08.20 |
---|---|
[WEB] Apache와 Tomcat의 차이 이해하기 (0) | 2024.08.14 |
[WEB] Servlet과 JSP 이해하기 (0) | 2024.08.14 |