백엔드를 개발하다보면, Client 의 요청을 자체 처리하는 경우가 아닌 다른 url 핸들러에게 위임하는 경우가 종종 있다.
이렇게 클라이언트 요청에 대해서 다른 리소스로 연결을 할 때, redirect 와 forward 라는 2가지 테크닉이 있다.
Redirect 와 Forward 모두 클라이언트 요청에 대한 처리를 다른 url 로 보내서 처리를 위임하는 개념이지만,
두 개념에는 차이가 있다. 각각의 개념을 통해 차이점을 정리해보자.
redirect - 클라이언트의 요청에 대해 서버가 다른 url 로 요청을 하게끔 만듬.
이 때, 원래 클라이언트가 요청한 url 의 핸들링 시, 서버는 다른 url 로 클라이언트가 "요청" 을 던지게끔 한다.
이 후 클라이언트는 서버로부터 전달받은 다른 url, 즉 위의 예제에서 /home 으로 다시 요청을 하게 하고, 해당 url 매퍼에서 요청에 대한 응답이 처리되게 된다.
즉, 연결이 끊기고 재연결이 들어가는 등 요청이 여러번 왕복하기 때문에 Rquest - Response 쌍이 하나 이상 생기게 된다.
forward - 서버가 클라이언트의 요청을 다른 서버로 넘김(forwarding)
서버는 클라이언트로부터 요청을 전달받았을 때, 이 요청을 서버 내부에서 다른 url 핸들러로 요청을 "전달" 한다.
즉, 클라이언트가 다시 서버에 대한 요청을 할 필요 없이 서버가 다른 url 매퍼에서 처리된 응답을 받기만 하면 되는 구조가 된다.
실제 처리는 "다른 url" 에서 처리되었지만 응답은 초기 url 핸들러로부터 내려받으며, 서버와 클라이언트 간 Request - Response 쌍은 하나만 존재하며 연결이 끊기지 않음. (연결이 하나로 유지됨)
실무에서도 많이 쓰이는 개념이고 익숙해지면 차이를 헷갈릴 수 있으니 틈틈히 정리하고 알아두는게 필요하다.
'Server > Basic' 카테고리의 다른 글
Message Oriented Middleware 및 Message Queue 에 대한 설명 (0) | 2019.03.13 |
---|---|
COMET 이란? (0) | 2019.01.23 |
Java Servlet 에 대하여 (0) | 2018.12.23 |
HTTP/2 특징들에 대한 정리 (0) | 2018.12.17 |
무중단 배포의 원리와 솔루션 종류 (0) | 2018.12.09 |