2024. 5. 22. 02:07ㆍBack-End/Spring
웹 애플리케이션 개발에서 클라이언트의 요청을 다른 페이지로 전달하거나 새로운 요청으로 전환하는 것은 매우 흔한 일이다. 스프링 MVC(Spring MVC)에서는 이러한 요청 흐름 제어를 위해 Forward와 Redirect 두 가지 주요 방법을 제공한다. 이 글에서는 Forward와 Redirect의 개념, 사용 예시, 차이점, 그리고 각각의 적절한 사용 사례에 대해 알아보겠다.
Forward란?
Forward는 서버 측에서 요청을 다른 리소스로 넘겨주는 방식이다. 클라이언트는 처음 요청한 URL이 그대로 유지되고, 서버 내부에서만 요청이 전달된다. 클라이언트는 다른 리소스로 요청이 전달되었다는 사실을 알지 못한다.
- 사용 예시: 내부적인 페이지 이동, 데이터 처리 후 결과 페이지로 이동 등.
Forward의 특징
- URL 변경 없음: 클라이언트는 처음 요청한 URL이 그대로 유지된다.
- 단일 요청: 한 번의 요청으로 처리된다.
- 서버 측 처리: 요청이 서버 내부에서 다른 리소스로 전달된다.
- 속도 빠름: 추가적인 클라이언트-서버 간 통신이 없기 때문에 빠르다.
Forward 사용 예제
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ForwardController {
@GetMapping("/start")
public String startProcess(Model model){
model.addAttribute("forwardTest", "jeon");
System.out.println("startProcess");
return "forward:/forward";
}
@GetMapping("/forward")
public String forward(){
return "forwardPage";
}
}
//view는 forwardPage.html만 있으면 된다

Redirect란?
Redirect는 서버가 클라이언트에게 새로운 URL로 요청을 다시 보내도록 하는 방식이다. 클라이언트는 새로운 URL로 리다이렉트되며, 브라우저의 주소 표시줄도 변경된다.
- 사용 예시: 폼 제출 후 결과 페이지로 이동, 외부 URL로 리다이렉트 등.
Redirect의 특징
- URL 변경: 클라이언트는 새로운 URL로 리다이렉트된다.
- 이중 요청: 처음 요청과 리다이렉트된 요청, 두 번의 요청이 발생한다.
- 클라이언트 측 처리: 클라이언트가 서버의 응답을 받아 새로운 요청을 보낸다.
- 상태 정보 전달: URL에 파라미터를 포함하거나 세션을 통해 상태 정보를 전달할 수 있다.
Redirect 사용 예제
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class RedirectController {
@GetMapping("/redirect")
public String redirect(Model model){
model.addAttribute("redirectTest", "jeon");
return "redirect:/finalDestination";
}
@GetMapping("/finalDestination")
public String finalDestination(){
System.out.println("finalDestination");
return "redirectPage";
}
}
//view는 redirectPage.html만 있으면 된다
Forward와 Redirect의 차이점
특징 | Forward | Redirect |
URL 변경 | 변경되지 않음 | 변경됨 |
요청 횟수 | 한 번의 요청 | 두 번의 요청 |
처리 위치 | 서버 측에서 내부 처리 | 클라이언트가 새로운 요청을 보냄 |
속도 | 빠름 | 비교적 느림 |
사용 사례 | 내부 페이지 이동, 데이터 처리 후 결과 페이지 | 폼 제출 후 결과 페이지, 외부 URL로 이동 |
Forward와 Redirect의 사용 사례
- Forward 사용 사례:
- 내부 페이지 이동: 로그인 처리 후 메인 페이지로 이동할 때.
- 데이터 처리 후 결과 페이지로 이동: 검색 결과를 처리한 후 결과 페이지로 이동할 때.
- Redirect 사용 사례:
- 폼 제출 후 결과 페이지로 이동: 데이터베이스에 데이터를 저장한 후 결과 페이지로 이동할 때.
- 외부 URL로 리다이렉트: 로그아웃 후 로그인 페이지로 이동할 때.
결론
Forward와 Redirect는 스프링 MVC에서 클라이언트의 요청 흐름을 제어하는 데 중요한 역할을 한다. Forward는 서버 내부에서 요청을 다른 리소스로 넘겨주는 방식으로, 클라이언트 측에서 URL이 변경되지 않는다. 반면에 Redirect는 클라이언트에게 새로운 요청을 보내도록 하여 URL이 변경되며, 두 번의 요청이 발생한다. 각각의 방식은 특정 상황에서 더 적합하게 사용될 수 있으므로, 올바르게 이해하고 적절한 상황에 적용하는 것이 중요하다.
'Back-End > Spring' 카테고리의 다른 글
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping (0) | 2024.05.23 |
---|---|
쿠키(Cookie)와 세션(Session) (0) | 2024.05.23 |
BindingResult (0) | 2024.05.22 |
@Valid(스프링 MVC에서의 입력 유효성 검증) (0) | 2024.05.22 |
Thymeleaf (0) | 2024.05.21 |