All Day Tired

PRG, Redirect, Forward 본문

Back/Spring

PRG, Redirect, Forward

yu.dev 2025. 5. 21. 23:06

강의 듣다가 오 이거 학원에서도 배웠는데 해서 정리 겸 작성

학원 다닌지도 벌써 3년이네...;;

 

홈페이지가 있으면 form을 작성해서 저장 버튼을 눌러 내가 작성한 데이터를 저장하는 기능이 반드시 있을 것이다.

쇼핑몰만 하더라도 Q&A 글을 작성하고 저장한다.

 

PRG가 아닌 경우

PRG를 안 쓴다면

Q&A글을 남길 때 저장을 누르고 해당 Q&A로 이동하게 되더라고 주소창을 본다면 '/add'로 남아있을 것이다.

이 상태에서 새로고침을 누르면 다시 입력했던 내용이 똑같이 또 저장되고, 또 저장되고, ... 반복...

이러한 상황을 피하기 위해 쓰는 것이 PRG(POST Redirect GET)

 

PRG인 경우

이것이 PRG 형태

다른 점이 있다면 Controller에서 글을 저장하고 서버에서 Redirect를 해준다는 것.

Redirect를 해주면 서버에서 클라이언트에게 다른 URL로 이동하라고 응답을 보내 주소창을 보면 다른 주소로 바뀌게 된다.

이렇게 되면 다른 URL로 페이지가 이동 되었기때문에 새로고침을 누르더라도 바뀐 URL로 호출하기 때문에 다시 저장이 되는 등 같은 문제가 없어짐!

 

되도록이면 개발할 때 저장/수정 하면 PRG패턴을 쓰도록 하자

 

View를 이동하는데는 Forward도 있는데 Forward와 Redirect를 비교하자면

Redirect vs Forward
  Redirect Forward
방식 클라이언트에게 새 요청 지시(302 응답) 서버 내부에서 요청을 다른 리소스로 전달
URL 변경 O (주소창 바뀜) X (주소창 그대로)
요청 객체 유지 X (원래 POST 요청 데이터는 사라짐, 새 요청은 GET으로 시작) O (객체가 유지되기 때문에 새로고침을 하면 Q&A 글 작성한게 또 저장됨)
사용 목적 페이지 이동, 새 요청 유도 내부 자원 연결

'Back > Spring' 카테고리의 다른 글

MVC/MVC2/springMVC  (0) 2025.05.19
@Configuration(feat.싱글톤)  (0) 2025.01.02
싱글톤, 싱글톤 컨테이너  (2) 2024.12.31
스프링컨테이너, 스프링빈 등록/주입  (0) 2024.12.30
@Scheduler, cron표현식 사용  (0) 2024.10.27
Comments