검색 기능은 POST 가 아닌 GET 을 쓰는 이유

이재훈·2024년 8월 1일

POST, GET 모두 서버에 데이터를 전송할 수 있다

그럼에도 검색 기능GET 방식을 쓰는 이유가 있다

GET을 쓰는 이유

GET 방식은 쿼리 파라미터에 정보가 담겨있다.
그래서 URL을 쉽게 공유할 수 있다.
새로 고침뒤로 가기 기능을 사용하면 쉽게 요청을 다시 보낼 수 있다.
브라우저의 히스토리에 저장되므로, 사용자가 페이지 이동 후 뒤로 가기를 눌렀을 때 동일한 요청을 다시 보낼 수 있다.

POST 새로 고침 시 문제가 있다

브라우저는 새로 고침을 하면 마지막 요청을 다시 전송한다.
이로 인해 중복된 요청이 발생할 수 있으며, 이는 의도하지 않은 결과를 초래할 수 있다.
이 문제를 해결하기 위해 POST 요청 후 결과 페이지를 GET 요청으로 리디렉션할 수 있다.

POST 방식은 어쨌든 사용해야 한다

사용자들은 로딩으로 인해 여러 번 요청하는 경우도 있다.
한 번의 요청만 보내지도록 프런트엔드에서 중복된 요청을 방지해야 한다.

문제 해결법

1. PRG 패턴으로 해결하기

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 이전의 히스토리를 참고하게 된다.

0개의 댓글