Model 객체를 사용하는 경우 :
Model은 주로 현재 요청에서만 사용할 데이터를 전달할 때 적합하다.
로그인 오류와 같은 일회성 메세지를 전달하는 경우, Model에 데이터를 추가하는 것이
일반적이다
Model은 해당 요청과 함께 메세지를 전달하고, 뷰가 렌더링되면 메세지가 사라진다.
Session을 사용하는 이유
Session은 여러 요청에 걸쳐 데이터가 유지될 필요가 있을 때 사용한다.
예를 들어 로그인 상태나 사용자 정보처럼 여러 요청에서 참조해야할 데이터를 저장할 떄
적합하다. (예시: 로그인 성공)
이때 오류 메세지를 세션에 넣으면 이후 다른 페이지에서도 해당 메세지가 남을 수 있다.
리디렉트를 사용하면서도 메시지를 전달해야 하는 상황에서는
RedirectAttributes 을 사용하면 일회성 데이터를 리디렉트와 함께 전달할 수 있다.
RedirectAttributes 사용
리디렉트를 사용하는 경우, RedirectAttributes를 통해 오류 메시지를 전달하는 것이 적합합니다. RedirectAttributes는 일회성으로 메시지를 전달하고, 리디렉트 이후 사라진다.
오류 메세지와 같은 일회성 정보는 Session보다 Model 또는
RedirectAttributes로 처리하는 것이 더 적절하다.
@PostMapping("/inrollform")
public String userLogin(Users user, HttpSession session, Model model,
RedirectAttributes redirectAttributes){
Users userLogin = userService.userLogin(user);
if(userLogin != null && passwordEncoder.matches(user.getUsersPassword(), userLogin.getUsersPassword())) {
session.setAttribute("userLogin", userLogin);
return "redirect:/";
}else{
redirectAttributes.addFlashAttribute("loginError", "아이디 또는 비밀번호가 틀렸습니다");
return "redirect:/loginPage"; //
}
}
<div th:if="${loginError}">
<script th:inline="javascript">
alert([[${loginError}]]);
</script>
</div>