티스토리 뷰
음 톡방에서 PRG라는 생소한 단어가 언급되어 찾아보았다.
Post Redirect Get
이 패턴은 웹 개발에 권장되는 패턴 중 하나라고 하며,
Post 요청에 대한 처리가 끝마치면 새로운 URL을 GET 방식으로 다시 Redirect를 하는 패턴이다.
왜 해야할까 ?
예시를 들어보자.
주문 정보를 입력 후(/order) 마지막에 [확인] 버튼을 누르면
결제 및 주문서 등록이 되는 페이지(/order/finish)가 있다고 생각해보자.
submit 버튼을 누름으로써 /order 페이지에서 /order/finish 페이지로 이동된 상황이다.
이때 /order/finish 페이지에서 주문이 완료되었다는 텍스트가 보여진다.
이 페이지에서 새로고침을 누르면 어떻게 될까?
주문을 1개 완료한 상태에서 그대로 새로고침한다면 다시 동일한 주문 데이터가 서버에 추가될 것이다.
Post 전송은 파라메터로 넘겨준 데이터를 그대로 들고 있기 때문에 새로고침 시 동일한 처리가 진행된다.
이를 방지하려면 ?
/order/finish 페이지에서 모든 데이터 처리가 종료되었다면
/order/finish_result 페이지로 Redirect 하여 제2의 페이지에서 주문 완료를 보여주는 것이다.
/order/finish_result 페이지에서 아무리 새로고침을 하여도 주문 데이터는 추가되지 않는다.
그림으로 쉽게 살펴보자
첫번째 사진은 Redirect를 하지 않으면 처리되는 흐름이다.
새로고침을 할 때마다 주문 정보가 계속 추가될 수 밖에 없다.
두번째 사진은 새로고침을 여러번 하여도 Redirect로 인해
주문을 처리하는 페이지와 다르므로 주문 정보가 추가 되지 않는다.
Post 요청에 대한 데이터를 처리했다면 302 Redirect를 잊지말자.