11. PRG(Post/Redirect/Get)
μΉ λΈλΌμ°μ μ βμλ‘κ³ μΉ¨βμ λ§μ§λ§μ μλ²μ μ μ‘ν λ°μ΄ν°λ₯Ό λ€μ μ μ‘νλ€. μ΄κ²μ΄ λ¬Έμ κ° λ λκ° μλλ°, 컨νΈλ‘€λ¬μμ λΉμ¦λμ€ λ‘μ§ μν ν λ·° ν νλ¦ΏμΌλ‘ μ΄λμν€λ κ²½μ°λ₯Ό μκ°ν΄λ³΄μ.
μΆμ²: κΉμνμ μ€νλ§MVC (μΈνλ°)
μλ₯Ό λ€μ΄ βμν λ±λ‘βμ ν μ΄ν κ·Έ μνμ βμμΈνμ΄μ§βλ‘ λ°λ‘ μ΄λμν¨λ€κ³ κ°μ νλ©΄, μ¬μ©μκ° βμμΈνμ΄μ§βμμ μλ‘κ³ μΉ¨μ λλ₯Ό κ²½μ°, λ§μ§λ§μ μνν μμ μΈ βμν λ±λ‘βμ΄ μ€λ³΅μΌλ‘ μνλμ΄λ²λ¦°λ€.
- μλμ κ°μ΄ μ½λλ₯Ό μμ±ν κ²½μ° λ¬Έμ κ° λλ κ²μ΄λ€β¦
@PostMapping("/add")
public String addItemV1(@ModelAttribute Item item) {
//μν μ μ₯
itemRepository.save(item);
//λ·° ν
νλ¦ΏμΌλ‘ μ μ‘
return "basic/item";
}
π Β βμλ‘κ³ μΉ¨ λ¬Έμ β λ₯Ό ν΄κ²°νλ €λ©΄ μ΄λ»κ² ν΄μΌ νμ§ β¦ ?
π‘ Β μν λ±λ‘ μ΄νμ λ·° ν νλ¦ΏμΌλ‘ μ΄λμν€λ κ²μ΄ μλ, redirect νλλ‘ μ½λλ₯Ό μμ±νλ©΄ λλ€ !
ν΄λ΅ !
μΆμ²: κΉμνμ μ€νλ§MVC (μΈνλ°)
redirect λ‘ νμ΄μ§λ₯Ό μ΄λνκ² λλ©΄, μλ‘κ³ μΉ¨μ νμ λ λ§μ§λ§μΌλ‘ μνν μμ μ΄ GetMapping μ΄ λκΈ° λλ¬Έμ μν λ±λ‘μ΄ μ€λ³΅μΌλ‘ μνλλ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
λ€λ§ redirect νκ²λλ©΄ request μμμ λ°μ΄ν°κ° μ¬λΌμ Έλ²λ¦°λ€. λ°μ΄ν°λ₯Ό μ μ§ν νμκ° μμ λλ RedirectAttributes μ addAttribute λ©μλλ₯Ό μ¬μ©νμ.
RedirectAttributes λ pathVariable, 쿼리 νλΌλ―Έν°κΉμ§ μ²λ¦¬ν΄ μ€λ€.
λν κ°μ Έκ° λ°μ΄ν°λ₯Ό μΌνμ±μΌλ‘ μ¬μ©νκ³ μ νλ κ²½μ°μλ addFlashAttribute λ©μλλ₯Ό μ¬μ©ν μ μλ€. μ¬κΈ° λ΄μλ κ°μ μλ‘κ³ μΉ¨μ νλ©΄ νλ°λμ΄ μ¬λΌμ§λ€.
@PostMapping("/add")
public String addItemV2(@ModelAttribute Item item, RedirectAttributes redirectAttributes) {
//μν μ μ₯
Item savedItem = itemRepository.save(item);
//redirectν urlμ μλ‘ μμ±ν μμ΄ν
idλ₯Ό νλΌλ―Έν°λ‘ λ£κΈ° μν΄ itemId λ₯Ό μΆκ°νλ€.
redirectAttributes.addAttribute("itemId", savedItem.getId());
return "redirect:/basic/items/{itemId}";
}