[Spring] PRG 패턴

jinsung·4일 전

Spring

목록 보기
11/11
post-thumbnail

먼저 PRG 패턴이 뭔가요?

PRG 패턴은 Post/Redirect/Get의 줄임말로, 클라이언트가 POST 요청으로 데이터를 변경한 뒤 바로 결과 화면을 반환하지 않고, Redirect를 통해 GET 요청으로 결과 페이지를 다시 조회하게 만드는 웹 개발 패턴이다.


상품 도메인 흐름 예시

상품을 등록하면 상품이 조회되고 상품 상세로 가는 플로우를 예로 들어보자!!!!!


웹 브라우저의 새로고침은 마지막 요청을 다시 수행하는 개념이다.
상품을 등록하고 마지막 API는 POST로 상품을 저장할 것이고, 새로고침시 계속 중복 저장이 될 것이다.

  1. 상품 등록 페이지를 조회한다.(GET)
  2. 상품을 서버에 저장하고 상품 상세 페이지로 보낸다.(POST)
  3. 새로고침시 마지막 POST API가 다시 호출된다.(데이터 중복)

그럼 이 중복 문제를 어떻게 해결할 수 있을까???

PRG 패턴 적용

상품 등록 페이지에서 상품을 서버에 POST API 호출 후 저장한다. PRG 패턴을 적용하면 상품 상세 페이지로 리다이렉트 시키고 그 상품의 상품 상세 페이지를 조회한다. 그 후 새로고침을 하면 마지막 API인 GET API가 호출돼 상품 상세 페이지가 계속 조회될 것이다.

  1. 상품 등록 페이지를 조회한다.(GET)
  2. 상품을 서버에 저장하고 상품 상세 페이지로 리다이렉트 시킨다.(POST)
  3. 상품 상세 페이지를 조회한다.(GET)
  4. 새로고침시 마지막 GET API가 다시 호출된다.(데이터 중복 x)

RedirectAttributes

PRG 패턴을 적용할 때 리다이렉트 URL에 값을 전달해야 하는 경우가 있다.

예를 들어 상품을 등록한 뒤, 등록된 상품의 상세 페이지로 이동하려면 저장된 상품의 id가 필요하다.

@PostMapping("/add")
public String addItem(
					@ModelAttribute Item item, 
					RedirectAttributes redirectAttributes) {
    Item savedItem = itemRepository.save(item);

    redirectAttributes.addAttribute("itemId", savedItem.getId());

    return "redirect:/basic/items/{itemId}";
}

profile
Backend Engineer

0개의 댓글