해당 글은 매일메일 서비스를 이용하면서 받은 질문에 대한 공부 내용을 적은 글입니다.
만약 잘못된 내용이 있으면 댓글로 남겨주세요!
매일메일 - 기술 면접 질문 구독 서비스
기술 면접 질문을 매일매일 메일로 보내드릴게요!
www.maeil-mail.kr
PRG 패턴이란
PRG 패턴은 HTTP 메소드 중 POST의 응답이 GET 요청을 위한 URI로 리다이렉트 되는 것을 의미합니다.

이러한 패턴을 도입하는 이유는 멱등성과 관계가 있습니다. 멱등성이란 동일한 작업을 여러번 수행해도 그 결과가 달라지지 않는 것을 의미합니다. 이때 HTTP 메서드가 멱등성을 가진다는 것은 해당 메서드의 요청을 여러번 반복해도 서버의 상태가 한번 실행한 결과와 동일한 상태를 유지한다는 것을 의미합니다.
그런데 POST는 멱등하지 않은 메소드입니다. 이때 웹 브라우저에서 새로고침은 마지막에 서버에 전송한 데이터를 다시 전송하게 되므로 글 작성, 결제와 같은 POST 요청들이 여러 번 요청되게 되면 심각한 문제가 발생할 수 있습니다.
그래서 POST 요청이 오게되면 서버에서는 클라이언트에게 3XX의 상태코드와 함께 리다이렉트 시킬 URI를 전송합니다.
그러면 클라이언트에서는 해당 URI로 GET 요청을 보내면서 사용자가 새로고침을 하더라도 POST 요청이 전송되지 않습니다.
어떤 상태코드를 사용해야 할까
https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Redirections
Redirections in HTTP - HTTP | MDN
URL redirection, also known as URL forwarding, is a technique to give more than one URL address to a page, a form, a whole website, or a web application. HTTP has a special kind of response, called a HTTP redirect, for this operation.
developer.mozilla.org
위 문서의 내용을 확인해보면 아래와 같이 소개합니다.

302는 리다이렉트 할 때 GET으로 변경할 수도 있고 안 할 수도 있습니다.
하지만 303의 경우에는 무조건 GET으로 변경합니다.

추가적으로 위와 같이 소개하고 있습니다. 즉, PRG 패턴을 적용할 때 303 상태코드를 사용하라는 뜻입니다.
하지만 많은 블로그에서 보통 302를 사용하라고 소개하고 있습니다.
해당 이유는 잘 모르지만 과거에는 주로 302를 사용했다고 합니다. 하지만 302의 경우 브라우저마다 동작이 다를 수도 있고 GET으로 바뀌는 것이 일관되지 않으므로 303을 권장하고 있습니다.
'CS' 카테고리의 다른 글
| 동기/비동기, 블로킹/논블로킹은 무엇이고 각각의 차이점은 무엇인가요? (0) | 2025.10.08 |
|---|---|
| @Async는 어떻게 동작하나요? (0) | 2025.10.06 |
| 컴퓨터의 병렬 처리 기술 (5) | 2025.07.27 |
| [매일메일] 객체 지향 프로그래밍이란 무엇이고, 어떤 특징이 있나요? (0) | 2025.03.31 |