[Spring] forward 와 redirect

·2023년 11월 28일
0

Spring

목록 보기
4/9

⭐ forward 와 redirect

특정 url 접속 시 리다이렉트 또는 포워드가 일어나면 작업 중인 페이지가 전환된다. 리다이렉트와 포워드는 페이지가 전환된다는 점에서 비슷한 역할을 수행하지만, 페이지를 전환하는 주체가 다르다.
쉽게 비유하자면, 우리가 웹페이지를 이용하면서 특정한 주소로 이동하는 것을 상상해 보자. 이때, 두 가지 방법이 있다. 하나는 직접 목적지 주소를 입력하는 것이고, 다른 하나는 안내를 받아 목적지로 이동하는 것이다.
클라이언트가 주체인 리다이렉트는 마치 여행자가 목적지를 직접 찾아가는 것과 같다. 여행자가 현재 위치에서 직접 목적지 주소를 입력해서 도착하는 것이다. 이때, 목적지가 바뀌면 여행자도 새로운 주소로 가야 한다.

📍 페이지 전환 주체

📌
redirect : 클라이언트
forward : 서버

클라이언트가 주체가 되어 페이지를 전환하는 방법은 접속한 url 이 아닌 다른 url 로 직접 접속하는 방법밖에 없다. 반대로 서버가 전환 주체가 되면 url 서버 주소가 바뀌지 않고도 서버 내부의 동작을 통해 다른 응답을 클라이언트에게 내려줄 수 있게 된다.

📍 리다이렉트란?

여기서 리다이렉트는 여행자(클라이언트)가 한 곳에서 출발해 다른 지점으로 가라고 안내를 받는 것과 비슷하다. 리다이렉트가 발생하면 주소가 변경되어 클라이언트도 그에 맞게 다시 이동하게 된다.
서버에서 클라이언트에서 요청한 url에 대한 응답에서 다른 url 로 재접속하라고 명령을 보내는 것이다. redirect => url 을 다시 가르킨다라는 뜻으로 이해할 수 있으며, 클라이언트는 해당 url 로 다시 요청을 하게 된다. 리다이렉트가 일어나면 url 주소가 바뀌면서 다시 접속하는 것을 확인할 수 있고, 클라이언트 또한 리다이렉션이 일어났음을 확인할 수 있다.

📍 포워드란?

포워드는 서버가 주체인 것이다. 이번에는 여행자가 도로를 따라 이동하는 것이 아니라, 안내를 받아 목적지로 안내되는 것과 같다. 안내에 따라 서버가 적절한 응답을 클라이언트에게 전달한다. 이렇게 하면 여행자(클라이언트)는 주소를 몰라도 된다.
다시 말해, 클라이언트가 한 번 더 요청을 보내도록 하는 리다이렉트와 다르게 포워드는 서버 내부에서 일어나는 호출이다. 클라이언트의 url에 대한 요청이 들어오면 해당 url 이 다른 url 로 포워딩된 것이 확인 되었을 경우 서버에서 포워딩된 url의 리소스를 확인하여 클라이언트에 응답한다.
포워딩이 일어나면 클라이언트 단에서는 아무런 동작을 하지 않으며, 모든 동작을 서버에서 처리한다. 따라서 클라이언트(웹 브라우저)에서 요청한 url 은 물론 요청 정보는 바뀌지 않는다.

📍 리다이렉트와 포워드의 사용

리다이렉트는 여행자가 새로운 목적지로 직접 가야할 때 쓰이며, 주소가 변경되는 작업에 사용된다.
반면 포워드는 여행자가 목적지로 안내를 받아 그대로 따라가는 것처럼, 클라이언트의 요청 정보는 그대로 유지하면서 서버의 내부 동작을 바꿀 때 사용된다. 예를 들어, 여행자(클라이언트)가 요청한 내용은 그대로 두면서 서버에서는 특정한 처리를 한 뒤에 그 결과를 전달할 때 사용될 수 된다. 사용자의 요청 정보가 바뀌어 버리는 리다이렉트와 요청 정보는 그대로 유지한 채 서버 내부의 동작만 바뀌는 포워드는 적절히 사용되어야 한다.

📍 요약 정리

리다이렉트는 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용된다. 예를 들어 DB의 유저 테이블을 변경하는 회원 가입과 같은 경우에는 리다이렉트가 사용되어야 요청을 중복해서 보내는 것을 방지할 수 있다.

포워드는 특정 url에 대해 외부에 공개되지 말아야 할 것을 가리는 데 사용하거나 조회를 위해 사용된다. 스프링의 경우 /WEB-INF에 있는 view 에 대한 정보들이 외부에 직접 공개되지 말아야 할 때 내부에서 포워딩을 통해 /WEB-INF 경로를 가르키도록 한다.

profile
자바 백엔드 개발자 개인 위키

0개의 댓글