Study/Web

PRG Post/Redirect/Get와 RedirectAttributes

YURIπŸ•πŸ“πŸΆ 2022. 5. 29. 23:48
λ°˜μ‘ν˜•

PRG Post/Redirect/Get

Post/Redirect/Get νŒ¨ν„΄μ€ μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜κ±°λ‚˜ λΈŒλΌμš°μ €μ—μ„œ λ’€λ‘œ ν™”μ‚΄ν‘œλ₯Ό 클릭할 λ•Œ μ€‘λ³΅λœ 양식 μ œμΆœμ„ λ°©μ§€ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.
Post λ°©μ‹μœΌλ‘œ 온 μš”μ²­μ— λŒ€ν•΄μ„œ Get λ°©μ‹μœΌλ‘œ μ›ΉνŽ˜μ΄μ§€λ₯Ό Redirect μ‹œν‚€λŠ” νŒ¨ν„΄μ΄λΌκ³  말할 수 μžˆλ‹€.

 

쀑볡 등둝 μ˜ˆμ‹œ

μ‚¬μš©μžκ°€ νšŒμ›κ°€μž…μ„ μ™„λ£Œν•œ λ‹€μŒ, λ°”λ‘œ 확인 νŽ˜μ΄μ§€λ‘œ μ΄λ™λœλ‹€κ³  κ°€μ •

  • μ‚¬μš©μžκ°€ νšŒμ›κ°€μž…μ„ μœ„ν•΄ νšŒμ›κ°€μž… νŽ˜μ΄μ§€λ‘œ 이동
  • νšŒμ›κ°€μž…μ— ν•„μš”ν•œ μ—¬λŸ¬ 데이터 μž…λ ₯
  • νšŒμ›κ°€μž… λ²„νŠΌ 클릭 (POST μš”μ²­)
  • νšŒμ›κ°€μž… 성곡 (μ„œλ²„μ—μ„œ νšŒμ›κ°€μž… 둜직 성곡)
  • νšŒμ›κ°€μž… 성곡 확인 νŽ˜μ΄μ§€λ‘œ 이동 (성곡 확인 νŽ˜μ΄μ§€λ‘œ forward)
  • μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ—μ„œ "μƒˆλ‘œ κ³ μΉ¨" λ˜λŠ” "λ’€λ‘œ"λ₯Ό 클릭
  • λ§Œμ•½ Post/Redirect/Get이 κ΅¬ν˜„λ˜μ§€ μ•ŠμœΌλ©΄ POST 양식(즉, νšŒμ›κ°€μž…)이 μ„œλ²„λ‘œ λ‹€μ‹œ 전솑됨. μ€‘λ³΅λœ 데이터 등둝
    • μƒˆλ‘œ κ³ μΉ¨ μ‹œ λ§ˆμ§€λ§‰μ— μ„œλ²„μ— μ „μ†‘ν•œ 데이터가 λ‹€μ‹œ μ „μ†‘λ˜κΈ° λ•Œλ¬Έ

μ΄λ•Œ λΈŒλΌμš°μ €λŠ” alert창으둜 μ‚¬μš©μžμ—κ²Œ 데이터λ₯Ό μ •λ§λ‘œ λ‹€μ‹œ 보낼 것인지 λ¬»μ§€λ§Œ, κ·ΈλŸ¬λ‚˜ μ§ˆλ¬Έμ„ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜κ³  λ‹€μ‹œ μ „μ†‘ν•˜κ²Œ λœλ‹€λ©΄ μ€‘λ³΅λœ 데이터가 μ„œλ²„μ— λ“±λ‘λ˜κ²Œ λœλ‹€.

 

ν•΄κ²° 방법

μ‚¬μš©μžκ°€ νšŒμ›κ°€μž…μ„ μ™„λ£Œν•œ λ‹€μŒ, λ°”λ‘œ 확인 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•œλ‹€κ³  κ°€μ •

  • μ‚¬μš©μžκ°€ νšŒμ›κ°€μž…μ„ μœ„ν•΄ νšŒμ›κ°€μž… νŽ˜μ΄μ§€λ‘œ 이동
  • νšŒμ›κ°€μž…μ— ν•„μš”ν•œ μ—¬λŸ¬ 데이터 μž…λ ₯
  • νšŒμ›κ°€μž… λ²„νŠΌ 클릭 (POST μš”μ²­)
  • νšŒμ›κ°€μž… 성곡 (μ„œλ²„μ—μ„œ νšŒμ›κ°€μž… 둜직 성곡 ν›„ 성곡 확인 νŽ˜μ΄μ§€λ‘œ forwardκ°€ μ•„λ‹Œ, μƒˆ URL둜 redirect - μƒνƒœμ½”λ“œ 3xx 포함)
  • νšŒμ›κ°€μž… 성곡 확인 νŽ˜μ΄μ§€λ‘œ 이동 (λΈŒλΌμš°μ €μ—μ„œ μ„œλ²„μ—κ²Œ λ‹€μ‹œ GET λ°©μ‹μœΌλ‘œ 성곡 확인 νŽ˜μ΄μ§€ μš”μ²­)
  • μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ—μ„œ "μƒˆλ‘œ κ³ μΉ¨" λ˜λŠ” "λ’€λ‘œ"λ₯Ό 클릭 (이전에 μ„œλ²„μ— μ „μ†‘ν•œ 데이터가 GET λ°©μ‹μœΌλ‘œ μš”μ²­ν•œ 성곡 확인 νŽ˜μ΄μ§€μ΄κΈ° λ•Œλ¬Έμ— λ‹€μ‹œ GET μš”μ²­ 보냄)
  • νšŒμ›κ°€μž… 성곡 확인 νŽ˜μ΄μ§€λ‘œ λ‹€μ‹œ 이동

 

/**
 * PRG - Post/Redirect/Get
 */
@PostMapping("/member")
public String createMember(Member member) {
 memberRepository.save(member);
 return "redirect:/member/+ member.getId()"; // νšŒμ›κ°€μž… 성곡 νŽ˜μ΄μ§€λ‘œ redirect
}

 

RedirectAttributes (Spring)

/**
 * RedirectAttributes
 * URL 인코딩도 ν•΄μ£Όκ³  PathVariable, Query Parameter도 μ„€μ •ν•΄μ„œ λ¦¬λ‹€μ΄λ ‰νŠΈ ν•΄μ€€λ‹€.
 */
@PostMapping("/member")
public String createMemberVer2(Member member, RedirectAttributes redirectAttributes) {
 Member savedMember = memberRepository.save(member);
 redirectAttributes.addAttribute("memberId", savedMember.getId());
 redirectAttributes.addAttribute("status", true);
 return "redirect:/member/{memberId}"; // memberIdλŠ” 바인딩, λ‚˜λ¨Έμ§€λŠ” 쿼리 νŒŒλΌλ―Έν„°λ‘œ 처리
}
λ°˜μ‘ν˜•