Redirect와 Foward
Redirect 방식
Redirect는 일상생활에서의 예를 떠올려보면 이해가 쉽다. 어떤 고객이 상담을 위해 100번으로 전화를 걸었는데, 상담사가 "담당 부서가 아니므로 해당 부서인 200번으로 문의를 해주세요." 하였다. 고객은 다시 200번으로 문의 전화를 건다. Redirect는 이러한 상황과 같다.
Redirect는 다른 URL로 재요청해주고, 300번대이며 응답 헤더(header)만 있고 body는 존재하지 않는다. Redirect의 과정은 다음과 같다.
1. 클라이언트가 요청(수동)
2. 응답 헤더에 Location(어디로 요청해야할지)을 정보로 전달
3. 브라우저는 해당 Location 정보를 통해 자동으로 새로운 요청(처음 요청이 GET였거나 POST 였는지에 상관없이 이때 요청은 GET 방식)
최종적으로 요청이 2번, 응답이 2번임을 알 수 있고, 이때 처음 클라이언트가 요청을 보낼 때의 request 객체와 브라우저가 자동으로 요청해줄 때의 request 객체는 다르다는 것에 주의한다.
Forward 방식
Forward 방식 마찬가지로 먼저 일상생활 속에서의 예를 떠올려본다. 고객이 상담을 위해 100번으로 전화를 걸었는데, 자동으로 담당 부서인 200번으로 자동으로 연결해준다.(혹은 상담사가 해당 부서에게 응답을 받아 직접 처리) 여기서의 차이는 우리가 한 번의 전화를 통해 두 번 다시 직접 걸지 않아도 내부적으로 자동으로 처리해준다는 것에 있다.
Forward 방식의 처리 과정은 다음과 같다.
1. 클라이언트가 요청
2. 해당 jsp 페이지가 처리해야할 게 아닌 경우(이때 전달하기 전 일부를 처리해줄 수도 있음) 요청에 해당되는 jsp 페이지로 전달(request 객체를 그대로 전달하며 response 객체도 같이 전달)
3. 전달받은 jsp 페이지에서 response 객체를 이용해서 응답
최종적으로 1번의 요청만 있었을 뿐 클라이언트는 내부적으로 어떻게 처리됐는지는 모른다.
※ Forward 방식은 전달해주는 페이지는 Controller, request 객체는 Model, 응답해주는 페이지는 View에 해당하므로 MVC 패턴을 따른다고 할 수 있다.