PRG 패턴

최창효·2023년 9월 5일
0
post-thumbnail
post-custom-banner

정의

  • PRG는 Post - Redirect - Get의 약어입니다. PRG패턴은 Post요청을 처리한 뒤 Redirect를 통해 Get요청으로 변환하는 패턴을 말합니다.

사용해야 하는 이유

  • PRG패턴은 멱등성보장을 위해 사용됩니다. PRG패턴을 사용하지 않을 때 Post요청을 새로고침하면 이전의 요청이 다시 한번 전송되는 문제가 발생할 수 있습니다.
  • PRG패턴을 이용해 Post요청을 처리한 뒤 Get요청페이지로 Redirect하면 사용자가 새로고침을 눌려도 Post요청이 다시 전송되지 않습니다.

사용 예제

Servlet환경이라면

@NoArgsConstructor
public class OrderController extends HttpServlet { // /order로 매핑된 상태

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            response.sendRedirect("/order"); // 아래 있는 doGet을 호출하게 됨
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher rd = request.getRequestDispatcher(LabelFormat.PREFIX.label() + fileName + LabelFormat.SUFFIX.label());
        rd.forward(request, response);
    }
}

Spring환경이라면

@Controller
class TestController {

    @PostMapping("/pay")
    public String pay(){
        // 결제 로직
        return "redirect:/success"; // get요청으로 redirect
    }

    @GetMapping("/success")
    public String success(){
        return "success";
    }
}

References

profile
기록하고 정리하는 걸 좋아하는 개발자.
post-custom-banner

0개의 댓글