두 메서드의 차이점이 헷갈려 구글링 하던 중, 깔끔하게 정리해주신 블로그가 있어, 해당 블로그의 내용을 바탕으로 내가 이해한 내용을 정리해두려 한다.
https://doublesprogramming.tistory.com/63
Redirect VS, Forward (Redirect와 forward의 차이)
Redirect VS, Forward (Redirect와 forward의 차이) JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능 사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보
doublesprogramming.tistory.com
Redirect와 Forward 두 메서드 모두 JSP 환경에서 작업중인 페이지에서 다른 페이지로 이동하는 페이지 전환기능이다.
해당 메서드의 차이점을 고객과 상담원으로 예시를 들어주셨는데, 아주 인상적이다.
클라이언트 : 고객
URL : 123번 (상담 전화번호)
서버 : 상담원
1. redirect
- 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
- 상담원은 고객에게 다음과 같이 이야기한다. "고객님 해당 문의 사항은 124번으로 다시 문의 부탁드립니다."
- 고객은 다시 124번으로 문의해서 일을 처리한다.
2. forward
- 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
- 상담원은 해당 문의사항에 대해 잘 알지 못해서, 옆의 다른 부서에 물어보고 해당 문의사항에 답을 얻는다.
- 상담원이 고객에게 문의사항에 답변해준다.
redirect

redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다. 이후 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다. (request2)
이후, 새로운 페이지에서 request, response 객체가 새롭게 생성된다. -> 이전의 요청 정보는 사라지게 됨
forward

forward 명령이 들어오면, 클라이언트는 내부 동작 상황을 알 수 없다. (실제로 URL이 옮겨졌는지 알 수 없다.)
웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL 정보는 볼 수 없다.
이때, 호출되는 페이지는 최초의 request, response 객체를 공유한다.
정리하자면,
| 구분 | redirect | forward |
| 동작 방식 | 클라이언트에게 새로운 요청을 유도 | 서버 내부에서 요청 전달 |
| URL | 새로운 URL로 바뀜 | 그대로 유지됨 |
| 요청/응답 객체 | 새 요청/응답 객체(request 는 유지 안됨) | 공유됨 (같은 객체) |
| 데이터 전달 | 전달 불가 | setAttribute() 로 전달 가능 |
| 성능 | 느림 (클라이언트 왕복) | 빠름 (서버 내부 이동) |
그럼 언제 redirect, 언제 forward ?
redirect 를 사용하는 경우는, 보통 가장 많이 쓰이는 패턴으로 PRG 패턴이 있다고 한다. (POST -> Response -> GET)
// POST로 등록 후
resp.sendRedirect("/student/list"); // ← 새로고침 시 POST 재전송 방지
forward 는 단순 뷰 렌더링이나, redirect 시 URL 파라미터에 데이터가 노출되는 경우를 방지할 때 사용한다.
resp.sendRedirect("/success.jsp?msg=회원가입성공");
다만 forward 사용 시, URL 이 유지되기 때문에, 클라이언트의 혼동 가능성이 있을수도 있다. 따라서 적절한 사용이 필요해보인다.
정리하자면,
시스템에 변화가 생기는 요청 (로그인, 회원가입, 글쓰기) -> redirect
시스템에 변화가 생기지 않는 요청 (단순 조회, 검색) -> forward
방식으로 사용하면 될 듯 하다.
'서블릿(Servlet)' 카테고리의 다른 글
| [Servlet] Front Controller 패턴 적용 (0) | 2025.04.23 |
|---|---|
| [Web] 서블릿(Servlet) 기본 구조 정리 (1) | 2025.04.21 |