
Data Binding 은 JSON data 과 Java POJO 형식의 data 를 서로 변환하는 과정이다. 흔히 mapping 으로 불리기도 하며, 과정을 각각 Deserialization, Serialization 이라고 한다.
여기서 POJO 는 다음의 의미한다.
POJO
Plain Old Java Object 로, 특정 framework 나 기술에 종속되지 않는 순수한 Java object 를 의미. Java 의 기본적인 객체지향 원칙을 따르며, 일반적으로 field, method, getter/setter 로 구성된 간단한 형태의 class 를 의미한다.
Spring 에서, Spring Boot Starter Web 은 Jackson 이라는 library 를 data binding 을 위하여 dependecy 로 사용한다.
JSON to Java POJO

Jackson 은 Deserialization, 즉 JSON 에서 POJO 로 binding 할 때 setter 를 사용하여 변환한다.
좀 더 내부적으로 살펴보면, Jackson 은 JSON 의 field name 과 Java object 의 field name 을 비교하여 자동으로 mapping 을 수행한다. 예를 들어, Jackson 은 id 는 setId() method 를, firstName 에 대하여는 setFirstName() method 를 call 하는 방식으로 binding 을 수행한다는 것이다.
Jackson 은 이렇게 setter 를 통하여 접근하기 때문에 private field 에 직접적으로 접근하지 않는다.
Java POJO to JSON

이번에는 반대의 과정인 Serialization 이다. Jackson 은 getter 를 사용하여 mapping 을 수행하게 된다.
이렇게 JSON data 는 Jackson 에 의하여 POJO 의 format 으로 변환되어 REST Controller 에게 전달되고, 반대로 JSON data 는 Jackson 에 의하여 REST Controller 의 POJO 로부터 return 된다. 모든 것은 Jackson 에 의하여 자동으로 수행된다.
Jackson Data Binding - Test

우선 위와 같은 구조로 REST Service 를 만들어보자. Development Process 는 다음과 같다.
- Student 에 대한 Java POJO class 를 생성
@RestController을 사용하여 Spring REST Service 를 생성
Student POJO class 는 firstName, lastName 두 개의 field 만으로 구성하고, REST Controller 는 다음과 같이 작성하자.
@RestController
@RequestMapping("/api")
public class StudentRestController {
@GetMapping("/students")
List<Student> getStudents() {
List<Student> theStudents = new ArrayList<>();
theStudents.add(new Student("Arne", "Slot"));
theStudents.add(new Student("Andy", "Robertson"));
theStudents.add(new Student("Mohamed", "Salah"));
return theStudents;
}
}이제 Postman 을 통하여 http://localhost:8080/api/students 으로 request 를 보내면 아래와 같이 response 가 된 것을 볼 수 있다.
REST Controller 에서 List<Student> 형태, 즉 POJO format 으로 return 했지만, Jackson 이 JSON 으로 변환시켜서 결과적으로 Client 에는 JSON 형태로 전달된 것을 볼 수 있다.