PRG 패턴 개념 및 활용 (Post-Redirect-Get)

이재훈·2024년 8월 13일

개념

웹 폼 제출 후 새로고침이나 뒤로 가기로 인해 데이터가 중복으로 제출되는 문제를 방지하는 방법이다.
폼 제출 후 서버에서 결과 페이지가 아닌 다른 페이지로 리다이렉트 시키고 결과를 보여준다.

동작

  1. POST : 사용자가 폼을 제출하면, 서버에서 폼 데이터를 처리한다.
  2. Redirect : 폼 데이터가 성공적으로 처리되면 다른 페이지로 Redirect 한다. 이로 인해 브라운저는 새로운 GET 요청을 수행한다.
  3. GET : 사용자는 새로운 GET 요청에 의한 새로운 페이지를 보게 된다.

특징

  • 이중 제출 방지 : 사용자가 페이지를 새로고침이나 뒤로 가기 버튼으로 폼을 다시 제출하지 않도록 할 수 있다. 이는 브라우저의 동작을 알아볼 필요가 있다.
  • 무결성 검증 : 제출한 폼에서 잘못된 데이터에 대한 처리를 할 수 있다.
  • 사용자 경험 개선 : 화면이 바뀜으로서 폼 제출이 성공적으로 처리됨을 인지할 수 있다.

이 패턴을 사용하게 된 배경

점프 투 스프링 부트 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 패턴이라고 한다.

0개의 댓글