Server 04 - Forward와 Redirect


Forward 방식과 Redirect 방식

웹 애플리케이션 개발에서는 서버에서 클라이언트에게 응답을 전달할 때 두가지 방식이 있다. 바로 Forward와 Redirect가 있다. 그저 요청을 보내는 동작이자 페이지가 전환되는 것은 같은데, 방식이 두 가지나 있다. 왜 두가지 방식이 있는지 알기 위해 Forward와 Redirect의 방식을 알아본다.

Forward

Forward 방식은 서버 내부에서 요청을 다른 자원으로 넘기는 방식이다. 클라이언트의 브라우저는 그 사실을 알지 못하며, URL도 변경되지 않는다. 즉, 서버 내부에서만 이동이 이루어지며 클라이언트는 같은 URL로 응답을 받게 된다.

과정을 보자면 다음과 같다.

  1. URL A가 클라이언트에서 서버로 GET으로 포워딩 요청이 된다.
  2. 서버내에서 URL A에 대한 서비스 처리 및 맵핑을 한다.
  3. 매핑된 것을 확인하여 서버 내에서 리소스를 처리한다.
  4. 처리된 응답을 다시 서버에서 클라이언트로 응답한다.

forward의 과정을 보면 1번의 요청으로 서버 내부에서 처리하여 응받을 하는 방식이다. 이 과정에서 요청 데이터는 유지가 되어 request.serAttribute()를 이용하여 데이터를 전달할 수 있다. 또한 URL이 변경되지 않기 때문에 민감한 정보를 숨기고 싶을 때 유리하다.

Redirect

Forward와는 달리, Redirect는 클라이언트에게 새로운 URL로 다시 요청하도록 하는 방식이다. 즉, 서버가 클라이언트에게 다시 요청할 URL을 응답으로 보내고, 클라이언트는 그 URL로 새 요청을 한다. 이때는 URL이 변경이 된다.

과정은 다음과 같다.

  1. URL A가 클라이언트에서 서버로 GET으로 리디렉팅 요청이 된다.
  2. 서버내에서 URL A가 URL B로 이동되었음을 확인한다.
  3. 이후 서버가 클라이언트에게 Redirect응답으로 URL B를 보낸다.
  4. 다시 클라이언트는 받은 URL B로 다시 서버로 요청한다.
  5. 서버는 URL B에 대한 처리를 한다.
  6. 이후 클라이언트에 URL B에 대한 결과 보낸다.

이 과정에선 Redirect는 Forword와 달리 2번을 요청한다. 이 때 첫 http 요청 코드는 300대인 301과 302를 가지게 된다. 그리고 새로이 URL이 변경되는지라 데이터가 유지할 수는 없다. 만약 전달하려면 세션 스코프에 저장하거나, 전송 파라미터로 언혀서 보내는 방법이 있다.

Forward & Redirect 비교

표로 요약하자면 다음과 같다.

구분ForwardRedirect
URL 변경XO
요청 횟수1번2번
데이터 유지OX
처리 위치서버 내부클라이언트에서 새 요청 발생

두가지 요청 방식을 사용하는 실제 예시는 각각 다르다.

  • Forward
    • 특정 URL에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용하거나 조회를 위해 사용
    • 시스템에 변화를 주지 않는 단순 로직(조회, 검색 등)에 적합
    • 특정 페이지 진입 시 로그인이 필요하다면 로그인 페이지로 forward를 시키는 방식
  • Redirect
    • 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용
    • 시스템에 변화를 주는 로직(게시판 글 쓰기, 회원가입, 결제 등)을 수행
    • 과거에 사용했었던 더 이상 쓰지 않는 홈페이지 링크로 진입 시 리뉴얼된 사이트로 redirect를 해줄 때