-
[Database] QueryDSL 개념 및 사용 방법Database 2024. 3. 24. 14:41
📌 목차
- QueryDSL 이란?
- QueryDSL 사용 방법
📌 QueryDSL 이란 ?
DSL ( Domain Specific Language ) 란, 특정 영역에 특화된 언어를 의미하며,
QueryDSL 은 쿼리 생성에 특화된 프레임워크를 지칭하는 말이다.
정리하면 QueryDSL 는 Hibernate 쿼리 언어의 쿼리를 생성 및 관리해주는 오픈소스 프레임워크이며
공식 문서에서 확인할 수 있듯이 JPA, SQL, Mongodb 등의 여러가지 모듈을 지원하고 있다.
⚡ QueryDSL JPA
나는 SpringBoot 로 토이프로젝트를 하고 있어서 QueryDSL JPA 에 대해 좀더 자세히 알아보려고 한다.
- QueryDSL JPA는 SQL, JPQL을 코드로 작성할 수 있도록 해주는 빌더 역할의 API 이다. - Entity 클래스와 매핑되는 QClass 라는 객체를 사용하여 쿼리를 실행한다. ( JPA Annotation Processeor 가 컴파일 시점에 작동하여 @Entity 등등의 어노테이션을 찾아 해당 파일들을 분석하고 QClass 를 만들어 준다. ) - QueryDSL 은 동적 쿼리를 아주 편리하게 작성할 수 있어 복잡한 동적 쿼리에서 사용하고, 단순한 경우에는 Spring Data JPA 를 사용한다.
⚡ ORM ( Object Relational Mapping )
- 객체와 관계형 데이터베이스 매핑을 뜻하는 말이다.
OOP ( Object Oriented Programming ) 에서 쓰는 객체라는 개념을 구현한 클래스와
RDB ( Relational Database ) 에서 쓰이는 데이터인 테이블을 매핑(연결)하는 것을 의미한다.
- 객체 ORM 을 이용하면 SQL Query 가 아닌 메소드를 통해 데이터를 조작할 수 있다.
예를 들어
SELECT * FROM WORK;
이라는 쿼리 대신 WORK 테이블과 매핑된 객체를 통해
work.findAll();
메소드 호출로 데이터를 조작할 수 있다.
⚡ HIBERNATE
- 하이버네이트는 자바 언어를 위한 ORM 프레임워크이다.
JPA 의 구현체로 JPA 인터페이스를 구현하며 내부적으로는 JDBC API 를 사용한다.
⚡ JPA ( Java Persistence API )
- 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 모음이다.
⚡ JDBC ( Java Database Connectivity )
- 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API 이다.
즉 자바에서 DB 작업을 위한 표준이라고 설명 할 수 있다.
📌 QueryDSL 사용 방법
IntelliJ IDEA 에서 프로젝트를 진행하고 있어 해당 빌드 옵션으로의 설정 방법이다.
1. build.gradle ( .kts )
dependencies { /* Querydsl build.gradle 사용 시 */ implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api }
dependencies { /* QueryDSL build.gradle.kts 사용 시 */ // QueryDSL Version Setting val queryDslVersion = "5.0.0" implementation ("com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta") annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:jakarta") annotationProcessor("jakarta.persistence:jakarta.persistence-api") annotationProcessor("jakarta.annotation:jakarta.annotation-api") }
2. gradle 작업 옵션에서 clean → classes 또는 compile.java 클릭
3. QClass 생성 확인
4. Repository 에서 사용
+. QClass 삭제 시
IntelliJ IDEA 에서는 src/main/generated 에 파일이 생성되고, 상황에 따라 QClass 파일을 직접 삭제해야하는 경우도 있다.
build.gradle(.kts) 에 아래 스크립트를 추가하면 gradle clean 명령어를 실행할 때, src/main/generated 의 파일도 같이 삭제된다.
//Querydsl 추가, 자동 생성된 Q클래스 gradle clean으로 제거 clean { delete file('src/main/generated') }
📌 Reference
@L.O.K - [QueryDSL] QueryDSL이란?
https://lordofkangs.tistory.com/
@<Hyun/Log> - [JPA] QueryDSL이란? 그리고 설정 방법
https://hstory0208.tistory.com/
@coco3o - [DataBase] ORM(Object Relational Mapping)의 개념
@suhwan.dev - JPA, Hibernate, 그리고 Spring Data JPA의 차이점
@경험의 연장선 - [DB] 하이버네이트(Hibernate)란?
'Database' 카테고리의 다른 글
[Database] H2 DB 개념 및 3가지 모드와 사용법 (0) 2024.03.19