본문 바로가기

좋아하는 것_매직IT/1.spring

14.Spring, 스프링MVC의 핵심개념 중 모델속성(ModelAttribute)에 대해서 알아볼께요.

반응형

스프링MVC의 핵심개념 중 모델속성에 대해서 알아보자.

  • 우선, 우리가 해야할일은 뭘까?
    • 바로, @ModelAttribute 어노테이션에 대해서 머리속에 정의를 가지고 있어야한다.
  • 그럼, 한번 정의해보자. ModelAttribute 이 어떤 어노테이션인지..
    • 간단하게 말씀드리면, 
      • 스프링 MVC 에서 콘트롤러 웹브라우저가 Domain Model(객체) 로 넘겨주는데, 
        • 아래 2가지 케이스가 가능하다.
          • 첫째, @RequestParam을 사용해서 파라미터를 한개씩 한개씩 받는 방법
          • 둘째, @ModelAttribute을 사용해서, 스프링MVC에서 알아서 변환과정을 통해서 Domain Model(객체) 바인딩을 하는 방법
  • 즉, 정리하자면, @ModelAttribute을 사용하면, 스프링MVC에서 알아서 변환과정을 통해서 자동으로 Domain Model(객체) 바인딩 시켜주게 됨. 

그럼, Binding 수행 시 발생하는 문제가 있을 경우, 어디에 담겨올까?

  • 정답
    • BindingResult 에 담겨옴.

그럼, 모델속성을 자동으로 바인딩했다고 가정하면,  여기서 또 필요한것이 뭐가 있을까?

  • 바로 자동 바인딩 시 각 필드 변수별로 검증작업이 존재하면 좋지 않을까? 
  • 그럼, 검증작업을 하기위해 스프링이 지원하는 어노테이션은 모가 있을까?
    • 정답
      • @Valid or @Validated 어노테이션이다.
        • 즉, 스프링MVC에서 자동바인딩할때, 각 필드 변수별로 검증작업을 진행할 수 있게 해주는 역할을 한다.
          • 예를 들어, 파라미터에 rank 가 있다라고한다면, 해당 어노테이션을 사용해서 정상적인 rank 형태로 넘어왔는지 확인 할 수 있음.
            • 단, 유효성을 체크하기 위한 기준은 반드시 필요하다.

그럼, 간단한 예시를 통해서 확인해보자.

  • 예시

@RequestParam 사용의 경우

@ModelAttribute 사용의 경우

BindingResult를 통해서 에러를 확인하는 예시

유효성 검증 예시

  • pom.xml 아래 의존성 추가

User 클래스

Validator 

  • ​​​​​​​랭킹에 대한 음수값 유효성 체크 예시

  • ​​​​​​​설명
    • Validator는 아래 2가지 메소드를 가지고 있음.
      • supports(Class)
        • 매개변수로 전달된 클래스를 검증할 수 있는지 여부를 반환
      • validate(Object, org.springframework.validation.Errors)
        • 매개변수로 전달된 객체를 검증하고 실패하면 Errors 객체에 에러를 등록함.
  • Validator 적용
    • Controller 에서..

  • 설명
    • 첫째, 유효성 검사를 할 커맨드 객체인 User 객체앞에 아래 어노테이션을 추가함.
      • @Valid
    • 둘째, @InitBinder 어노테이션이 붙은 메소드를 만듬.
      • WebDataBinder 는 커맨드 객체를 바인딩하는 객체임.
      • 즉, 해당 바인딩한 객체를 setValidator 해줌.
    • 위와 같이 코딩을한다면, 실제 검증은 스프링 프레임워크가 initBinder 메소드를 최초에 먼저 호출을 하기때문에 검증단계를 자동으로 수행함.

결론

  • ​​​​​​​스프링 MVC 에서 콘트롤러 웹브라우저가 Domain Model(객체) 로 넘겨주는데, 
    • 아래 2가지 케이스가 가능하다.
      • 첫째, @RequestParam을 사용해서 파라미터를 한개씩 한개씩 받는 방법
      • 둘째, @ModelAttribute을 사용해서, 스프링MVC에서 알아서 변환과정을 통해서 Domain Model(객체) 바인딩을 하는 방법
  • 즉, 정리하자면, @ModelAttribute을 사용하면, 스프링MVC에서 알아서 변환과정을 통해서 자동으로 Domain Model(객체) 바인딩 시켜주게 됨. 
  • 오늘도 스프링MVC의 핵심개념 중 모델속성(ModelAttribute)에 지식 마술(?) 획득완료! 감사합니다. ^^
300x250