본문 바로가기

JSON

[MyPRJ]Jackson ObjectMapper 사용 현황 분석 백엔드 코드는 전반적으로 Spring Boot의 자동 설정 기능을 잘 활용하고 있습니다. spring-boot-starter-web 의존성을 통해 MappingJackson2HttpMessageConverter가 자동으로 등록되고, 대부분의 API 컨트롤러에서 요청/응답(Request/Response)의 JSON 직렬화/역직렬화가 올바르게 처리되고 있습니다. 또한 jackson-datatype-jsr310 모듈을 추가하여 LocalDateTime과 같은 시간 API도 잘 처리되도록 설정되어 있습니다. 이는 매우 바람직한 구성입니다.다만, 코드 베이스를 분석한 결과 몇 군데에서 ObjectMapper를 수동으로 생성하여 사용하는 부분이 발견되었습니다. 이런 방식은 성능 저하와 예기치 않은 동작을 유발할 수.. 더보기
스프링 부트와 Jackson: HttpMessageConverter 완벽 정복 가이드 목차HttpMessageConverter의 정체와 역할주인공의 등장: MappingJackson2HttpMessageConverter스프링 부트의 자동 설정 마법: JacksonAutoConfigurationObjectMapper 커스터마이징: 전역 설정 마스터하기어노테이션을 이용한 정밀 제어: 로컬 설정고급 주제 및 트러블슈팅1. HttpMessageConverter의 정체와 역할Spring MVC는 클라이언트와 서버 간의 통신을 매우 유연하게 처리합니다. 클라이언트는 XML을 원할 수도, JSON을 원할 수도, 혹은 단순 텍스트를 원할 수도 있습니다. 서버는 이러한 다양한 요구에 맞춰 자바 객체를 특정 데이터 포맷으로 변환하거나, 그 반대의 작업을 수행해야 합니다.이때 등장하는 것이 바로 HttpMe.. 더보기
Jackson:고급 커스터마이징 및 구성 V. 고급 커스터마이징 및 구성5.1. ObjectMapper 전역 설정어노테이션이 개별 클래스나 필드에 대한 규칙을 정의한다면, ObjectMapper 설정은 애플리케이션 전반에 걸친 기본 동작을 정의합니다.알 수 없는 속성 무시: JSON에 Java 객체에 없는 필드가 포함되어 있을 때, 기본적으로 Jackson은 UnrecognizedPropertyException 예외를 발생시킵니다. 이를 방지하려면 ObjectMapper에 다음과 같이 설정할 수 있습니다.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);이는 클래스마다 @JsonIgnoreProperties(ignoreUnknown = true)를 붙.. 더보기
Jackson:복잡한 객체 모델링: 다형성, 순환 참조, 그리고 뷰 IV. 복잡한 객체 모델링: 다형성, 순환 참조, 그리고 뷰실세계의 데이터 모델은 단순한 키-값 쌍을 넘어 복잡한 관계를 가집니다. Jackson은 이러한 복잡성을 다루기 위한 정교한 기능들을 제공합니다.4.1. 순환 참조 처리객체들이 서로를 참조하는 경우(예: User가 Item 리스트를 갖고, 각 Item이 다시 User를 참조), 아무 처리 없이 직렬화하면 무한 재귀에 빠져 StackOverflowError가 발생합니다. Jackson은 이를 해결하기 위해 두 가지 주요 메커니즘을 제공합니다.기본적인 해결책 (@JsonManagedReference & @JsonBackReference): 이 한 쌍의 어노테이션은 부모-자식 관계와 같은 단순한 양방향 참조를 해결하기 위해 설계되었습니다. 부모 측(주.. 더보기
Jackson 어노테이션: 직렬화와 역직렬화 III. Jackson 어노테이션: 직렬화와 역직렬화Jackson의 방대한 어노테이션은 개발자가 JSON 변환의 거의 모든 측면을 제어할 수 있게 해줍니다. 다음 표는 주요 어노테이션을 기능별로 요약한 것입니다.어노테이션 (Annotation)분류 (Category)목적 (Purpose)주요 사용 사례@JsonProperty일반속성 이름 지정Java 필드명과 JSON 키 이름 매핑@JsonIgnore일반속성 무시특정 필드를 직렬화/역직렬화에서 제외@JsonInclude직렬화조건부 포함null, 빈 값, 기본값 등을 직렬화에서 제외@JsonFormat일반데이터 형식 지정날짜/시간 값의 출력 형식을 yyyy-MM-dd 등으로 지정@JsonGetter / @JsonSetter일반Getter/Setter 지정비.. 더보기
JSON 속성 제어: 이름 변경, 무시, 필터링 II. JSON 속성 제어: 이름 변경, 무시, 필터링Jackson은 어노테이션을 통해 직렬화 및 역직렬화되는 속성을 세밀하게 제어하는 강력한 기능을 제공합니다.2.1. 속성 이름 변경: @JsonPropertyJava 클래스의 필드명(예: camelCase)과 JSON의 키 이름(예: snake_case)이 다를 때 @JsonProperty를 사용하면 둘 사이를 매핑할 수 있습니다. 이는 외부 API 연동 시 매우 흔하게 사용되는 기능입니다.public class MyDto { private String stringValue; // "stringValue" 필드를 JSON에서는 "strVal"로 매핑 @JsonProperty("strVal") public String getStri.. 더보기
Jackson 시작하기: ObjectMapper와 Gradle 프로젝트 설정 1.1. Jackson과 ObjectMapper 소개Jackson은 Java 생태계에서 사실상의 JSON 처리 표준으로 자리 잡은 라이브러리입니다. Java 객체를 JSON으로 변환하는 직렬화(Serialization) 과정과 JSON을 Java 객체로 변환하는 역직렬화(Deserialization) 과정을 매우 유연하고 강력하게 지원합니다.이 모든 기능의 중심에는 ObjectMapper 클래스가 있습니다. 이 클래스는 Jackson 라이브러리의 핵심 진입점으로, JSON 콘텐츠를 파싱하여 Java 객체로 만들거나(readValue), Java 객체를 JSON으로 출력하는(writeValue) 등 대부분의 변환 작업을 담당합니다. 개발자는 ObjectMapper를 생성하고 구성함으로써 Jackson의 다.. 더보기