PRG 패턴이란
PRG(POST-Redirect-GET) 패턴은 웹 애플리케이션에서 사용자가 데이터를 제출한 후 중복 제출을 방지하기 위해 사용되는 디자인 패턴이다.
순서는 다음과 같다:
POST: 사용자가 데이터를 제출하는 폼을 채우고 제출한다. 이때 POST 요청이 발생한다.
Redirect: POST 요청을 받은 후, 서버에서 데이터를 처리하고 작업이 완료되었다는 메시지나 결과를 사용자에게 보여주어야 할 때, 서버는 클라이언트에게 새로운 URL로 Redirect를 보낸다.
GET: 클라이언트(브라우저)는 서버에서 보낸 Redirect 명령을 받고, 새로운 URL에 대해 GET 요청을 보낸다. 이때 사용자에게 보여지는 페이지는 서버에서 보낸 Redirect 후의 새로운 URL에서 처리되는 페이지이다.
이 패턴을 사용하는 이유는 브라우저의 새로고침을 통한 중복 제출을 방지하기 위함이다. 사용자가 폼을 제출한 후 새로고침을 하면 이전 요청이 다시 실행되어 중복 작업이 발생할 수 있다. PRG 패턴을 사용하면 POST 요청으로 데이터를 처리한 후에 사용자에게 새로운 페이지를 보여주는 것이 아니라, Redirect를 통해 GET 요청을 보내어 중복 제출 문제를 방지할 수 있다.
RedirectAttributes
Spring과 같은 프레임워크에서는 RedirectAttributes를 사용하여 Redirect 시 데이터를 전달하고, 이를 통해 PRG 패턴을 구현할 수 있다.
@PostMapping("/redirect-test")
public String redirectTest(Item item, RedirectAttributes redirectAttributes) {
Item savedItem = itemRepository.save(item);
redirectAttributes.addAttribute("itemId", savedItem.getId());
redirectAttributes.addAttribute("status", true);
return "redirect:/basic/{itemId}";
}
예를 들어 위 코드를 실행하면 다음과 같은 리다이렉트 결과가 나온다.
RedirectAttributes를 사용하면 URL 인코딩, pathVariable, 쿼리 파라미터를 처리해준다.
출처: 김영한, 「스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술」, 인프런
'Web > Spring Boot' 카테고리의 다른 글
Slf4j 사용하기 (0) | 2024.10.24 |
---|---|
테스트 케이스 작성하기 (0) | 2024.10.24 |
스프링 MVC 요청과 응답 (0) | 2024.01.05 |
스프링 MVC 구조 (0) | 2024.01.05 |
Front Controller 패턴 (0) | 2024.01.04 |