Forward & Redirect


Redirect

redirect는 서버가 클라이언트에게 응답결과로 JSP나 HTML 같은 데이터가 아니라 요청할 주소를 응답 결과로 전달하는 것을 의미한다.

@GetMapping("/redirect")
public String redirect() {
    return "redirect:/sub";
}

위와 같이 return "redirect:/sub"; 리턴하면
브라우저가 직접 요청하는 것이기 때문에 sub.jsp가 실행되고 주소창의 주소도 변경된다.

스크린샷 2022-01-20 오후 10 21 01 1




Forward

forward는 코드의 흐름을 서버상에서만 이동하는 것이다.

스크린샷 2022-01-21 오후 12 20 07



차이점

redirect와 forward의 차이점은 크게 두 가지로 나눌 수 있다.

위와 같은 차이점이 있기 때문에 상황에 맞게 적절하게 선택할 수 있어야 한다.

예) 게시판 게시글 작성 사용자가 보낸 요청 정보를 이용해 글쓰기 기능을 수행해야 한다면 redirect를 사용해야 한다.
사용자가 계속 확인이나 완료 버튼을 누르면 요청 정보가 그대로 살아있으면 똑같은 글이 여러번 등록될 수 있기 때문이다.
redirect는 요청 정보가 남아 있지 않기 때문에 글쓰기가 여러 번 수행되지 않는다.

단순하게 시스템(session, DB)에 변화가 생기는 요청은 redirect 방식으로 응답하고
단순 조회의 경우 forward 방식으로 응답하는 것이 좋다.



Filter, Interceptor에서의 차이

redirect는 요청302 응답Location에 대한 요청Location에 대한 응답 으로 동작하기 때문에
필터에는 처음 요청한 URL과 리다이렉션된 URL 모두가 Filter와 Interceptor에 걸린다.

forward는 요청 → 서버 내에서 target URL로 요청 전달 → target URL에 대한 응답 이므로,
Interceptor는 두 URL에 대해 모두 동작하지만, DispatcherServlet 내부에서 포워딩되기 때문에
Filter에는 처음 요청한 URL만 걸린다. (Filter는 DispatcherServlet 바깥에 있음)