[SpringBoot Querydsl : Projection]

Han Gyul Kang·2022년 5월 5일
0

Inflern_Spring_Querydsl

목록 보기
5/7

> 프로젝션

프로젝션 대상이 하나라면 쿼리 조회 결과 타입을 명확하게 지정할 수 있다.
프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회한다.

> 튜플 조회

다양한 데이터 타입을 막 담아서 꺼낼 수 있는 것

> Tuple Type

해당 타입을 repository계층 안에서 사용하는 것은 좋으나 service, controller까지 넘어가는 설계는 좋지 않다.
핵심 비즈니스 로직을 앞단에서 알게 되는 것을 경계해야 한다.
Tuple은 Querydsl에 종속되어있는 타입이기 때문에 Tuple보다는 DTO 객체를 사용하는 것이 좋다.
(나중에 Querydsl이 아닌 다른 것으로 변환할 때도 유연하게 코드 수정이 가능함)

사용해야할 경우 가급적이면 repository 계층 내에서만 사용하는 것을 권장한다.

> Querydsl 빈 생성

결과를 DTO로 반환할 때 사용

[3가지 방식]

  1. 프로퍼티 접근 : Setter 이용
  2. 필드 직접 접근 : Field를 직접 이용(Getter, Setter 필요 없음)
  3. 생성자를 이용

[궁극의 방법]

@QueryProjection
사용하는 Dto의 생성자에 붙임 -> Dto에 대한 Q파일 생성이 됨.

해당 Q파일로 조회를 하게되니 해당 어노테이션이 붙어있는 생성자의 타입이랑 안 맞으면
컴파일 시 바로 에러가 발생함(디버깅하기 편함).

* 생성자(Projection.constructor)를 사용하여 조회할 경우 실행을 했을 때 
에러가 발생함	(Runtime Exception).

* @QueryProjection을 사용하면 코드를 작성하는 시점에 에러가 발생함(개발 안정성++).

단점

  1. Q파일을 생성해야 함.
  2. 기존 Dto는 Querydsl에 의존성을 가지지 않았음, 그렇기 때문에 설계 측면에서 Querydsl을 제외할 경우 에러가 잔득 발생함.
  3. Dto로서의 순수성은 사라짐

결론 : 큰 단점은 아닌 듯

> 예제

github:gang6607

profile
피아노 치는 개발자

0개의 댓글