Redirect vs Forward

한강섭·2025년 3월 30일
0

Redirect

웹 브라우저가 www.naver.com/post/abcd 라는 url로 요청을 웹서버로 보냈을때, 다른 url을 지시하는것

클라이언트는 서버로 부터 받은 응답 값이 상태코드 302라는 것을 보고 서버가 리다이렉트를 시킨거라는걸 알 수 있다.

여기서 보통 클라이언트는 웹 브라우저라고 생각하면 된다.

private void regist(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException {
    // 1. 폼에서 전달된 데이터 가져오기
    String code = request.getParameter("code");
    String name = request.getParameter("name");
    int price = Integer.parseInt(request.getParameter("price"));
    String manager = request.getParameter("manager");
    String beans = request.getParameter("beans");

    // 2. 데이터 객체 생성
    Coffe coffe = new Coffe(code, name, price, beans, manager);

    // 3. DB에 저장
    coffeService.insert(coffe);

    // 4. 목록 페이지로 리다이렉트 (새로운 요청 발생)
    response.sendRedirect(request.getContextPath() + "/coffe?action=list");
}

Forward

클라이언트가 url에 대한 요청이 들어오면, 해당 url이 다른 url로 건네주는 행위를 포워딩이라고 하고,

HTTP로 요청을 받은 서버는 HTTP 응답 상태코드로 302를 보내고, 응답 메시지 헤더 중 Location 값으로 리다이렉트 되어야 할 주소를 설정해 리턴한다.

현재 실행중인 페이지와 Forwarding에 의해 호출될 페이지는 Request와 Response 객체를 공유한다.

객체를 요청에 담고 해당 요청을 사용할 다음 자원에 전송한다는 뜻이다.

포워딩이 일어나면 클라이언트 단에서는 아무런 동작을 하지 않으며, 모든 동작을 서버에서 처리한다.

그래서 사용자가 최초로 요청한 URL 및 요청정보는 바뀌지 않는다.
다음 url 에서도 유효한것이다.

private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException {
    // 1. 데이터 조회
    List<Coffe> coffeList = coffeService.selectAll();

    // 2. 조회된 리스트를 request에 저장
    request.setAttribute("list", coffeList);

    // 3. JSP로 요청을 전달 (forward) - 새로운 요청 발생 X
    request.getRequestDispatcher("coffe/list.jsp").forward(request, response);
}

Forward와 Redirect의 차이점

  1. 리다이렉트는 url 주소가 달라지고, 포워드는 url 주소가 달라지지 않는다

2. 리다이렉트는 request, response 객체가 여러 번 생성되고, 포워드는 한 번만 생성되어 재사용(공유)할 수 있다.

  1. DB에 변화를 주는 작업 (회원가입, 게시판 글쓰기등)의 경우 Redirect 방식으로 사용하고 시스템에 변화가 생기지 않는 작업 (단순 조회, 검색)의 경우 forward 방식이 적합하다.

정리

포워딩(Forwarding)과 리다이렉트(Redirect)는 JSP 환경에서 페이지에서 다른 페이지로 이동하는 페이지 전환 기능들이다.

Redirect의 경우 URL에 변화가 생긴다 처음에는 /RedirectTestServlet으로 URL 요청을 하였다면 응답으로 받은 경로인 /redirect-result.jsp로 요청을 다시 보낼 것이다. 따라서 새로운 request, response가 생성이된다.

Forward의 경우 /ForwardTestServlet으로 URL 요청을 하였다면 서버 내부적으로 Controller가 View에게 작업을 넘기고 View가 JSP 파일을 렌더링하여 결과 페이지로써 클라이언트에게 넘긴다. 이는 클라이언트가 알지 못한다. 따라서 URL 요청이 바뀌는것이 없다.


참고한 자료

Redirect VS Forward (리다이렉트와 포워드의 차이 )
출처: https://0soo.tistory.com/61 [Lifealong:티스토리]

[Servlet & JSP] Redirect vs forward 방식 비교
Redirect VS, Forward (Redirect와 forward의 차이)

profile
기록하고 공유하는 개발자

0개의 댓글