개요
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편 (김영한 강사님)
반응형
'면접 준비' 카테고리의 다른 글
도커 생명주기 (Docker Life Cycle) (0) | 2021.06.17 |
---|---|
도커와 마이크로 서비스 아키텍처 개요 (Docker & MSA) (0) | 2021.06.16 |
Front Controller 패턴 (0) | 2021.06.07 |
Servlet, JSP, MVC 패턴 (0) | 2021.06.04 |
서블릿 (Servlet) 간단 정리 (0) | 2021.05.28 |