Data Binding이란?
단어 하나씩 뜯어보자면, 데이터 묶기!
요청 데이터를 우리 도메인 객체(Request DTO)로 담아(묶어)주거나 그 반대과정을 의미한다!
기본적인 타입 변환을 보고 가자
@GetMapping("/hotels/{id}")
@RequestBody
public String getHotelById(@PathVariable int id) {
return "hotelId" + id;
}
GetMapping시에 parameter값으로 날아오는 id를 받고 있는 것을 볼 수 있다.
이 때, id가 String인지 int인지 지정해주면, parameter를 자동적으로 변환해준다! 우리는 기본적인 타입 변환을 사용하고 있다는 것을 확인하고 넘어가자
Converter<S, T> Interface 이건 뭐얏?!
package org.springframework.core.convert.converter;
public interface Converter<S, T> {
T convert(S source);
}
S(source)라는 타입을 받아서 T(target)이라는 타입으로 변환해주는 Interface
Interface라는 것은, 우리에게 이렇게 구현해주면 될거야~ 라는 명세다! 이러한 가이드라인을 지켜 구현(implements)하면, 우리가 원하는 방식으로 확장해나갈 수 있다!
즉, 다양한 타입을 받아 우리가 원하는 타입으로 변환을 할 수 있다는 뜻!
정리
특수한 타입으로 변환시키고 싶다면, Converter를 만들어야한다.
만든 Converter를 Bean으로 등록해야 한다.
그럼 우리는 필요한 DTO마다 Converter를 모두 구현해야할까?! 답은 NO!
Jackson을 이용하자
Jackson이란, JSON와 자바 객체 바인딩을 도와주는 라이브러리다! 해당 라이브러리를 이용하면 JSON과 자바 객체 사이의 변환이 자유롭다!
궁금증 하나!
평소에 사용하는 타입은 따로 설정하지 않아도 잘만 됐는데?! String, int 요론고…
워낙 자주 사용하는 것들은 스프링에서 이미 등록을 다 해놓은 것이다! 개발자들의 편의성을 위해 객체로 바꿔주는 Converter가 Bean으로 등록이 되어 있다!
위에서 본 기본적인 타입 변환이 가능한 이유는 이 때문이 아닐까?!
스프링이 무겁다고 하는 이유가 이러한 이유때문이 아닐까?!
자, 마지막 정리!
1. 기본 타입 변환
이미 만들어진 Bean을 이용하여 Spring이 자동적으로 데이터 바인딩 수행
2. JSON 타입 변환
Jackson 라이브러리를 사용하여 데이터 바인딩
3. 특수한 타입 변환
직접 Converter 만들어 Bean 등록
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] Bean관리 누가할래? in TEST (@SpringBootTest @Test 알고 쓰기) (0) | 2024.07.30 |
---|---|
[Spring] DTO는 왜 필요할까? (0) | 2024.07.22 |
[Spring] IoC를 실현하기 위한 DI(의존 관계 주입) 방법 3가지 (0) | 2024.07.18 |
[Spring] @Component 와 @Autowired를 통해 IoC실현하기 (0) | 2024.07.17 |
[Spring] 객체지향적인 개발을 하도록 도와주는 IoC와 DI (0) | 2024.07.16 |