본문 바로가기
📔개발자 일기 | | TIL

[20220626] 개발자 일기 & TIL

by 캔 2022. 6. 26.

새로운 구축 건이 진행 중이다. 이번에는 스프링 부트와 JPA를 사용하여 구축을 시도하고 있다. 기존의 스프링 프레임워크가 아닌 스프링 부트로 구축하는 첫 프로젝트여서 기대가 되었지만, 생각보다 고쳐야 할 게 많아서 진땀을 빼고 있다. 기존 XML 기반 설정도 자바 코드로 바꾸려고 하다 보니 막히는 부분이 있어서 고생하다가 겨우 해결하고 기존 스프링 부트 CMS는 MyBatis로 제작되어 있어 완전히 밑바닥부터 시작해야 한다. 지난주 서버 사건 때문에 시간을 많이 뺏긴 상황에서 이번 주부터 빠르게 진행이 돼야 하는데 왜 이렇게 난관이 많은 지 모르겠다.

 

TIL

스프링 부트 프로젝트를 진행하면서 막혔던 부분 중 하나가 입력 값 전송 시 날짜 데이터가 String으로 전달되어 java.util.Date 형식인 데이터베이스로 바인딩을 해줘야 하는데 그렇지 못하는 것이었다. 이 문제를 해결하면서 스프링의 데이터 바인딩에 대해 공부했다. 웹에서 전송되는 데이터나 아니면 XML 문서에서 우리가 입력하는 값은 당연히 String 타입니다. 우리가 "2022-06-26"이라고 입력한들 컴퓨터는 문자열 값을 받았으니 String으로 인식한다. 이때 이 값을 Date 타입을 가진 변수에 이것을 바로 넣으려고 하면 TypeMismatch 예외가 발생한다. 따라서, 스프링에는 PropertyEditor나 Converter 등 데이터를 바인딩할 때 사용할 수 있는 객체들이 존재한다. 스프링은 기본적으로 CustomCollectionEditor, CustomMapEditor, CustomDateEditor, CurrencyEditor, ByteProppertyEditor, charaterEditor 등 내장 PropertyEditor들이 BeanWrapperImpl에 등록된다. 그런데 유독 CustomDateEditor는 등록되지 않았다. 아마 Date 형식이 나라나 지역마다 다르니 직접 구현해서 쓰라는 취지인 것 같다.

 

PropertyEditor를 커스텀하는 법은 먼저 PropertyEditorSupport를 확장하는 클래스를 만들어 getAsText() 메서드와 setAsText() 메서드를 오버라이드해 작성해준다. 그리고 그 클래스를 PropertyEditorRegistrar 인터페이스를 구현한 클래스에서 registerCustomPropertyEditor() 메서드를 구현해 등록해준다. 또는 Controller나 ControllerAdvice에 @Initbinder를 사용해 WebDataBinder를 불러와 등록해주는 방법이 있다.

 

 

'📔개발자 일기 | | TIL' 카테고리의 다른 글

[20220724] 개발자 일기  (0) 2022.07.24
[20220710] 개발자 일기  (0) 2022.07.10
[20220619] 개발자 일기  (0) 2022.06.19
[20220612] 개발자 일기  (0) 2022.06.12
[20220604] 개발자 일기  (0) 2022.06.04