피드로 돌아가기
Java Records Deserve a Mapper Built for Them
Dev.toDev.to
Backend

Reflection 배제 및 APT 기반 Canonical Constructor 직접 호출을 통한 Java Record 매핑 최적화

Java Records Deserve a Mapper Built for Them

Dinuka Karunarathna2026년 5월 24일4intermediate

Context

기존 Object Mapper들이 Mutable한 JavaBeans 구조에 의존함에 따라 Immutable한 Java Record 지원 미비 Reflection 기반의 필드 접근이나 가상의 Setter 호출 시도로 인한 Runtime Failure 발생 가능성 상존

Technical Solution

  • Annotation Processor(APT)를 도입하여 mvn compile 단계에서 매핑 코드를 직접 생성하는 정적 설계
  • Record의 Canonical Constructor를 직접 호출하는 Plain Java Source 생성으로 Runtime Overhead 제거
  • 컴파일 타임에 Type Mismatch 및 Unmapped Component를 검증하여 빌드 단계에서 오류 조기 발견
  • Sealed Class 계층 구조 분석 기능을 통해 최신 Java 타입 시스템의 다형성 매핑 지원
  • AOP나 Proxy 없이 Lifecycle Hook을 인라인 코드로 삽입하여 호출 스택 단순화
  • Reflection 기반의 Fluent API를 선택적 Escape Hatch로 제공하여 유연성 확보

- Java Record 도입 시 기존 Mapper의 Reflection 기반 동작이 Runtime 성능 저하 및 불안정성을 초래하는지 검토 - Runtime Error를 Compile Error로 전이시킬 수 있는 APT(Annotation Processing Tool) 기반 라이브러리 우선 고려 - Immutable 데이터 모델 설계 시 Setter 기반의 라이브러리 의존성을 제거하고 생성자 기반의 데이터 전송 구조 채택

원문 읽기