본문 바로가기
Spring

Redirect(리다이렉트)

by xogns93 2024. 10. 10.

Redirect(리다이렉트)는 클라이언트가 특정 URL로 요청을 보냈을 때, 서버가 다른 URL로 이동하라는 응답을 보내는 것을 말합니다. 즉, 클라이언트는 서버의 응답을 받아서 자동으로 다른 URL로 다시 요청을 보냅니다. 이때 사용되는 HTTP 응답 코드는 3xx로 시작하는 리다이렉트 응답 코드입니다.

리다이렉트는 보통 브라우저가 새로운 페이지로 자동 이동할 때 사용됩니다.

리다이렉트의 기본 동작

  1. 클라이언트가 서버에 요청을 보냅니다.
  2. 서버는 클라이언트에게 리다이렉트 응답(3xx)을 보냅니다.
  3. 클라이언트(주로 웹 브라우저)는 응답을 받고, 새로운 URL로 자동으로 다시 요청을 보냅니다.

주요 리다이렉트 응답 코드 (3xx)

  • 301 Moved Permanently: 요청한 리소스가 영구적으로 새로운 URL로 이동했음을 나타냅니다. 클라이언트는 이후부터 새로운 URL로 요청해야 합니다.
  • 302 Found: 요청한 리소스가 임시로 다른 URL로 이동했음을 나타냅니다. 클라이언트는 이번 요청에 한해 새로운 URL로 요청해야 하며, 이후 다시 원래 URL을 사용할 수 있습니다.
  • 303 See Other: 클라이언트가 다른 URL로 GET 요청을 해야 한다는 것을 나타냅니다. POST 요청 후 리다이렉트를 할 때 주로 사용됩니다.
  • 307 Temporary Redirect: 클라이언트가 요청한 URL이 임시로 다른 URL로 리다이렉트됨을 나타내며, 요청 메서드(GET, POST 등)는 바뀌지 않습니다.
  • 308 Permanent Redirect: 요청한 리소스가 영구적으로 새로운 URL로 이동했으며, 요청 메서드가 변경되지 않음을 나타냅니다.

스프링에서 리다이렉트 사용

스프링에서 리다이렉트를 처리하는 방법은 매우 간단합니다. return 값에 "redirect:" 접두어를 붙이면 리다이렉트를 수행할 수 있습니다.

예시: 리다이렉트 처리

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class RedirectController {

    // 리다이렉트 처리
    @GetMapping("/old-page")
    public String redirectToNewPage() {
        // "/new-page"로 리다이렉트
        return "redirect:/new-page";
    }

    @GetMapping("/new-page")
    public String newPage() {
        return "newPage"; // "newPage.html" 뷰 반환
    }
}

위 예시에서:

  • 클라이언트가 /old-page로 요청을 보내면, 서버는 클라이언트를 /new-page로 리다이렉트합니다.
  • 이때 서버는 302 Found 응답 코드를 사용해 리다이렉트를 처리합니다.

리다이렉트 응답 예시 (302 Found)

리다이렉트가 발생하면, 서버는 3xx 응답 코드와 함께 Location 헤더에 새로운 URL을 포함해 클라이언트에게 보냅니다.

HTTP/1.1 302 Found
Location: /new-page

이 응답을 받은 클라이언트는 자동으로 Location 헤더에 지정된 /new-page로 다시 요청을 보냅니다.

리다이렉트와 포워드의 차이

  • 리다이렉트(Redirect):

    • 서버는 클라이언트에게 다른 URL로 다시 요청하라고 지시합니다.
    • 클라이언트는 서버로부터 새로운 URL을 받아 다시 요청합니다.
    • 브라우저의 주소(URL)가 변경됩니다.
    • 주로 상태 코드 3xx(주로 302)를 사용합니다.
  • 포워드(Forward):

    • 서버 내부에서 다른 페이지로 요청을 전달합니다.
    • 클라이언트는 다른 페이지로 요청이 전달된 것을 알 수 없습니다.
    • 브라우저의 주소(URL)가 변경되지 않습니다.
    • 서버 내부에서만 이루어지므로 클라이언트의 추가 요청이 없습니다.

요약

  • 리다이렉트는 서버가 클라이언트에게 다른 URL로 이동하라고 지시하는 동작으로, 주로 3xx 응답 코드를 사용합니다.
  • 302 Found는 가장 흔히 사용되는 리다이렉트 응답 코드로, 클라이언트가 임시로 다른 URL로 요청하도록 지시합니다.
  • 스프링에서 리다이렉트는 "redirect:" 접두어를 사용해 쉽게 처리할 수 있으며, 이는 클라이언트에게 새로운 URL로 요청을 보내도록 지시합니다.