PRG 패턴
Post/Redirect/Get의 약자로, 폼 제출 후 브라우저 새로고침이나 뒤로 가기로 인한 중복 요청을 막기 위해 POST 처리 결과를 리다이렉트로 응답하는 디자인 패턴입니다.
핵심 특징
- 멱등성이 보장되지 않는 POST 요청에 주로 적용
- 브라우저는 마지막으로 전송한 요청을 새로고침 시 재전송하는데, POST 대신 GET을 재전송하도록 만들어 중복 제출을 방지
- 302(또는 303) 응답과
Location헤더로 리다이렉트를 수행
동작 흐름
1. Post : 클라이언트 → 서버, POST 요청으로 폼 제출 → 서버가 데이터 처리(저장 등)
2. Redirect : 서버 → 클라이언트, 302 Found + Location 헤더로 새 URL 응답
3. Get : 클라이언트 → 서버, 응답받은 URL로 GET 요청 → 결과 페이지 반환
PRG 패턴이 없을 때의 문제
사용자가 주문 버튼 클릭 → POST /orders 전송 → 주문 생성
사용자가 새로고침(F5) → 브라우저가 마지막 요청(POST /orders) 재전송
→ 주문이 중복 생성됨
PRG 패턴을 적용하면 POST 처리 후 브라우저 주소창에 남는 요청이 GET이 되므로, 새로고침해도 GET만 재전송되어 중복 생성이 발생하지 않습니다.
핵심 정리
PRG 패턴은 POST의 부작용(중복 제출)을 리다이렉트를 이용해 GET으로 전환함으로써 방지하는 패턴으로, 폼 기반 웹 애플리케이션에서 널리 사용됩니다.