면접 준비

PRG 패턴 (Post/Redirect/Get)

꾸준함. 2021. 6. 14. 21:24

개요

PRG 패턴의 경우 실제 현업에서 자주 사용하므로 개념을 숙지할 필요성이 있습니다.

 

상황 설명

  • 아래의 그림과 같이 회원 등록 폼 페이지를 호출하는 컨트롤러 URL과 회원 등록하는 컨트롤러 URL이 동일하다고 가정 (HTTP Method로 구분)
  • 회원을 폼에 등록하면 해당 폼은 회원 등록하는 컨트롤러를 호출하고 해당 컨트롤러는 회원 개인정보 View를 호출하는 구조
  • 이때, 회원 개인정보 페이지의 URL은 여전히 회원 등록하는 컨트롤러 URL이므로 새로고침을 할 때마다 회원을 신규 등록하는 문제점이 발생 (회원을 구분 짓는 Primary Key가 BigInteger 타입이고 AutoIncrement라는 가정)

 

 

문제 해결방법

  • 앞선 상황에서 문제점은 회원 등록하는 URL에서 변하지 않은 상태에서 새로고침 했기 때문에 발생
  • 즉, URL이 바뀌어야 문제가 해결
  • 기존의 회원등록 컨트롤러는 forward 방식으로 회원 개인정보 View를 호출했으므로 URL 변동 X
  • 따라서, forward 방식이 아닌 아래와 같이 redirect 방식으로 View를 호출해야함

 

 

* forward는 서버 내부에서 일어나는 호출이기 때문에 URL이 바뀌지 않고 클라이언트가 인지 못함

* 반면, redirect의 경우 클라이언트에 응답이 나갔다가, 클라이언트가 redirect 경로로 다시 요청 (따라서, URL 경로도 변경됨)

 

비고

RedirectAttributes

  • URL 인코딩 및 @PathVariable, 쿼리 파라미터 처리해주는 객체
  • 추가된 속성이 pathVariable에 포함되면 PathVariable에 바인딩해주고 나머지는 쿼리 파라미터로 처리


 

출처

인프런 스프링 MVC 1편 (김영한 강사님)

 

반응형