게시판 같은 곳에서 글을 작성할 때 글을 작성하고 나면 사용자는 작성 완료 버튼을 누릅니다. 이때 클라이언트가 서버에게 '나의 글을 등록해줘'라는 요청을 보내게 됩니다. 웹 브라우저는 글 목록으로 이동하라는 서버의 요청을 받은 후, 자동으로 서버에게 글 목록을 요청하여 응답받아 출력하게 됩니다. 이처럼 서버가 클라이언트에게 어떤 URL로 이동하라는 요청을 보내는 것을 redirect 라고 합니다.
리다이렉트 redirect 란?
리다이렉트는 http프로토콜로 정해진 규칙이다. 서버는 클라이언트로부터 요청을 받은 후, 클라이언트에게 특정 URL로 이동하라고 요청할 수 있고 이를 리다이렉트라고 합니다. 서버는 클라이언트에게 상태코드 302와 함께 이동할 URL정보를 Location 헤더에 담아전공합니다. 클라이언트는 서버로부터 받은 상태값이 302인지 확인하고 302라면 Location헤더에 담긴 값으로 재요청을 서버에 보내게 되고 서버는 해당 URL 요청을 처리하여 클라이언트에게 보내줍니다. 이때 브라우저의 주소창은 전송받은 URL로 바뀌게 됩니다. 서블릿이나 Jsp는 redirect 하기 위해서 HttpServletResponse 가 가지고 있는 sendRedirect( ) 메소드를 사용한다.
리다이렉트 redirect 실습
redirect01.jsp 와 redirect02.jsp 를 작성할 겁니다. 클라이언트는 redirect01.jsp 를 요청하는데 redirect01 은 redirect02 로 리다이렉팅하는 로직이 실행되도록 작성할 겁니다. 리다이렉팅을 사용하기 위해서 response 객체가 가지고 있는 sendRedirect( ) 메서드를 사용했습니다. sendRedirect( ) 메서드는 redirect 할 주소를 인자로 갖고 있습니다. 한번 redirect01.jsp를 실행해보도록 하겠습니다. 출력된 결과를 보니까 분명 나는 redirect01.jsp 를 실행했는데 자동으로 redirect02.jsp 로 URL이 이동한 것을 확인할 수 있습니다. 크롬의 Network 탭을 통해서 한번 더 살펴보겠습니다. redirect01.jsp 로 클라이언트가 요청했는데, 서버가 302 와 함께 Redirect 를 시켰고, 클라이언트가 다시 redirect02 를 서버에게 요청한 것을 확인할 수 있습니다. 이것을 그림으로 보면 다음과 같습니다. redirect 에서 핵심적으로 알아야 하는 것은 클라이언트의 요청이 총 2번 발생한다는 것입니다. 처음 redirect01 요청이 발생했을 때 생성된 요청 객체와 응답 객체랑 다시 redirect02 요청이 발생하여 생성된 요청 객체와 응답 객체는 다른 객체입니다. 이런 부분들을 기억하는 것이 필요합니다.