리다이렉트와 포워드
특정 URL 접속 시 리다이렉트 또는 포워드가 일어나게 되면 작업 중인 페이지가 전환된다. 이 두 기능은 페이지가 전환된다는 점에서 비슷한 역할을 한다. 하지만 페이지를 전환하는 주체가 다르다. 이 차이점이 동작에 큰 영향을 미친다.
리다이렉트
- 페이지 전환 주체: 클라이언트
포워드
- 페이지 전환 주체: 서버
리다이렉트는 서버에서 클라이언트에서 요청한 URL에 대한 응답에서 다른 URL로 재접속 하라고 명령을 보내는 것
서버는 클라이언트에게 HTTP 상태 코드 3xx와 함께 새로운 URL을 제공한다.
이로 인해 클라이언트는 해당 재접속할 URL로 다시 요청하게 된다.
클라이언트 또한 리다이렉션이 일어났음을 인지할 수 있다.
포워드는 서버 내부에서 일어나는 호출이다. (리다이렉션은 2번의 요청-응답을, 포워드는 1번의 요청-응답만을 보내는 꼴이다)
클라이언트의 URL에 대한 요청이 들어오면 해당 URL이 다른 URL로 포워딩 된 것이 확인되었을 경우 서버에서 포워딩된 URL의 리소스를 확인하여 클라이언트에 응답한다.
포워딩이 일어나면 클라이언트는 아무런 동작을 하지 않으며, 모든 동작을 서버에서 처리한다.
클라이언트는 포워딩이 일어났음을 인지할 수 없다.
리다이렉트는 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용된다. 예를 들어 DB의 유저 테이블을 변경하는 회원가입과 같은 경우에는 리다이렉트가 사용되어야 요청을 중복해서 보내는 것을 방지할 수 있다.
포워드는 특정 URL에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용하거나 조회를 위해 사용된다.
스프링의 경우, /WEB-INF에 있는 view에 대한 정보들이 외부에 직접 공개되지 말아야 할 때 내부에서 포워딩을 통해 /WEB-INF 경로를 가리키도록 한다.