본문 바로가기

Tech/BoostCourse - WEB

[부스트코스] 리다이렉트(redirect)란?

리다이렉트(redirect)

- 리다이렉트는 http프로토콜로 정해진 규칙이다.

- 서버는 클라이언트로부터 요청을 받은 후, 클라이언트에게 특정 URL을 이동하라고 요청할 수 있다. 이를 리다이렉트라고 한다.

- 서버에서는 클라이언트에게 응답으로 상태코드를 302와 함께 이동할 URL정보를 Location 값에 이동할 URL을 추가한다. 클라이언트는 리다이렉션 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다.

- 클라이언트는 서버로부터 받은 상태 값이 302이면 Location헤더값으로 재요청을 보내게 된다. 이때 브라우저의 주소창은 전송받은 URL로 바뀌게 된다.

- 서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.

 

 

리다이렉트 실습

리다이렉트가 어떻게 동작하는지 직접 실습을 해보았다.

먼저 redirect01.jsp, redirect02.jsp 파일을 작성했다.

redirect01을 요청했을 때 redirect02.jsp로 리다이렉트되는 로직이 실행되도록 구현하였다.

코드는 다음과 같다.

 

 

redirect01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    response.sendRedirect("redirect02.jsp");
%>    

 

redirect02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
redirect된 페이지 입니다.
</body>
</html>

 

실행 방법 - redirect01.jsp를 우클릭해서 Run을 클릭 (intellij)

 

결과 화면

우리가 요청한 것은 http://localhost:8080/redirect01.jsp였다.

하지만 응답된 결과는 http://localhost:8080/redirect02.jsp이다.

 

 

브라우저에서 리다이렉트 확인

조금 더 자세하고 정확한 동작 원리를 살펴보기 위해 브라우저에서 리다이렉트를 확인해 보았다.

크롬에서 우측버튼을 누르고 검사를 선택한 후 Network탭을 선택한다.

redirect01.jsp를 실행하면 서버로부터 응답코드로 302를 받는 것을 알 수 있다.

 

결과만 놓고 봤을 때 리다이렉트는 redirect01을 요청할 때 바로 redirect02를 응답하는 것처럼 보이지만 동작 과정을 살펴보면 그렇지 않다는 것을 알 수 있다.

 

웹 브라우저가 redirect01.jsp를 요청을 하면 서버는 redirect01에 대한 응답 객체를 브라우저에게 전달한다. 이 응답 객체에는 redirect02로 리다이렉트를 요청하라는 내용(응답코드: 302, Location헤더 값: redirect02.jsp)이 담겨 있다. 웹브라우저는 응답 데이터 속에서 WAS의 리다이렉트 요청을 확인하고 redirect02.jsp를 다시 요청한다. 그리고 WAS는 redirect02요청에 대한 결과를 출력하는 것이다.

 

리다이렉트에서 눈여겨 보아야 할 것은 순식간에 요청과 응답이 두 번 일어난다는 것이다. 

 

리다이렉트 어디서 활용 가능할까?

상당히 많은 부분에서 리다이렉트를 활용 가능하다. 예를 들어, 로그인을 한 경우에만 접근 가능한 페이지가 있다고 할 때 로그인이 되어 있지 않으면 로그인 페이지로 리다이렉트를 걸어 줄 수 있다. 혹은 로그인을 시도할 때 버튼을 클릭하고 로그인이 완료된 경우 메인 페이지로 리다이렉트를 걸어 주는 방법도 가능하다. 활용하기 나름인 것 같다.

 

 

[부스트코스 관련 강의 링크]

redirect - https://www.edwith.org/boostcourse-web/lecture/19878/

 

[LECTURE] 1) redirect : edwith

들어가기 전에 게시판 같은 곳에서 글을 작성하는 경우가 있습니다. 글을 모두 작성한 후에 글 작성 버튼을 클릭하겠죠? 이때 클라이언트가 서버에게 글을 작성해주세요 라는 요청을 보내... - 부스트코스

www.edwith.org

반응형