PRG (Post/Redirect/Get)

김학준·2024년 6월 17일
0

게시판

목록 보기
19/44

JoinController.javajoin()에서 리다이렉트를 하는 이유는 무엇일까? 만약 리다이렉트를을 하지 않았다고 해보자. 회원 가입을 한 페이지에서 새로 고침을 한 후 DB를 확인 해보면 회원이 또 추가됐다는 것을 알 수 있다. 새로고침을 할 때마다 기존 입력한 회원이 계속해서 추가되는 것이다. 왜 이런 현상이 발생하는 것일까?

결론부터 말하자면 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송하는 작업을 한다. 그렇기 때문에 POST /auth/join.do + 회원 가입 폼에서 입력한 회원 데이터 이 작업이 계속해서 반복된다. 따라서 회원 내용은 같고 member_seq만 증가한 Member의 데이터가 계속 DB에 추가된다. 여기에서 왜 리다이렉트를 로그인 페이지(/loginPage.do)로 하는지 알 수 있다. 다시 로그인 페이지(/loginPage.do)로 이동하게 되면 아무리 새로고침을 해도 웹 브라우저는 그저 로그인 페이지(/loginPage.do)만을 보여주게 된다.

위와 같은 방식을 Post/Redirect/Get 줄여서 PRG라 하며 Spring의 redirect:이동할 주소와 더불어 RedirectAttributes 기능을 사용하게 되면 폼 전송 후 자동으로 리다이렉트 하게 된다.

0개의 댓글