본문 바로가기
spring

PRG 패턴

by 신방동불주먹 2022. 12. 28.

PRG 패턴 (Post-Redirect-Get)

웹 개발 패턴 중 자주 쓰이는 패턴으로 HTTP POST 요청에 대한 응답이 또 다른 URL로의 GET 요청을 위한 리다이렉트(응답 코드가 3XX) 여야 한다는 것을 의미. 
즉, 쉽게 설명하면 POST 방식으로 온 요청에 대해서 GET 방식의 웹페이지로 리다이렉트 시키는 패턴

 

PRG 패턴을 사용하지 않으면 발생하는 문제점

첫번째로 새로고침으로 인한 동일한 요청이 연속적으로 보내지는 이슈가 발생. 만약 이 이슈가 중요하지 않은 로직이 있는 부분이라면 상관없겠지만 결제 같은 중요한 로직에서는 중복 결제가 일어나는 문제가 발생

 

두 번째로는 POST 요청은 URL을 복사하더라도 다른 사람과 공유할 수 없다는 점

POST 요청을 보내게 되면 Parameter 값들이 URL에 남겨있지 않기에 특정 Paramter 가 필요한 POST 요청인 경우 URL을 복붙 하더라도 에러 페이지만 보임

 

@Controller
class TestController {

    @GetMapping
    public String main(){
        return "main";
    }

    @PostMapping("/pay")
    public String pay(){
        // 결제 로직
        return "redirect:/success";
    }

    @GetMapping("/success")
    public String success(){
        return "success";
    }
}

이렇게 되면 브라우저에서는 /pay라는 POST 요청이 오게 되면 302 응답 코드를 받게 될 것이고 302 응답 코드를 받은 브라우저는 /success라는 곳으로 리다이렉트 

 

브라우저는 /success 라는 곳으로 이동했기에 새로고침을 하더라도 GET /success로 새로 고침을 하는 것이라 결제 로직이 중복으로 발생하지 않을뿐더러 3XX 응답 코드를 받은 페이지에 대해서는 브라우저에서는 저장하고 있지 않으므로 뒤로 가기를 하더라도 해당 페이지( /pay )가 나오지 않게 된다

'spring' 카테고리의 다른 글

mvnw  (0) 2023.01.02
@RestController  (0) 2023.01.02
Oracle log4jdbc 쿼리로그 출력  (0) 2022.12.28
Mybatis  (0) 2022.12.27
정리  (0) 2022.12.23