사실 지금까지 진행한 상품 등록 처리 컨트롤러는 심각한 문제가 있다.

상품 등록을 완료하고 웹 브라우저의 새로고침 버튼을 클릭해보면 상품이 계속해서 중복 등록되는 것을 확인할 수 있다.

 

웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송한다.

상품 등록 폼에서 데이터를 입력하고 저장을 선택하면 POST /add +  상품 데이터를 서버로 전송한다.

이상태에서 새로고침을 또 선택하면 마지막에 전송한 POST /add + 상품 데이터를 서버로 다시 전송한다.

그래서 내용은 같고, ID만 다른 상품 데이터가 계속 쌓이는 현상이 생긴다.

 

이 문제를 어떻게 해결해야 할까?

 

새로고침 문제를 해결하려면 상품 저장 후에 뷰 템플릿으로 이동하는 것이 아니라, 상품 상세 화면으로 리다이렉트를 호출해주면 된다.

웹 브라우저는 리다이렉트의 영향으로 상품 저장 후에 실제 상품 상세 화면으로 다시 이동한다. 따라서

마지막에 호출한 내용이 상품 상세 화면인 GET/ items/{id}가 된다.

이후 새로고침을 해도 상품 상세 화면으로 이동하게 되므로 새로고침 문제를 해결할 수 잇다.

 

    @PostMapping("/add")
    public String addItemV5(Item item){
        itemRepository.save(item);
        return "redirect:/basic/items/"+item.getId();
    }

상품 등록 처리 이후에 뷰 템플릿이 아니라 삼품 상세 화면으로 리다이렉트 하도록 코드를 작성해보았다.

 

이런 문제 해결 방식을 PRG Post/Redirect/GET 이라고 한다.

'웹프로그래밍 > 스프링 MVC' 카테고리의 다른 글

61. RedirectAttributes  (0) 2022.04.20
59. 상품 수정  (0) 2022.04.19
58. 상품 등록 처리 - @ModelAttribute  (0) 2022.04.19
57. 상품 등록 폼  (0) 2022.04.18
56. 상품 상세  (0) 2022.04.18

+ Recent posts