HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
🆚
VS 모음
/
🆚
리다이렉트 vs 포와드
🆚

리다이렉트 vs 포와드

 
 
forward : 서버 내에서 처리할 페이지를 연결해 주는 작업
  • request, response객체가 있을때 forward하는 방법
request.getRequestDispatcher("foward_ret") .forward(request, response);
@GetMapping(”forward”)
요청정보에서 forwarding 페이지에 해당하는 새로운 requestDispatcher를 꺼내서 forward 메서드에 요청정보와 응답정보를 모두 집어넣는다.
즉, foward_ret의 매핑은 forward가 받은 요청정보 혹은 forward에서 새롭게 추가된 요청 정보를 활용할 수 있다.
브라우저의 입장에서 요청을 forward로 한 것이기 때문에 브라우저의 url은 변경되지 않는다.
 
 
redirect : 브라우저에게 새로운 요청을 요구하는 작업
 
  • request, response객체가 있을때 redirect하는 방법
response.sendRedirect("redirect_ret");
@GetMapping(”redirect”)
응답정보만을 가지고 sendRedirect해버린다.
브라우저에서 새로운 요청을 한 것이기 때문에 브라우저의 url도 변경이되고 데이터를 전달할 수 없다.
 
 
redirect를 사용하여 페이지 이동을 할 경우, 네트워크상에서 데이터를 유실하므로 서블릿간 이동을 통해 데이터를 이동해야할 땐 반드시 forward를 사용해야한다.

package com.example.demo.controller; import com.example.demo.entity.User; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @Slf4j @Controller public class HomeController { @PostMapping(value = "/forward") public String forward(@ModelAttribute User user) { log.info("forward, {}", user); return "forward:/forward_ret"; } @PostMapping(value = "/forward_ret") public String forward_ret(){ return "user"; } @PostMapping(value = "/redirect") public String redirect(@ModelAttribute User user){ log.info("redirect, {}",user); return "redirect:/redirect_ret"; } @GetMapping(value = "/redirect_ret") public String redirect_ret(Model model){ if(model.getAttribute("user")==null){ model.addAttribute("user", new User("no user object in model",11)); } return "user"; } }
 
<!DOCTYPE html> <html lang="kr"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="forward" method="post"> 이름 : <input type="text" name="name"/> <br> 나이 : <input type="text" name="age"/> <input type="submit" value="포와드"> </form> <form action="redirect" method="post"> 이름 : <input type="text" name="name"/> <br> 나이 : <input type="text" name="age"/> <input type="submit" value="리다이렉트"> </form> </body> </html>

포와딩 시연

notion image
→
브라우저의 주소 : foward
브라우저의 주소 : foward
notion image

리디렉션 시연

notion image
→
브라우저의 주소 : redirect_ret, 데이터 전달되지 않음
브라우저의 주소 : redirect_ret, 데이터 전달되지 않음
두개의 브라우저 요청
두개의 브라우저 요청
 
첫번째 요청인 redirect의 응답을 살펴보자
302 Temporarily Moved, Location: 리디렉션 주소
302 Temporarily Moved, Location: 리디렉션 주소
 
 
PRG패턴 - POST -> REDIRECT -> GET
주문 POST → Rdirect X
POST →광클 → 주문 400개