• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

범위 전송 질문입니다.

21.06.12 02:55 작성 조회수 135

0

안녕하세요 선생님. 항상 좋은 강의 잘듣고 있습니다

POST 같이 리소스 생성하는 곳에 범위전송을 걸면 중복으로 리소스 생성이 요청이되서 GET,PUT 같이 멱등성이 만족하는 메서드에만 써야될거 같은데 제가 생각한게 맞나요?

답변 1

답변을 작성해보세요.

5

OMG님의 프로필

OMG

2021.06.12

안녕하세요.

답변 드리기에 앞서 '범위 전송'이라는 용어가 애매하게 다가오는데요, 저는 '범위 전송' 이라는 용어 대신 '중복 요청'으로 바꿔서 설명드릴게요. 

제가 하는 설명이 틀렸다거나 말씀하신 '범위 전송'과 연관지어 답변이 필요하신 댓글 남겨주세요!영한님 께서  답변 남겨주실 것 같습니다.

,

POST 같이 리소스 생성하는 곳에 범위전송(*중복 요청*, *지속적인 반복 요청*)을 걸면 중복으로 리소스 생성이 요청이되서

=> 맞습니다. 예를 들어, 우리가 일반적으로 회원가입 혹은 상품 주문과 같은 데이터를 DB에 저장하는 요청의 경우 "POST" method를 사용합니다. 

GET,PUT 같이 멱등성이 만족하는 메서드에만 써야될거 같은데 제가 생각한게 맞나요?

=> 이 부분은 실제 저장에 관련한 처리를 해당 "POST" 요청에서 처리하고 "Redirect"를 호출하여 다시 저장 관련된 POST요청을 처리하게 끔 하는 것이 아니라 조회 화면으로 넘어가게끔 처리합니다.

예를 들어 볼게요, 인프런 회원가입 페이지에서 [가입] 버튼을 누르고 새로고침을 계속 요청하게 되면 동일한 데이터가 서버에 저장 될텐데요, 하지만 POST 요청 후 다시 POST 요청으로 넘어가는 것이 아니라 회원 가입 완료 되면 홈페이지 메인 화면으로 돌아가도록 처리한다면 [GET 요청으로 넘어가게끔] 이러한 문제가 발생하지 않을 것입니다.

이와 관련하여 'PRG패턴(Post-Redirect-Get)' 이라고 검색하시면 많은 자료들이 나올 것이고 스프링 완전 정복 시리즈에서 HTTP 이후 강좌인 스프링 MVC1편 강좌 에서 자세히 알려주시니 참고하세요^^ 

,

글 로만 설명 드린 거 같아 코드 예시도 첨부합니다^^ 

강의 명이 모든 개발자를 위한 HTTP인 만큼 닉네임인 백엔드개발자님이 자바, 스프링 개발자가 아닐 수도 있지 않을까 하여 한글 의사코드(Pseudo 코드) 작성해보았습니다.

@Post("/회원가입")
회원가입(회원, 에러정보) {

if (에러정보.에러가_존재하나요()) {
return "회원가입 페이지"; // 회원가입 페이지로 이동, 유효성 검사를 진행 하여 문제 발생 여부 확인
}
DB.save(
회원);
return "redirect:/메인화면"; // 회원을 저장하였다면 redirect를 하여 '/메인화면' 으로 이동하도록 구현
}