본문 바로가기
Coding/[Web] Backend

PRG 패턴 : Post → Redirect → Get

by Gofo 2023. 4. 3.

배경 : 멱등성

동일한 요청을 여러 번 연속해서 보낼 때

한번 보내는 것과 여러 번 연속해서 보내는 것의 결과가 같은 것을 의미한다.

 

GET, HEAD, PUT, DELETE는 멱등성을 가지지만,

POST는 멱등성을 가지지 않는다.

 

예시

GET 메소드를 연달아 호출해도 같은 결과를 나타내지만,

게시글을 등록하는 POST를 연달아 호출하면 호출한 횟수만큼의 게시글이 등록된다.

(별도 처리를 하지 않은 상황 기준)

 

혹은, Servlet에서 게시글 작성이나 주문을 POST로 전송 후

해당 요청에 대한 응답으로 redirect가 아닌 <pre>forward</pre>로 처리할 경우

새로고침 시 게시글 작성/주문이 중복해서 처리될 수 있다.

 

출처 :&nbsp;https://es.wikipedia.org/wiki/Post/Redirect/Get

 

PRG 패턴의 필요

회원가입, 게시글 등록, 메뉴 주문 등은 대부분 POST를 통해 이루어지기 때문에

새로고침을 한다해서 여러 번 저런 행위가 반복되어서는 안된다.

 

때문에 PRG 패턴이 권장된다.

 


PRG 패턴

웹 개발 시 권장되는 디자인 패턴으로

멱등성을 보장하고 POST에 대한 결과를 다른 사용자와 공유하기 위해 사용되는 패턴이다.

 

POST → Redirect → GET

의 패턴을 권장하기에 줄여서 PRG라고 한다.

 

POST 요청이 오면 해당 요청을 수행한 후 

Redirect를 시켜서

GET 요청으로 변환시키는 행위를 의미한다.

 

예시

게시글을 등록(POST)하는 요청을 보냈다면,

게시글 등록 후 해당 게시글이 다른 유저에게 보여지는 화면으로 redirect시키는 방법이다.

 

이런 방법을 사용하면

Redirect를 시킴으로써 새로고침을 하더라고 동일 행위가 중복 요청되지 않도록 방지할 수 있고

URL을 통해 요청을 보낸 사용자가 POST 요청의 결과에 해당하는 페이지를 다른 사용자와 공유할 수도 있다.

 

출처 :&nbsp;https://es.wikipedia.org/wiki/Post/Redirect/Get

 

'Coding > [Web] Backend' 카테고리의 다른 글

[SpringBoot] @Builder의 장점  (3) 2024.01.14
Singleton Pattern  (1) 2023.04.04
Entity, DTO, DAO, VO  (0) 2023.04.03
MVC 패턴 (feat. Servlet/JSP)  (0) 2023.04.03
Cookie, Session  (0) 2023.03.31

댓글