Spring/핵심기술

스프링 핵심기술03 - 데이터 바인딩

Bong Gu 2020. 10. 29. 17:38
728x90

springf

스프링 프레임워크 핵심기술03(inflearn) - 백기선

Springframework

데이터바인딩 추상화

  • 기술적인 관점: 프로퍼티 값을 타겟 객체에 설정하는 기능
  • 사용자 관점: 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는 기능.
  • 해석하자면: 입력값은 대부분 “문자열”인데, 그 값을 객체가 가지고 있는 int, long, Boolean, Date 등 심지어 Event, Book 같은 도메인 타입으로도 변환해서 넣어주는 기능.
  • Spring web MVC에만 특화된것이 아니다.
  • 여러 Interface로 추상화 했다.

PropertyEditor

  • 스프링 3.0 이전까지 DataBinder가 변환 작업에 사용하던 인터페이스
  • 쓰레드-세이프 하지 않음 (상태 정보 저장 하고 있음, 따라서 싱글톤 빈으로 등록하면 안된다.)
    • 여러 쓰레드들이 상태정보를 공유한다.
    • 만약 빈을 사용한다면 Thread-Scope로 사용할 수 있겠지만, 빈으로 등록 안하는것이 좋다.
    • 그럼 어떻게 사용하는가
      → InitBinder를 사용하는것이 좋다.
  • Object와 String 간의 변환만 할 수 있어, 사용 범위가 제한적이다.
예제
  • 객체 생성
    springcore

  • PropertyEditor를 implements 하는것은 오버라이딩할 메소드가 많다.
    PropertyEditorSupport를 상하여 필요에 맞도록 적용
    springcore

  • 이벤트 컨트롤러 작성
    springcore

  • 테스터 작성
    매칭되는 에디터가 없어서 에러가 발생한다.
    springcore

  • 앞선 설명과 같이 빈으로 등록하지 않고 InitBinder사용하여 메소드 생성 및 테스트를 실행한다.
    Evnet 클래스를 EventEditor를 사용하여 데이터바인딩하겠다는 뜻
    springcore

Converter와 Formatter

Converter

springcore

  • S 타입을 T 타입으로 변환할 수 있는 매우 일반적인 변환기.
  • 상태 정보 없음 = Stateless = 쓰레드세이프 (→ bean으로 등록이 가능하다.)
  • ConverterRegistry에 등록해서 사용
    springcore(빈으롱 등록하지 않았을 때 사용방법이다.)
  • 기본적인 Integer 등의 타입은 기본적으로 지원해준다.

Formatter

springcore

  • PropertyEditor 대체제
  • Object와 String 간의 변환을 담당한다.
  • 쓰레드 세이프하여 빈등록이 가능하다.
    • 즉, 다른빈들도 등록이 가능하다.(예시의 이미지의 MessageSource와 같은)
  • 문자열을 Locale에 따라 다국화하는 기능도 제공한다. (optional)
  • FormatterRegistry에 등록해서 사용
    springcore(빈으롱 등록하지 않았을 때 사용방법이다.)

ConversionService

springcore

  • 실제 변환 작업은 이 인터페이스를 통해서 쓰레드-세이프하게 사용할 수 있음.
  • 스프링 MVC, 빈 (value) 설정, SpEL에서 사용한다.
  • DefaultFormattingConversionService
  • FormatterRegistry는 ConverterResgistry를 상속하여, Converter의 기능도 할 수 있다.
    따라서, Formatter를 쓰는것을 추천한다.
  • ConversionService
  • 여러 기본 컴버터와 포매터 등록 해 줌.
스프링 부트
  • 웹 애플리케이션인 경우에 DefaultFormattingConversionSerivce를 상속하여 만든 WebConversionService를 빈으로 등록해 준다.

    • WebConversionService의 경우 좀 더 많은 기능을 제공한다. (money, JODA타임 등)
  • Formatter와 Converter 빈을 찾아 자동으로 등록해 준다.
    springcore

  • 테스트방법

    • 계층형 테스트로 웹과 관련된 빈만 테스트로 등록해준다.
      주로 Controller만.. 즉, Converter나 Formatter 제대로 등록이 안되면 오류발생
      직접등록이 필요하다.
      springcore
  • 등록되어있는 ConversionService
    springcore

    • 많은 converter와 formatter가 기본적으로 등록되어있다.



728x90