jOOQ multiset 일대다 관계 매핑 / 내부 구현 동작 이해

MULTISET 배경

jOOQ는 강한 타입 검증으로 쿼리를 안전하게 작성하도록 DSL(도메인 특화 언어)로 제공하는 자바 라이브러리입니다.

데이터베이스 스키마 필드를 본따 자바 타입으로 매핑해주는 코드 제너레이터 기능도 플러그인으로 제공해줍니다.

직관적인 DSL 인터페이스로 복잡한 고급 쿼리 작성이 가능합니다.


Join 쿼리를 작성한다고 생각해 볼까요. (출처 : jOOQ multiset 릴리즈 블로그 글)
아래처럼 일대다 관계에서 불필요한 중복된 레코드를 추출하게 됩니다.


+----------------+----------+---------+-----------+
|title           |first_name|last_name|name       |
+----------------+----------+---------+-----------+
|ACADEMY DINOSAUR|CHRISTIAN |GABLE    |Documentary|
|ACADEMY DINOSAUR|JOHNNY    |CAGE     |Documentary|
|ACADEMY DINOSAUR|LUCILLE   |TRACY    |Documentary|
|ACADEMY DINOSAUR|MARY      |KEITEL   |Documentary|
|ACADEMY DINOSAUR|MENA      |TEMPLE   |Documentary|
|ACADEMY DINOSAUR|OPRAH     |KILMER   |Documentary|
|ACADEMY DINOSAUR|PENELOPE  |GUINESS  |Documentary|
|ACADEMY DINOSAUR|ROCK      |DUKAKIS  |Documentary|
|ACADEMY DINOSAUR|SANDRA    |PECK     |Documentary|
|ACADEMY DINOSAUR|WARREN    |NOLTE    |Documentary|
|ACE GOLDFINGER  |BOB       |FAWCETT  |Horror     |
|ACE GOLDFINGER  |CHRIS     |DEPP     |Horror     |
|ACE GOLDFINGER  |MINNIE    |ZELLWEGER|Horror     |
 ...

높은 확률로 위 결과를 그대로 쓰지 않을 거예요. 그룹핑하고 연결해주는, 주요 로직과 큰 관련이 없는 행사 코드가 들어가겠죠. 일대다 관계처럼 중첩된 구조가 두 개 이상이라면 어떻게 될까요? 더욱 복잡한 코드가 들어갈 겁니다.   jOOQ에선 이 문제를 표준 SQL 중 multiset 연산을 지원하는 연산자로 해결했습니다. 데이터베이스 종류 또는 데이터베이스 버전마다 매핑 전략을 다르게 가져갑니다.   아래처럼 한 DTO에 컬렉션 필드 매핑을 지원합니다.


public class DockerImageModel {

    private Long id;
    private String name;
    private String description;

    private List<DockerImageTagModel> tags;

    ...

}


... 더보기 : https://itchipmunk.tistory.com/642

jOOQ multiset 일대다 관계를 중첩 컬렉션으로 매핑 / 내부 동작 이해로 성능 이슈 파악하기

다람쥐의 스프링 개발 블로그

jOOQ multiset 일대다 관계를 중첩 컬렉션으로 매핑 / 내부 동작 이해로 성능 이슈 파악하기

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2025년 3월 20일 오전 3:05

댓글 0