2023/12/18 TIL

문정현·2023년 12월 18일
0

지금 막 튜터님 면담하고 와서 해당 내용부터 정리

JPQL vs NativeQuery vs QueryDSL
JPQL이랑 QueryDSL은 객체를 기준으로 개발하기에 데이터 베이스에 종속적이지 않다
물론 queryDSL이 JPQL의 단점들을 (문자열로 쿼리작성하기에 실수하기 쉬움, RunTime에서 에러가 뜨기에 장애 발생하기 쉬움) 보완해서 나온 고오급 기술
하지만 조인을 여러번 하거나 복잡한 요구사항속에서 QueryDSL의 한계가 있기 마련이기에 실제로도 NativeQuery를 사용해 가며 구현한다고 한다

오늘 배운 내용 정리

JPAQueryFactory

QueryDSL을 사용하여 동적 쿼리를 생성, 실행할 수 있는 API를 제공하는 라이브러리
특징으로는 Type Safety가 있는데 그게 뭐죠..?

Type Safety : 자바 컴파일러가 타입 체크를 수행하므로, 쿼리 작성 시 발생할 수 있는 오류를 미리 감지하고 방지할 수 있다

아까 말했던 runtime에서 발생하는 에러를 보완하기 위한 고오급~ 기술이 바로 이런 특징

QClass

QClass는 JPA_APT(JPAAnnotationProcessorTool)가 @Enttiy 와 같은 특정 어노테이션을 찾고 해당 클래스를 분석해서 QClass를 만들어 준다.

APT..? 아파트?
Annotation 이 있는 기존코드를 바탕으로 새로운 코드와 새로운 파일들을 만들 수 있고, 이들을 이용한 클래스에서 compile 하는 기능도 지원해주는 거로 가장 이해하기 쉽게 롬복의 getter, setter를 예시로 들면 머리에 쏙들어올 것이다

이렇게 생성된 QClass는 내가 작성한 Entity 클래스와 대응되며 QClass를 사용하여 엔티티의 속성을 직접 참조하고 조합하여 쿼리를 구성할 수 있다. IDE의 자동완성을 활용할 수 있기 때문에 큰 장점이 있겠지?!

대신 이 QClass를 생성하고 gradle 설정하는게 쉽지 않다 갓영한님의 강의 무료보기에 나와있으니 따라해보자
https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84?gad_source=1&gclid=CjwKCAiA-P-rBhBEEiwAQEXhH8M_4RODcuoc9jAEnta-gacj8pynKadREfXlweriPX07PDSUePhQdhoCAa0QAvD_BwE

profile
주니어 개발자를 꿈꾸며

0개의 댓글