웹 폼 제출 후 새로고침이나 뒤로 가기로 인해 데이터가 중복으로 제출되는 문제를 방지하는 방법이다.
폼 제출 후 서버에서 결과 페이지가 아닌 다른 페이지로 리다이렉트 시키고 결과를 보여준다.
점프 투 스프링 부트 3 을 공부하면서 특정 패턴이 보여서 찾아보았다.
POST 동작을 하게되는 페이지에서 입력값을 검증하는데 사용되는데 GET 과 함께 사용되고 있는 것이다.
@GetMapping
public String createPost(CreatePostRequest request) {
return "post_new";
}
@PostMapping
public String createPost(@Valid CreatePostRequest request, BindingResult bindingResult) {
if (bindingResult.hasErrors()) { // 무결성 위반시 반환
return "post_new";
}
postService.savePost(request);
return "redirect:/"; // 성공시 리다이렉트
}
이 코드에서는 폼을 전송했을 때 에러가 발생하면 다시 원래 폼으로 돌려주는 방식이다.
성공적으로 제출했을 경우 리다이렉트로 이중 제출을 방지할 수 있다.
이렇게 폼 제출 후에 발생하는 문제들을 해결하는데 사용하는 패턴이 PRG 패턴이라고 한다.