Back-end/WEB / / 2024. 7. 2. 12:18

[WEB] PRG(Post-Redirect-Get) 패턴이란?

반응형

1. PRG(Post-Redirect-Get) 이란?

 PRG(Post-Redirect-Get) 패턴은 웹개발에서 주로 사용되는 디자인 패턴의 하나로, 주로 중복제출 방지하기 위해 사용된다. 리다이렉트를 하지 않고 페이지를 새로고침 할 경우 가지고 있던 객체가 다시 전달되면서 중복 제출이 이루어질 수 있기 때문에 이를 초기화하고 새로운 url로 사용자를 전달한다.

 

 

2. PRG 패턴의 동작 방식

1. POST : 폼을 POST방식으로 서버에 요청
2. Redirect : 서버에서 요청을 처리후 클라이언트에 다른 URL로 리다이렉트 요청
3. GET : 새로운 URL을 GET요청을 통해 서버에 새로운 페이지를 요청

 

아래는 이미지는 회원가입을 PRG패턴으로 나타낸 예시이다.

 

3. 사용하는 이유

중복제출 방지

 - PRG패턴의 가장 큰 장점은 중복제출을 방지에 있다. 리다이렉트를 진행하지 않고 forward 방식으로 리턴을 받을 경우 사용자가 새로고침을 진행하면 중복해서 폼이 제출되게 된다. 예를 들어 글쓰기 완료 후 새로고침을 한다면 동일한 글이 중복적으로 등록되는 경우가 발생할 수 있다는 것이다.

 

예시코드

다음은 회원가입을 진행하면 로그인 페이지로 이동하게 하는 코드를 간략히 나타냈다.

post(회원가입 정보) -> redirect(로그인 페이지) -> get(페이지 반환)

 

회원가입 서블릿

@WebServlet("/signup")
public class SignUpServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 폼 데이터 처리
        // 회원가입 진행
        // 회원가입 완료

        // 리다이렉트
        response.sendRedirect("/login");
    }
}

 

로그인 서블릿

@WebServlet("/login")
public class TodoListController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 로그인 페이지를 불러서 전달
        request.getRequestDispatcher("/WEB-INF/todo/login.jsp").forward(request,response);
     
    }
}

 

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유