본문 바로가기

TIL

[TIL 2022-2-1] Spring MVC 공부

@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 

 

[스프링] RedirectAttributes

RedirectAttributes 폼 형식의 문서를 작성 후, 서버로 보내면(POST 방식) 곧이어 다른 페이지로 리...

blog.naver.com

아직 세션에 대한 개념이 잡히지 않아서 이해하기 쉽지 않은 것 같다. 내일 세션과 쿠기, 그리고 이 것들이 스프링에서 어떻게 동작하고 또 다룰 수 있는지 공부해봐야겠다.