PRG ํจํด์ด๋?
Post -> Redirect -> Get ํจํด์ผ๋ก ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋งํ๋ฉฐ, ๊ถ์ฅ๋๋ ๋์์ธ ํจํด ์ค ํ๋๋ค.
PRG ํจํด์ ํ์์ฑ
์๋ฅผ ๋ค์ด ์ํ ํ๋งค ์๋น์ค๋ฅผ ์ด์ํ๊ณ ์๋ค๊ณ ํ์.
์ฃผ๋ฌธ ํ์ด์ง๋ฅผ ํธ์ถํ๊ณ , Post ๋ฐฉ์์ผ๋ก ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ ๊ฒฐ์ ์๋ฃ ํ์ด์ง์์ ์ค์ ํน์ ์๋์ ์ผ๋ก ์๋ก๊ณ ์นจ์ ํ๊ฒ ๋๋ฉด ์๋ฒ์ ์ ์กํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ ์กํ๊ฒ ๋์ด ์ค๋ณต ๊ฒฐ์ ์ฒ๋ฆฌ๊ฐ ๋ ์ ์๋ค.
์์ธํ ํ๋ก์ธ์ค๋ ์๋ ํฌ์คํ ์ ์ฐธ๊ณ ํ์
PRG ํจํด์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์์ ๊ฐ์ ์๋ก๊ณ ์นจ์ผ๋ก ์ธํ ์ค๋ณต ์์ฒญ ์ด์๋ ์๊ณ , ์์ฒญ ๊ฒฐ๊ณผ์ ํด๋นํ๋ ํ์ด์ง๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ์ด๋ ค์์ง๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์๋ URL๋ง ๊ฐ์ง๊ณ ๋ GET ๋ฐฉ์์ ์์ฒญ ๋ฐ์ ํ ์ ์์ด POST ๋ฐฉ์์ URL์ ๊ณต์ ํ๋๋ผ๋ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋๋ค.
๊ฐ๋จํ๊ฒ PRG ํจํด ์ ์ฉ ์ , ํ์์์ค๋ฅผ ๋น๊ตํด๋ณด์.
PRG ํจํด ์ ์ฉ ์ ์์ค
@Controller
class TestController {
@GetMapping("/order")
public String order(){
//์ฃผ๋ฌธ ํ์ด์ง ํธ์ถ
return "order";
}
@PostMapping("/buy")
public String buy(){
// ๊ฒฐ์ ์ฒ๋ฆฌ
return "result message"; //๊ฒฐ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด
}
}
PRG ํจํด ์ ์ฉ ์ ์์ค
์ฌ์ฉ์๊ฐ ๊ฒฐ์ ๋ฅผ ํ๊ฒ ๋๋ฉด 'xxx.com/buy' ๋ผ๋ url์ด ํธ์ถ๋๋ฉฐ, ๊ฒฐ์ ํ๋ก์ธ์ค๊ฐ ์งํ๋๊ณ , ๊ฒฐ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ๋ฆฌํด๋๋ค.
ํ์ง๋ง url์ 'xxx.com/buy'๋ก ๋์ผํ๊ฒ ๋จ์ ์๊ธฐ ๋๋ฌธ์ ์๋ก๊ณ ์นจํ์ ๊ฒฝ์ฐ ๋ค์ ๊ฒฐ์ ์์ฒญ์ด ๋๋ฉฐ ์ค๋ณต ๊ฒฐ์ ๊ฐ ๋ฐ์ํ๋ค.
PRG ํจํด ์ ์ฉ ํ ์์ค
@Controller
class TestController {
@GetMapping("/order")
public String order(){
//์ฃผ๋ฌธ ํ์ด์ง ํธ์ถ
return "order";
}
@PostMapping("/buy")
public String buy(){
// ๊ฒฐ์ ์ฒ๋ฆฌ
return "redirect:/buy-result";
}
@GetMapping("/buy-result")
public String buyResult(){
//๊ฒฐ์ ๊ฒฐ๊ณผ ํ์ด์ง ํธ์ถ
return "buyResult";
}
}
๋๊ธ