[Spring & Web] return "redirect:/주소" 와 일반 return "view이름"의 차이

이번 포스팅에서는 Spring Web Project에서 URL 요청에 따른 Controller의 처리 중에서 return "redirect:/주소" 와 return "view이름"의 차이에 대해 알아보겠습니다

아래는 해당 프로젝트의 구조입니다.

다음은 코드가 약간 추가된 HomeController입니다.

package blog.controller;

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

@Controller
public class HomeController {
    @GetMapping(path = "/")
    public String hello() {
        System.out.println("Call hello()");
        return "home";
    }

    @GetMapping(path = "/book")
    public String showBook() {
        System.out.println("Call showBook()");
        return "home";
    }

    @GetMapping(path = "/coffee")
    public String showCoffee() {
        System.out.println("Call showCoffee()");
        return "redirect:/";
    }
}

/book으로 URL을 요청할 시 showBook()을 출력시키고 홈으로 돌아갑니다.마찬가지로 /coffee로 URL을 요청할 시 showCoffee()를 출력시키고 redirect를 하여 /로 돌아갑니다.어떤 차이가 있을지 실행을 해보겠습니다.

간단한 홈 화면이 보입니다.

Call hello()가 찍혀있는 것이 보이는군요.먼저 /book으로 URL을 요청하여 단순 return "viewName"의 기능을 살펴보겠습니다.

URL은 localhost:8080/book으로 변동된 것 같고 예상대로 home.html의 내용이 보입니다.

아까 출력되었던 Call hello()를 제외한다면 Call showBook()이 불린 것을 알 수 있겠습니다.그렇다면 다음으로는 /coffee로 URL을 요청하여 결과를 살펴보겠습니다.

/coffee로 요청한다 해놓고 왜 그냥 localhost:8080이냐고요??그럼 일단 출력된 것을 보시죠.

맞습니다.저는 /coffee로 URL을 요청하였고 해당 컨트롤러가 정상적으로 호출이 되어 Call showCoffee()가 출력이 되었습니다.다만 마지막에 return redirect:/를 하여 해당 URL이 다시 / (root, 여기서는 localhost:8080)로 바뀌어 요청이 들어갔고 그에 따라 hello() 함수가 한번 더 호출이 된 것입니다.마지막으로 정리를 하자면 단순 return "viewName"같은 경우는 viewName에 해당하는 view를 보여주는 것이고, return "redirect:/"같은 경우는 redirect 오른쪽의 주소로 URL 요청을 다시 하는 것입니다.그로 인해 주소가 바뀌고 해당 URL에 속하는 컨트롤러의 함수가 한번 더 호출이 되는 것입니다.

좋은 웹페이지 즐겨찾기