안녕하세요. 스프링 공식예제인 petclinic을 분석하며 공부중입니다.
하기 코드 로직이 이해가 잘 안되어 질문드립니다.

OwnerController.java

@PostMapping("/owners/{ownerId}/edit") 
public String processUpdateOwnerForm(@Valid Owner owner, BindingResult result, @PathVariable("ownerId") int ownerId, RedirectAttributes redirectAttributes) { 

if (result.hasErrors()) { 
redirectAttributes.addFlashAttribute("error", "There was an error in updating the owner."); 
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM; 

owner.setId(ownerId); 
this.owners.save(owner); 
redirectAttributes.addFlashAttribute("message", "Owner Values Updated"); 
return "redirect:/owners/{ownerId}"; 
}
->  하기 부분 확인 부탁드립니다.


if (result.hasErrors()) { 
redirectAttributes.addFlashAttribute("error", "There was an error in updating the owner."); 
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM; 
}

-> 이 부분 로직을 보면 
1. result에 error가 있을 시 
2. 리다이렉트시 플래시 속성으로 error 문구를 추가한다.
3. VIEWS_OWNER_CREATE_OR_UPDATE_FORM;를 return한다.
라고 분석했습니다.

3이 return "redirect:~"가 아닌 일반 url로 리턴하는데 왜 2번에서 플래시 속성으로 문구를 추가했는지 이해가 되지 않습니다.
redirectAttributes.addFlashAttribute("error", "There was an error in updating the owner.");
-> 이건 리다이렉트시 유효한 것으로 알고 있는데 왜 그다음이 리다이렉트가 아닐까요?

스프링 공식예제인 이상 분명 의도가 있다고 생각해서 gpt에 물어봤는데


좋은 질문입니다. redirectAttributes.addFlashAttribute("error", "There was an error in updating the owner.");를 사용하는 이유는 

리디렉션이 발생할 경우에만 유효합니다. 하지만 리디렉션을 사용하지 않고 단순히 뷰를 반환하는 경우라면, 플래시 속성을 사용할 필요가 없습니다.

플래시 속성은 일반적으로 리디렉션 이후에 일회성 메시지를 전달하기 위해 사용됩니다. 

만약 리디렉션을 하지 않고, 에러가 발생했을 때 동일한 페이지를 다시 표시하는 경우라면, 아래와 같이 모델에 속성을 직접 추가하는 것이 더 적절합니다.


이렇게 답변을 합니다.

깃갤 고수님들 한번 봐주시면 감사하겠습니다!