본문 바로가기
JSP - Servlet

[JSP - Servlet] Chapter 4. 포워드(Forward)와 리다이렉트(Redirect)

by nyeoo 2024. 2. 19.

1. 포워드(Forward)와 리다이렉트(Redirect)란?

  • 접수된 요청을 어떻게 처리하는지의 방식

2. 포워드 (Forward, 포워딩)

  • 요청을 포워딩할 때 해당 요청은 서버의 다른 자원에 전달됨. 이 때에는 다른 자원에 이 요청을 처리할 것을 클라이언트에게 알리지 않음. 이와 같은 방식의 처리는 웹 컨테이너(서블릿 컨테이너를 포함하는 더 큰 컨테이너) 안에서만 일어나고 클라이언트는 알 수 없게 됨 (서비스를 제공하는 서버측에서 처리되는 방식을 클라이언트 입장에서 확인 불가함)
  • 포워딩은 리다이렉트와 달리 객체를 요청에 담고 해당 요청을 사용할 다음 자원에 전송함. 따라서 클라이언트는 포워딩이 발생한 사실을 알지 못하는 것
  • 포워딩은 클라이언트와 통신 없이 서버에서만 처리되기 때문에 리다이렉트보다 나은 성능을 갖는다고 할 수 있음
  • 최초 요청이 계속 유지되는 특성이 있으므로 시스템에 변화를 주지 않는 단순 로직(조회, 검색)에 적합하며, 시스템에 변화를 주는 로직(게시판 글작성, 중복결제) 등에는 중복처리 될 수 있으므로 적합하지 않음
  • url 을 변경하지 않으므로, url 이 외부로 노출되어서는 안될 때 적합함

3. 리다이렉트 (Redirect, 리다이렉팅, 리디렉션)

  • 클라이언트의 요청을 처리한 후 컨테이너는 sendRedirect() 메소드가 호출되면 브라우저에 응답을 보냄. 이 응답에는 브라우저가 웹 컨테이너의 응답을 받은 후 다시 요청을 보낼 새로운 URL 이 포함되어 있음. 여기에서 하나의 요청이 종결됨을 유의해야함. 새로 부여받은 URL 로 브라우저가 완전히 새롭게 요청하기 때문에 이전의 요청 스코프에 저장되어 있던 객체는 새로운 요청이 이루어지기 전에 소멸되고, 하나의 요청에 담겨있던 객체들이 다음 작업까지 전달되지 않음
  • 리다이렉트는 추가적으로 발생한 왕복 처리 대문에 포워딩보다 느리다고 할 수 있음
  • 시스템에 변화를 주는 로직(게시판 글작성, 회원가입, 결제 등)을 수행하는데 적합함. 최초 요청이 다음 url 에서 유지되지 않기 때문에 새로고침을 해도 처음의 요청이 영향을 주지 않음(글이 여러 건 등록X, 중복결제X)
  • 기본적으로 클라이언트의 입장에서 편한 것은 포워딩이지만 DB에서 작업이 이루어지고, 다시 그에 대한 응답을 받은 클라이언트가 새로운 요청을 하게끔 만들어야 하는 경우는 리다이렉트를 사용해야 함