해결된 질문
작성
·
197
·
수정됨
답변 1
2
안녕하세요. 오르골님, 공식 서포터즈 David입니다.
POST 요청의 응답으로 basic/item이 응답되는 이유는 해당 영상의 초반부에서 자세히 설명하고 있습니다.
POST /add의 요청결과로 basic/item 뷰가 제공되고 있습니다. basic/item 뷰가 제공되기 때문에 응답결과 화면으로 입력 폼이 아닌 수정 폼이 보이는 것입니다.
즉, HTTP 메서드가 GET, POST와 별개로 POST의 응답이 basic/item 뷰로 응답하고 있는 것이 문제가 되는 것입니다. POST /add를 호출한 상태로 URL이 변하지 않고 basic/item 뷰로만 응답이 오고 있는 상태로는 새로고침에 의해 아이템이 생성되는 문제가 있습니다.
이를 방지하기 위해 redirect를 사용하여 생성된 아이템의 상세 화면으로 브라우저가 요청을 다시 하도록 하는 것입니다.
헷갈리신다면 해당 영상을 반복하여 수강하시길 권장드리며 그래도 이해되지 않는 부분은 질문 남겨주시면 언제든 답변 드리겠습니다🙂
감사합니다.
요청 URL과 응답 뷰를 헷갈리신 같습니다.
V4 POST /add를 요청하면 응답으로 basic/item이라는 문자열을 반환하고 있습니다.
이는 templates/basic/item.html을 응답결과로 반환하는 것입니다.
즉, V4의 POST /add 요청은 templates/basic/item.html을 응답결과로 반환하는 것입니다.
따라서, 이전 답변에서 POST /add의 요청결과로 basic/item 뷰(templates/basic/item.html)가 제공되고 있다고 한 것입니다.
아울러, 아이템 목록 페이지는 GET /basic/items 요청을 서버로 보냅니다. 이 요청을 컨트롤러에서는 어떤 응답(뷰)을 제공하는지 확인해 보시면 좋을 것 같습니다.
제가 착오가 있었네요. 말씀하신 답변이 맞습니다.
제 착오를 고쳐서 다시 질문하자면,
"GET요청으로 파라미터를 보내서 처리 했다면 url이 바뀌어지니 굳이 리다이렉트를 리턴값에 넣지 않아도 되었을까요?"
가 되겠네요.
새로운 질문에 대한 답은 그렇다 가 되지 않을까 생각하네요.
해주신 답변 덕분에 궁금증이 해결되었습니다. 감사드립니다.
데이비드 선생님 친절하고 상세한 답변 감사드립니다.
해주신 답변을 잘 읽어보았습니다. 그런데 답변에 제가 이해되지 않는 부분이 있어서 답글을 남깁니다.
해주신 답변에는, "POST /add의 요청결과로 basic/item 뷰가 제공되고 있습니다. basic/item 뷰가 제공되기 때문에 응답결과 화면으로 입력 폼이 아닌 수정 폼이 보이는 것입니다."
라고 하셨는데,
basic/item 뷰는 목록보기 페이지입니다.
(영상에 0:30 초에 '목록으로' 버튼을 누른걸 보시면 확인가능 합니다)
수정폼의 뷰 페이지는 오히려 수동적으로 이전 작업 페이지의 주소를 그대로 이어받아버린 basic/items/add 로써, 상품등록(상품수정에서 상품등록)시에 마땅한 페이지가 할당이 되지 않았네요.