Home Spring MVC - PRG(Post/Redirect/Get) 패턴
Post
Cancel

Spring MVC - PRG(Post/Redirect/Get) 패턴

PRG(Post/Redirect/Get) 패턴

Alt text

위와 같은 흐름으로 요청이 전달된다고 가정 했을떄, 요청에 대한 흐름을 자세히 표현하면 아래 그램과 같음

Alt text

웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송함. 상품 등록 폼에서 데이터를 입력하고 저장을 하게되면 POST /add + 상품 데이터를 서버로 전송함. 이 상태에서 새로 고침을 하게 되면 마지막에 전송한 POST /add + 상품 데이터를 다시 서버로 전송하게 됨. 그러므로 내용이 같은 상품 데이터가 계속 쌓이게 되는 문제가 있음.

이 문제는 리다이렉트를 활용하여 해결할 수 있음

Alt text

웹 브라우저의 새로고침은 마지막에 서버에 전송한 데이터를 다시 전송함. 그러므로 이 문제를 해결하기 위해 상품 저장 후 뷰 템플릿으로 이동하는 것이 아닌 상품 상세 화면으로 리다이렉트를 호출하도록 해야 함.

웹 브라우저는 리다이렉트의 영향으로 상품 저장 후에 실제 상품 상세 화면으로 다시 이동함. 따라서 마지막에 호출한 내용이 상품 상세 화면인 GET /items/{id} 가 되어 새로고침이 발생해도 반복적으로 데이터가 쌓이는 것을 방지할 수 있음.

1
2
3
4
5
6
7
@PostMapping("/add")
public String addItem(Item item, RedirectAttributes redirectAttributes) {
  Item item = reepository.save(item);
  redirectAttributes.addAttribute("itemId", savedItem.getId());
  redirectAttributes.addAttribute("status", true);
  return "redirect:/basic/items/{itemId}";
}

참고

  • 스프링 MVC - 백엔드 웹 개발 핵심 기술(김영한)
This post is licensed under CC BY 4.0 by the author.