Server 04 - Forward와 Redirect
in Web-Programming on Server
Forward 방식과 Redirect 방식
웹 애플리케이션 개발에서는 서버에서 클라이언트에게 응답을 전달할 때 두가지 방식이 있다. 바로 Forward와 Redirect가 있다. 그저 요청을 보내는 동작이자 페이지가 전환되는 것은 같은데, 방식이 두 가지나 있다. 왜 두가지 방식이 있는지 알기 위해 Forward와 Redirect의 방식을 알아본다.
Forward
Forward 방식은 서버 내부에서 요청을 다른 자원으로 넘기는 방식이다. 클라이언트의 브라우저는 그 사실을 알지 못하며, URL도 변경되지 않는다. 즉, 서버 내부에서만 이동이 이루어지며 클라이언트는 같은 URL로 응답을 받게 된다.
과정을 보자면 다음과 같다.
- URL A가 클라이언트에서 서버로 GET으로 포워딩 요청이 된다.
- 서버내에서 URL A에 대한 서비스 처리 및 맵핑을 한다.
- 매핑된 것을 확인하여 서버 내에서 리소스를 처리한다.
- 처리된 응답을 다시 서버에서 클라이언트로 응답한다.
forward의 과정을 보면 1번의 요청으로 서버 내부에서 처리하여 응받을 하는 방식이다. 이 과정에서 요청 데이터는 유지가 되어 request.serAttribute()
를 이용하여 데이터를 전달할 수 있다. 또한 URL이 변경되지 않기 때문에 민감한 정보를 숨기고 싶을 때 유리하다.
Redirect
Forward와는 달리, Redirect는 클라이언트에게 새로운 URL로 다시 요청하도록 하는 방식이다. 즉, 서버가 클라이언트에게 다시 요청할 URL을 응답으로 보내고, 클라이언트는 그 URL로 새 요청을 한다. 이때는 URL이 변경이 된다.
과정은 다음과 같다.
- URL A가 클라이언트에서 서버로 GET으로 리디렉팅 요청이 된다.
- 서버내에서 URL A가 URL B로 이동되었음을 확인한다.
- 이후 서버가 클라이언트에게 Redirect응답으로 URL B를 보낸다.
- 다시 클라이언트는 받은 URL B로 다시 서버로 요청한다.
- 서버는 URL B에 대한 처리를 한다.
- 이후 클라이언트에 URL B에 대한 결과 보낸다.
이 과정에선 Redirect는 Forword와 달리 2번을 요청한다. 이 때 첫 http 요청 코드는 300대인 301과 302를 가지게 된다. 그리고 새로이 URL이 변경되는지라 데이터가 유지할 수는 없다. 만약 전달하려면 세션 스코프에 저장하거나, 전송 파라미터로 언혀서 보내는 방법이 있다.
Forward & Redirect 비교
표로 요약하자면 다음과 같다.
구분 | Forward | Redirect |
---|---|---|
URL 변경 | X | O |
요청 횟수 | 1번 | 2번 |
데이터 유지 | O | X |
처리 위치 | 서버 내부 | 클라이언트에서 새 요청 발생 |
두가지 요청 방식을 사용하는 실제 예시는 각각 다르다.
- Forward
- 특정 URL에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용하거나 조회를 위해 사용
- 시스템에 변화를 주지 않는 단순 로직(조회, 검색 등)에 적합
- 특정 페이지 진입 시 로그인이 필요하다면 로그인 페이지로 forward를 시키는 방식
- Redirect
- 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용
- 시스템에 변화를 주는 로직(게시판 글 쓰기, 회원가입, 결제 등)을 수행
- 과거에 사용했었던 더 이상 쓰지 않는 홈페이지 링크로 진입 시 리뉴얼된 사이트로 redirect를 해줄 때