피드로 돌아가기
Entity mapping in depth: attributes, types, and nullable fields
Dev.toDev.to
Database

RTTI 캐싱과 Generic Record를 통한 타입 안전적 ORM 매핑 구조

Entity mapping in depth: attributes, types, and nullable fields

David Lastrucci2026년 4월 12일4intermediate

Context

Delphi 언어의 Value Type이 SQL NULL을 직접 처리하지 못하는 타입 시스템의 한계 존재. 매번 RTTI를 통한 속성 분석 시 발생하는 런타임 오버헤드와 동시성 제어 부족 문제 해결 필요.

Technical Solution

  • TTNullable Generic Record 도입을 통한 SQL NULL 상태의 명시적 표현 및 타입 안전성 확보
  • TVersionColumn 속성을 활용한 Optimistic Locking 구현으로 UPDATE/DELETE 시 VersionID 검증 로직 강제
  • RTTI 분석 결과를 TTTableMap으로 구조화하여 TTMapper 싱글톤 인스턴스에 저장하는 글로벌 캐싱 메커니즘 적용
  • {$WARN UNKNOWN_CUSTOM_ATTRIBUTE ERROR} 지시어를 통한 Attribute 오타 방지 및 컴파일 타임 타입 체크 강화
  • TPrimaryKey 전용 Alias(TTPrimaryKey) 정의를 통한 DB 자동 생성 PK의 읽기 전용 속성 보장

- RTTI 기반 프레임워크 설계 시 초기화 비용 제거를 위한 글로벌 매핑 캐시 도입 검토 - 동시성 충돌 방지를 위해 Version Column 기반의 Optimistic Locking 적용 여부 확인 - NULL 가능 필드 처리 시 Primitive Type 대신 별도의 Nullable Wrapper 클래스/레코드 사용 고려 - 커스텀 어노테이션 사용 시 컴파일 타임 에러 체크 옵션을 활성화하여 휴먼 에러 방지

원문 읽기
Entity mapping in depth: attributes, types, and nullable fields | Devpick