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 λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  1. Student 에 λŒ€ν•œ Java POJO class λ₯Ό 생성
  2. @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 ν˜•νƒœλ‘œ μ „λ‹¬λœ 것을 λ³Ό 수 μžˆλ‹€.