@ModelAttribute와 Model
SpringMVC에서 @ModelAttribute 를 통해 쿼리파라미터와 폼데이터를 개발자가 만든 객체로 바인딩할 수 있다. 이 때 Model 객체에 값을 넣어주지 않아도, @ModelAttribute를 통해 넘어오는 객체를 자동으로 넣어서 뷰로 전달해 준다.
그리고 @Controller 의 컨트롤러 메소드는 매개변수로 객체가 들어오면 @ModelAttribute가 디폴트로 작동하기 때문에 생략해 줄 수 있다. 이때 뷰에서 사용되는 모델의 이름은 매개변수로 들어오는 객체의 타입에서 첫글자를 소문자로 바꿔 사용한다.
@PostMapping("/add")
public String v1(@ModelAttribute("item") Item item,Model model) {
itemRepository.save(item);
model.addAttribute("item", item);
return "basic/item";
}
@PostMapping("/add")
public String v2(@ModelAttribute Item item) {
itemRepository.save(item);
return "basic/item";
}
때문에 위 코드에서 각각의 컨트롤러 메소드는 동일하게 동작한다.(@ModelAttribute 는 명시성을 위해 생략X)
PRG(Post/Redirect/get)
POST요청을 통해 새로운 데이터를 생성했을 때, 최신 요청은 POST이다. 이 때 사용자가 페이지 새로고침을 하게 되면 가장 최근 요청이었던 POST요청이 다시 실행돼서 새로운 데이터를 생성할 수 있다. 때문에 POST요청이 들어오면 데이터를 생성하고, 생성된 데이터를 조회하는 GET 페이지로 Redirect 하여 새로고침을 해도 생성에 대해 안전하게 할 수 있다. 이 개념이 바로 PRG이다.
RedirectAttributes
위처럼 POST 요청 또는 다른 이유로 리다이렉트할 때, RedirectAttributes 를 사용해 모델 또는 쿼리파라미터 등을 전달할 수 있다. RedirectAttributes 객체의 addAttribute() 메소드를 활용해서 쿼리 파라미터에 데이터를 추가할 수 있다.
addFlashAttribute() 는 쿼리파라미터를 통해서가 아니라 세션을 통해 모델로 이동시킨다고 한다.(아래 블로그 참조)
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=allkanet72&logNo=220964699929
아직 세션에 대한 개념이 잡히지 않아서 이해하기 쉽지 않은 것 같다. 내일 세션과 쿠기, 그리고 이 것들이 스프링에서 어떻게 동작하고 또 다룰 수 있는지 공부해봐야겠다.
'TIL' 카테고리의 다른 글
[TIL 2022-2-4] Spring JPA 공부 시작!! (0) | 2022.02.05 |
---|---|
[TIL 2022-2-2] 로그인 페이지 뷰 구현 + 생성자에 따른 @ModelAttribute의 동작 방법 (0) | 2022.02.02 |
[TIL 2022-1-30] 스프링 MVC 공부, 비트연산자 (0) | 2022.01.31 |
[TIL 2022-1-29] 스프링 웹 MVC 공부 + 정규식 (0) | 2022.01.30 |
[TIL 2022-1-27] 스프링 MVC, 서블릿, 핸들러 어댑터 등 공부 (0) | 2022.01.28 |