왜 굳이 Redirect를 쓸까?

김설영·2022년 6월 25일
0

MyDiscussions

목록 보기
3/4

회원 가입 후에, 왜 굳이 Redirect로 홈을 보내야 할까?

보통, @ControllerString을 반환하는데, 이는 뷰의 "논리 이름"이다. 스프링에서 지정해준 prefix(보통 /resources/templates이다.)와 suffix(보통 .html이다.)을 논리 이름과 조합하여, 우리의 컨트롤러 맵핑 결과를 뷰 템플릿으로 보내어 화면에 출력해준다.

보통, @GetMapping@PostMapping의 맵핑 url은 동일하게 주어진다. 즉, form 형식으로 데이터를 보낼 때 action을 빈 값을 주어 동일한 url 내에서 두 가지 메소드를 처리하게 만든다.

그렇다는 것은, 우리가 @PostMapping으로 데이터를 받아 저장한 후,
뷰 템플릿으로 "화면만 전환"한다면, url은 변경되지 않은 채로 화면만 바뀌어있게 된다.

그 상태에서 새로고침을 누르면, 마지막에 처리되었던 요청이 다시 요청되어,
post method로 form 형식의 data가 다시 전송된다.

이렇게 되면, 중복 회원가입이 되거나, 상품이 무한정 등록되는 등, 아주 치명적인 에러를 발생시킬 수 있다.

그렇기 때문에, 아예 redirect를 사용하여 다른 url(동일 url도 괜찮다.)로 보내버린 후, 해당 url이 @GetMapping이 되도록 만들어줘야 한다.

이렇게 POST -> Redirect -> GET 형태로 이루어지는 패턴을 "PRG 패턴"이라고 한다.

profile
블로그 이동하였습니당! -> https://kimsy8979.tistory.com/

0개의 댓글