Lombok @Builder와 Jackson 사용 시, @Jacksonized로 DTO 역직렬화 오류를 해결하세요!

by DD
10개월 전
조회수 7

Lombok @BuilderJackson 연동 시, 단일 필드 DTO에서 역직렬화 오류 발생

@Jacksonized 어노테이션을 통해 빌더 기반 역직렬화를 명시적으로 활성화하여 문제 해결

@NoArgsConstructor + @AllArgsConstructor 조합 대신 @Jacksonized 사용 권장, 코드 일관성 확보

Jackson 역직렬화 우선순위와 Lombok @Builder

Jackson은 @JsonCreator 어노테이션, @ConstructorProperties, 파라미터 기반 생성자 순으로 역직렬화를 수행한다. Lombok @Builder는 내부적으로 all-args 생성자를 생성하며, Jackson은 단일 필드에서 Delegate Mode로 간주하여 역직렬화에 실패한다. 따라서, @Jacksonized를 통해 명시적으로 빌더를 사용해야 한다.

@Jacksonized vs. NoArgs + AllArgs, 무엇이 다를까?

@NoArgsConstructor + @AllArgsConstructor 조합은 빌더 패턴의 의도를 해치고, 불필요한 생성자를 노출한다. @Jacksonized는 빌더 기반 역직렬화를 명시하여 코드의 의도를 명확하게 표현하고, 코드 일관성을 유지한다. 따라서, 빌더 패턴의 장점을 살리기 위해 @Jacksonized를 사용하는 것이 좋다.

@Jacksonized 적용, 런타임 성능 영향은?

@Jacksonized는 컴파일 타임에 @JsonDeserialize@JsonPOJOBuilder 어노테이션을 추가한다. 따라서 런타임 성능에 유의미한 영향은 없다. Lombok의 보수적인 기능 통합 정책에도 불구하고, 5년간 널리 사용되었으며, 빌더 기반 역직렬화를 위해 사용을 권장한다. 결과적으로 안정적인 역직렬화를 보장한다.

올해에는 DTO에 @Jacksonized 하나 놓아 드려야겠어요

댓글 0

첫 번째 댓글을 남겨보세요!