Redirect와 forward의 차이
jsp 환경에서, 현재 작업중인 페이지 다른 페이지로 이동하는 두가지 방식의 페이지 전환이 가능합니다.
- Forward
- 동일한 웹 컨테이너에 있는 페이지로만 이동할 수 있다.
- 현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request와 response 객체를 공유한다.
- Redirect
- 다른 웹 컨테이너에 있는 주소로 이동이 가능하다.
- 새로운 페이지에서는 request와 response객체가 새롭게 생성된다.
Redirect
1.1 개념
- Redirect(리다이렉트)는 클라이언트의 요청을 서버가 처리한 후, 새로운 요청을 클라이언트로 다시 보냅니다.
- 서버가 클라이언트에게 HTTP 상태 코드 302(임시 이동)과 함께 Location 헤더에 새 URL을 전달하면, 클라이언트는 새 URL로 다시 요청을 보냅니다.

1.2 특징
- 클라이언트가 새로운 요청을 보냄:
- 클라이언트는 기존 요청이 끝난 후, 새로 지정된 URL로 새 요청을 시작합니다.
- URL 변경:
- 브라우저의 주소창에 새로운 URL이 표시됩니다.
- 요청 데이터 손실:
- 이전 요청의 데이터는 유지되지 않습니다(새로운 요청이기 때문).
- 브라우저 캐싱 가능성:
- 브라우저는 리다이렉트 URL을 캐싱할 수 있습니다.
1.3 사용 사례
- PRG 패턴(Post/Redirect/Get):
- POST 요청 후 브라우저에서 새로고침(F5) 시 중복 요청을 방지하기 위해 리다이렉트를 사용.
- 로그아웃 처리:
- 로그아웃 후 메인 페이지로 이동.
- 외부 URL로 이동:
- 외부 사이트로 사용자를 리다이렉트.
@RequestMapping("/redirect")
public String redirectExample() {
return "redirect:/[newPage]"; //redirect: 접두사를 사용하면 클라이언트를 지정된 URL로 리다이렉트.
}
Foward
2.1 개념
- *Forward(포워드)는 서버가 클라이언트의 요청을 처리하다가, 같은 서버 내의 다른 리소스로 요청을 전달합니다.
- 클라이언트는 자신이 요청한 리소스가 다른 리소스로 처리되었음을 알 수 없습니다.

2.2 특징
- 서버 내부에서 요청 전달:
- 클라이언트가 다시 요청하지 않으며, 요청 데이터가 그대로 유지됩니다.
- URL 변경 없음:
- 브라우저의 주소창 URL은 초기 요청 URL로 유지됩니다.
- 빠른 처리:
- 추가적인 네트워크 요청 없이 서버 내부에서 바로 처리.
2.3 사용 사례
- 데이터 전달:
- 요청 데이터를 다음 리소스에서도 그대로 유지해야 할 때.
- 뷰 렌더링:
- 컨트롤러에서 JSP 파일로 직접 포워딩.
- 에러 처리:
- 특정 에러 페이지로 포워딩.
@RequestMapping("/forward")
public String forwardExample() {
return "forward:/[newPage]"; //forward: 접두사를 사용하면 서버 내에서 요청을 전달.
}
@RequestMapping("/redirectWithParams")
public String redirectWithParams() {
return "redirect:/newPage?status=success";
}
3. Redirect와 Forward의 주요 차이
특징 Redirect(리다이렉트) Forward(포워드)
| 동작 방식 | 클라이언트가 새 요청을 보냄 | 서버 내부에서 요청을 다른 리소스로 전달 |
| URL 변경 | URL이 변경됨 | URL이 변경되지 않음 |
| 요청 데이터 유지 | 유지되지 않음 (새로운 요청이 시작됨) | 유지됨 (원래 요청 데이터 그대로 전달) |
| 브라우저 관점 | 브라우저가 리다이렉트를 인식하고 새로운 요청을 보냄 | 브라우저는 요청이 다른 리소스로 포워드된 것을 알지 못함 |
| 사용 사례 | PRG 패턴, 외부 URL 이동 | 서버 내부 데이터 전달, 에러 페이지 렌더링 |
| 성능 | 네트워크 요청 추가로 약간 느림 | 서버 내부 처리로 상대적으로 빠름 |
Q.사용자가 보낸 요청 정보를 이용하여 글쓰기 기능을 수행하는 CGI가 있다면, 어느것을 사용해야 할까?
A.
이 응답 페이지는 redirection을 사용해야 한다.
사용자가 실수 혹은 고의로 응답 페이지에서 새로고침을 누를 경우 forward의 경우 요청 정보가 그대로 살아있기 때문에 똑같은 글이 여러번 등록될 수 있기 때문이다. 하지만 redirection의 경우 처음 글을 작성할 때 보냈던 요청 정보는 존재하지 않기 때문에 글쓰기가 여러번 수행 되지 않는다.
정리 하자면 시스템에 변화가 생길 수 있는 요청 (로그인, 회원가입, 글쓰기 등)의 경우 : redirection 방식으로, 시스템에 변화가 생기지 않는 단순 조회(글 목록, 검색 등)요청의 경우 : forwrad 방식으로 응답.
[참고]
'Backend > Spring' 카테고리의 다른 글
| [Spring Web MVC] HandlerInterceptor (0) | 2024.11.26 |
|---|---|
| [Spring Web MVC] WebMvcConfigurer (0) | 2024.11.26 |
| [Spring Web MVC] Session (0) | 2024.11.25 |
| [Spring Web MVC] 🍪Cookie (0) | 2024.11.25 |
| [Spring Web MVC] HTTP 요청 RequestMapping (0) | 2024.11.25 |