Kotlin JDSL과 jOOQ, QueryDSL의 차이점은 무엇인가요?
Kotlin JDSL은 jOOQ와 QueryDSL과 달리 메타 모델(Metadata Model)을 요구하지 않습니다.
메타 모델을 생성하기 위해 일반적으로 코드 생성(code generation)을 활용하는데, 이 방식은 몇 가지 단점이 있습니다.
프로젝트 초기 설정의 복잡성이 증가합니다.
일반적인 빌드 프로세스에 메타데이터 생성 단계가 추가됩니다.
첫 번째 단점은 여러 플러그인과 레퍼런스를 통해 해결할 수 있지만, 두 번째 단점은 그렇지 않습니다. 코드 생성 방식을 사용하면, 엔티티 수정과 쿼리 작성 사이에 다음과 같은 추가 작업이 요구되며, 이는 개발자의 작업 흐름을 방해할 수 있습니다.
이러한 단점에도 불구하고 jOOQ와 QueryDSL이 인기 있는 이유는 타입 안전성을 제공하여 컴파일 시점에 쿼리 오류를 발견할 수 있게 해주기 때문입니다. Kotlin JDSL은 메타 모델을 요구하지 않으면서도 이러한 타입 안전성을 제공합니다.
Kotlin JDSL은 Kotlin의 KProperty를 활용하여 타입 기반의 쿼리를 작성할 수 있도록 지원합니다. KProperty를 사용함에도 리플렉션으로 인한 성능 저하를 걱정할 필요가 없는데, 이는 Kotlin JDSL이 KProperty의 이름만을 사용하며, Kotlin이 Java로 컴파일할 때 이 이름을 상수로 등록하기 때문입니다.
또한, KProperty는 IDE를 통해 필드 변경을 자동으로 감지할 수 있어, 객체의 필드명이 변경되더라도 즉시 반영됩니다.
Kotlin JDSL은 jOOQ와 QueryDSL이 가진 메타 모델의 단점을 해소하면서도, 성능 저하 없이 그들이 제공하는 타입 안전성의 장점을 유지하며 쿼리를 작성할 수 있게 해주는 라이브러리입니다.
Last updated