일기장
Published 2023. 8. 8. 16:43
리다이렉트, 포워드 웹개발

컨트롤러로 들어온 URL요청을 다른 URL요청으로 돌려야할 때 리다이렉트와 포워드를 사용할 수 있습니다.

이 포스트에서는 스프링부트를 이용하여 그 두가지 방법에 대해 다루어보도록 하겠습니다.

 

리다이렉트(Redirect)

// redirect:<URL>을 이용하여 redirect 시킬 수 있다
@GetMapping("/")
public String root() {
    return "redirect:/question/list";
}

- 이를 이용하여 사용자가 로그인을 시도했을 때 성공하면 로그인된 상태로 메인페이지로 리다이렉트를 할 수 있습니다.

- 리다이렉트 방식은 클라이언트에게 새로운 URL요청을 하도록 합니다. 이는 새로운 HTTP요청을 하게 만드는 것입니다.

- 이러한 방식을 사용하는 이유는 클라이언트가 새로고침을 요청했을 때 한번 더 로그인 과정을 겪지 않게하기 위해서입니다. 또, 인증값만 존재한다면 굳이 로그인 과정 정보를 갖고 있을 필요가 없기 때문에 새로운 HTTP요청을 하도록 하는 것입니다.

 


 

포워드(forward)

// forward:<URL>을 이용하여 forward시킬 수 있다
@GetMapping("/")
public String root() {
    return "forward:/question/list";
}


// 서블릿에서 forward를 할 수도 있다
User user = (User) request.getSession().getAttribute("user");
if (user.getRole().equals("ADMIN")) {
    request.getRequestDispatcher("/admin/dashboard.jsp").forward(request, response);
} else if (user.getRole().equals("USER")) {
	request.getRequestDispatcher("/user/dashboard.jsp").forward(request, response);
}

- 그렇다면 만약 굳이 사용자가 내부 로직을 알 필요 없는 경우, 기존 요청을 유지해야하는 경우는 어떻게 해야할까요? 주소창의 변경없이 내부적으로 처리하는 forward를 사용하면 됩니다.

- 예를 들어 사용자가 로그인을 했을 때 구매자, 판매자, 관리자등등 여러 역할에 따라 다른 권한들이 부여된 페이지를 보여주고 싶을 경우를 생각해봅시다. 사용자의 요청에서 얻은 데이터에 따라 로직을 작성하므로 요청객체를 유지하는 forward가 적절할 것입니다.

 

 


 

참조

https://wikidocs.net/161354

'웹개발' 카테고리의 다른 글

타임리프를 통한 템플릿 상속  (0) 2023.08.12
서비스(Service)  (0) 2023.08.08
타임리프 템플릿에 데이터 전달하기  (0) 2023.08.04
JPA와 H2서버 사용하기  (0) 2023.06.18
컨트롤러  (0) 2023.06.18
profile

일기장

@공군급양

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!