해결된 질문
작성
·
135
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
Post/Redirect/Get 설명에서 웹 브라우저 새로고침시 POST요청이 다시 간다는게 이해가 안됩니다
설명하신것 처럼 버튼 클릭으로 POST요청을 보낼 때
버튼을 클릭 해야 POST요청, 단순 웹브라우저 새로고침은 GET요청이 될 거라고 생각 됩니다
예시) 만약 리뷰 조회 -> 리뷰 작성 버튼 -> 리뷰 등록 버튼을 통해 새로운 리뷰를 등록한다고 가정하면
GET /reviews : 리뷰들 조회
GET /reviews/new : 리뷰 작성 화면 조회 (리뷰 작성 버튼 클릭시)
POST /reviews/new : 리뷰 등록 (리뷰 등록 버튼 클릭 시)
단순 웹브라우저 새로고침을 하면 2번 요청이 간다고 생각하는데 3번 요청을 누른 후에 새로고침을 한다고해서 3번 요청이 다시 적용된다는 것이 이해가 가질 않습니다 ㅠㅠ 버튼을 다시 클릭하는 것이 아닌데
답변 2
1
안녕하세요. ideal0427 김상형님, 공식 서포터즈 OMG입니다.
강의에서 영한님이 말씀하시지만, 새고로침은 마지막(직전) 요청을 서버로 다시 보내는 것이기 때문에 직전요청이 POST라면 POST요청이 동작하는게 맞습니다.
우리가 사용하는 일반적인 웹 브라우저 환경에서 새로고침을 사용하는 사례가 페이지에 진입하여 무언가의 이유로(오류 혹은 초기화 등 ) 새로고침을 하는데요, 이 때의 최신 요청은 화면에 진입하기 위한 GET요청이기 때문에 새로고침 = 화면을 새로 불러온다 라고 생각하여 GET만을 생각하기 쉬울 것 같습니다.
하지만 강의 설명처럼 직전요청을 다시 서버로 보내는 개념으로 이해하시면 될 것 같습니다.
참고로, 다음 강의인 MVC1편에서 PRG에 대한 예시를 스프링 코드로 설명드립니다.
감사합니다.
1
안녕하세요, 인프런 AI 인턴입니다.
님의 궁금증을 해소하기 위하여 관련된 링크를 제공해 드립니다.
Post/Redirect/Get (PRG) 패턴에 대한 의문을 해결하시는 데 도움이 될 내용을 찾았습니다. 작성자님이 언급한 바와 같이, 일반적인 사용자 인터랙션으로 웹 페이지에서 특정 액션(예: 폼 제출)을 수행하고 나서 웹 브라우저를 새로 고침할 경우, 많은 사용자들이 기대하는 것이 ‘페이지를 다시 로드한다’는 것이지 ‘동일한 작업을 반복한다’는 게 아닙니다. 하지만, HTTP의 동작 방식상, 폼 제출과 같은 POST 요청 직후에 페이지를 새로 고침하면, 그 POST 요청이 브라우저에 의해 재실행 될 수 있는 문제가 있습니다. 이를 방지하기 위해 PRG 패턴이 사용됩니다.
관련 내용에 대해서는 “redirect이유가 궁금합니다.” 글에서 상세하게 다루고 있으니 참고하시면 좋을 것 같습니다. 이 글에서는 왜 시스템에 변화를 주는 요청(예: 로그인, 회원가입, 글쓰기 등) 후에는 리다이렉트 방식을 활용하는 것이 바람직한지 설명하고 있습니다. POST 요청 후 리다이렉트(GET 요청)으로 넘어가는 프로세스를 통해 사용자가 브라우저를 새로 고침하더라도 동일한 POST 요청이 반복되지 않아 중복 동작을 방지할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
친절한 답변 감사드립니다