redirect와 forward
예를 들어 우리가 물건을 샀는데 해당 물건에 문제가 있어서
고객센터에 전화를 했다고 가정해보자
전화를 받은 상담원에게 문제사항에 대해 전달을 했을 때
상담원이 대답할 수 있는 선택지는 두가지이다
첫째, 네 00건에 대한 00내용을 확인하고 처리하도록 하겠습니다
둘쨰, 네 00건에 대한 00내용은 00부서 전담이여서 해당 부서로 연결 도와드리겠습니다
자 여기서 두번째 선택지로 안내가 된다면 우리는 해당 부서로 연결이 될 것이고 해당부서에서 다시한번 더 설명을 해야한다
그러니까 총 2번의 설명이 필요해지는 것이다
이것이 쉽게 생각하면 redirect라고 보면된다
그렇다면 forward는 무엇일까?
우리가 고객센터에 연락을 해서 00건에 대한 00문제를 요청했을 때
상담사가 00건에 대한 00내용을 확인해서 답변을 드리겠다고 했지만 실제로 그 일을 처리하는 부서는 따로 존재한다
하지만 그것을 굳이 고객에게 설명해서 2번의 일처리를 만들지 않고 자체적으로 내가 전달한 내용을 해당부서에 전달하고
해당부서에서 넘어온 답변을 상담사가 전달받아서 정리해서 고객에게 다시 전달하는 것이다
실제로는redirect처럼 상담사가 요청받은 일은 해당부서에서 처리를 하는 것이지만 고객에게 알리지않고
자체적으로만 처리해서 1번의 요청 그리고 1번의 답변으로 일처리를 하게 되는 것이다
반면 redirect는 2번의 요청을 해야하고 2번의 응답을 받아야한다
이러한 차이가 존재하는다는 것을 간단한 예시를 통해 알아봤다
자 그림을 보면서 설명해보면
앞서 예시를 들었을 때는 2번의 요청을 수동으로 고객이 해야한다고 했지만 실질적으로
브라우저에서는 최초의 요청은 수동으로 이뤄지지만 두번째 요청은 자동으로 진행이 된다
첫번째로 write.jsp라고 요청을 한다 이때 get,post 어떤 방식이든 상관이 없다
그러면 300번 에러가 나와서 redirect하라고 한다 이것이 응답헤더인데 바디가 존재하지는 않는다
다른 URL로 요청하라는 300번대 에러가 나오면 브라우저는 자동으로 해당 URL로 재요청을 하게된다
이때 요청하는 것이 자동으로 진행되는 것이다 재요청에서는 자동으로 진행되는 것과 무조건 GET방식으로만
진행된다는 특이점이 있다
POST방식이 아닌 GET방식으로 진행되고 기존 request와 두번째 request는 다른것이니
두개의 요청이 근본적으로 같지 않다는 것을 알고있어야한다.
브라우저내에서 자동으로 재요청을 통해서 응답을 받게 되는 것이지 클라이언트가 하는 것이 아니다
클라이언트는 최초의 단 한번의 요청만 하게 되고 300에러가 나오면 브라우저내에서 자동으로 재요청을 하는 것
이것을 꼭 기억해야한다
정리하자면 2번의 요청 그리고 2번의 응답 -> redirect 라고 알아두자
반면에 foward는 1번의 요청 그리고 1번의 응답으로 끝난다
예를 들어 고객이 분실신고를 위해 카드사에 전화를 했는데 전화를 받은 쪽이 한도조회만 담당하는 부서라고 했을 때
고객에게 잘못전화했다던지 해당 부서로 연결해줄테니 다시 말을 하라고 하지 않고
조용히 내부적으로 분실신고부서에 해당 내용을 전달하고 분실신고부서에서 요청받은 내용의 응답을 고객에게 하게 되는 것이다
이미지처럼 고객이 request를 write.jsp에 하면 잘못된 곳에서 요청을 받아도
그 request를 저장해서 response 즉 응답과 함께 login.jsp에 전달하고 해당 login.jsp에서 응답을 고객에게 하게 되는 것이다
이게바로 MVC패턴이라고 할 수 있는데
고객이 요청하면 컨트롤러가 받아서 모델에게 전달하고 모델이 그 요청을 view에게 전달해서 view가 다시 고객에게 응답을 하게 되는것이다
forward를 통해서 MVC패턴을 사용할 수 있게 되는 예시이다