그럼에도 검색 기능에 GET 방식을 쓰는 이유가 있다
GET 방식은 쿼리 파라미터에 정보가 담겨있다.
그래서 URL을 쉽게 공유할 수 있다.
새로 고침과 뒤로 가기 기능을 사용하면 쉽게 요청을 다시 보낼 수 있다.
브라우저의 히스토리에 저장되므로, 사용자가 페이지 이동 후 뒤로 가기를 눌렀을 때 동일한 요청을 다시 보낼 수 있다.
브라우저는 새로 고침을 하면 마지막 요청을 다시 전송한다.
이로 인해 중복된 요청이 발생할 수 있으며, 이는 의도하지 않은 결과를 초래할 수 있다.
이 문제를 해결하기 위해 POST 요청 후 결과 페이지를 GET 요청으로 리디렉션할 수 있다.
사용자들은 로딩으로 인해 여러 번 요청하는 경우도 있다.
한 번의 요청만 보내지도록 프런트엔드에서 중복된 요청을 방지해야 한다.
PRG 패턴은 Post/Redirect/Get 의 줄임말이다.
post 응답을 get으로 리다이렉션해서 해결할 수 있다.
@PostMapping("/submit")
public String handlePostRequest(@RequestParam String data, RedirectAttributes redirectAttributes) {
// 데이터 처리 로직
redirectAttributes.addAttribute("data", data);
return "redirect:/result";
}
@GetMapping("/result")
public String showResult(@RequestParam String data, Model model) {
model.addAttribute("result", "Processed data: " + data);
return "resultPage"; // JSP, Thymeleaf 등 뷰 이름 반환
}
브라우저는 post -> redirect -> get 순서에서 get 만 히스토리에 기록된다.
뒤로 가기는 히스토리를 기반으로 접근하기 때문에 post 이전의 히스토리를 참고하게 된다.