[Servlet] Forward 와 Redirect 차이

민지·2024년 6월 4일
0

Spring

목록 보기
21/25

JSP 환경에서 현재 작업중인 페이지에서 다른 페이지로 이동하는 페이지 전환 기능에 두가지 방식이 있다.

Forward

(URL 변화 X , 객체 재사용 O)
forward 방식은 이동한 URL 로 요청 정보를 그대로 전달한다. 말 그대로 forward(건네주기) 하는 것이다. 그렇기 때문에 클라이언트가 최초로 요청한 총 1번의 브라우저 요청 정보는 다음 URL 에서도 유효하다.

  • 웹 컨테이너에서의 페이지의 이동, 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다.
  • 웹 브라우저는 URL만 표시되고, 이동한 페이지의 URL 정보는 볼 수가 없다.
  • 현재 실행중인 페이지와 forward 에 의해 호출 될 페이지는 request, response 객체를 공유한다.

Redirect

URL 변화 O , 객체 재사용 X
redirect 방식의 경우 최초 요청을 받은 URL1 에서 클라이언트에 redirect 할 URL2 를 리턴하고, 클라이언트에게 새로운 요청을 생성하여 URL2 에 다시 요청을 보낸다. 따라서 처음 보냈던 요청 정보는 더 이상 유효하지 않게 된다.
새로운 페이지에서는 request, response 객체가 새롭게 생성된다.

  • 웹 컨테이너는 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다.
  • 웹 브라우저는 URL 을 지시된 주소로 바꾸고 그 주소로 이동한다.
  • 다른 웹 컨테이너에 있는 주소로 이동이 가능하다.



Forward 와 Redirect 요청 처리 방식

예를 들어 브라우저 URL 요청 순서가 URL1->URL2->URL3 이면,

forward 는 스프링 내부에서 알아서 진행하고 URL3 이라는 결과를 보내준다.
redirect 는 브라우저가 URL1 요청을 보냄 -> URL2 를 결과값으로 브라우저가 받음 -> 그럼 다시 URL2 로 (GET)요청을 보냄 -> URL3 이라는 결과를 받음

사용 방법

예를 들어 브라우저가 POST 요청을 보낸 경우
forward 를 사용하면 응답페이지에서 새로고침을 하게 됐을 때 문제가 된다. 서버에서 알아서 GET 응답 페이지를 준 것이므로 새로고침을 하면 POST 요청을 한 번 더 하게 되는 것이다.
redirect 를 사용하면 새로고침을 해도 두번째 보낸 요청을 새로고침 한 것이기 때문에 응답페이지 GET 요청(redirect는 GET 요청)을 새로고침 한 것이라 괜찮다.

시스템에 변화가 생기지 않는 단순 조회(리스트 목록 보기, 검색)의 경우는 forward 방식을 사용함

시스템(Session, DB)에 변화가 생기는 요청 DELETE, PUT(로그인, 회원가입, 글쓰기)의 경우 redirect 방식을 사용함

redirect는 어쨌든 다시 요청을 보내야 하고 HTTP request 를 다시 보내야 하니까 forward는 redirect보다 빠르다.

profile
개발일지

0개의 댓글