JSON 3

Jackson > Intermediate > TypeIdResolver

한 서비스에서 잭슨을 이용하여 레디스 캐쉬 서버에 JSON을 저장하고 다른 서비스에서 그것을 읽어야 한다면, 다형성을 지원해야 한다면 결론적으로 TypeIdResolver를 사용해야 한다. 저장하는 쪽과 조회하는 쪽의 데이터 모델은 패키지명, 클래스명이 달라질 수 있으니 물리적인 타입 식별자를 사용할 수 없다. (사용 시 예외 발생) 다형성을 지원해야 한다면 데이터에 타입 식별자 메타데이터를 추가해야 한다. 앞서 배운 것들을 활용하면 @JsonTypeInfo와 @JsonSubTypes를 명시하는 것이다. 하지만 이를 매번 작성하는 것은 반복적이고 비생산적이다. TypeIdResolver 위 문제를 해결하기 위해 TypeIdResolver를 이용할 수 있다. 단계적으로 테스트로 생각을 검증해보면서 내용을 ..

JSON/Jackson 2023.11.13

Jackson > Basic

준비 https://github.com/FasterXML/jackson 다양한 기능을 제공하지만 핵심은 JSON을 위한 Data binding이다. Gradle 기준으로 아래 Dependency를 추가하면 핵심 객체인 ObjectMapper를 사용할 수 있다. implementation platform("com.fasterxml.jackson:jackson-bom:2.15.3") implementation "com.fasterxml.jackson.core:jackson-databind" 공식 문서 중 가장 쉬운 튜토리얼은 아래에 있다. https://github.com/FasterXML/jackson-databind#use-it 잭슨은 별도의 공식 레퍼런스 웹사이트가 존재하지 않는 것 같고 깃헙 위키에..

JSON/Jackson 2023.11.10

Jackson > 학습 동기

웹 애플리케이션 개발 시 JSON 직렬화는 꽤나 많이 쓰이게 된다. Spring Framework의 @RequestBody, @ResponseBody Redis에 객체를 저장하거나 조회할 때 .. 스프링은 JSON 직렬화 라이브러리로 FasterXML/Jackson을 사용하고 있다. 스프링을 이용한 개발을 하면서 최소한의 필수 동작방식만 그때 그때 공부해서 개발을 하다보니 Jackson의 동작방식에 대해서 잘 모르고 있어, 본격적으로 공부를 해야겠다는 생각이 들었다. 사실 이번에는 Spring Boot를 사용하여 레디스에 데이터를 JSON으로 직렬화하려고 하는데, 데이터 구조가 조금만 복잡해지더라도 문제가 생겼다. Spring Data Redis 라이브러리는 JSON 직렬화 시 잭슨을 사용하기 때문에 결..

JSON/Jackson 2023.11.10