..
JPQL: 자바 객체를 대상으로 하는 쿼리 언어
1. JPQL(Java Persistence Query Language)이란?
JPQL은 JPA(Java Persistence API)의 일부로 정의된 쿼리 언어입니다. 범용적인 SQL이 데이터베이스의 테이블을 대상으로 쿼리를 작성한다면, JPQL은 엔티티(Entity) 객체를 대상으로 작성하는 객체 지향 쿼리입니다.
2. SQL과의 주요 차이점
- 대상: SQL은
SELECT * FROM MEMBER처럼 테이블 중심이지만, JPQL은SELECT m FROM Member m처럼 엔티티 객체 중심으로 사고합니다. - 추상화: 특정 데이터베이스 방언(Dialect)에 의존하지 않으므로, DB를 갈아 끼우더라도 JPQL 코드는 거의 변경되지 않습니다.
3. JPQL 작성 방법들
@Query어노테이션: 리포지토리 메소드 위에 문자열로 쿼리를 직접 작성합니다. 빠르지만 런타임에 오류를 알 수 있다는 불안함이 있습니다.- Criteria Query: 자바 코드로 쿼리를 짜는 표준 API입니다. 컴파일 타임에 오류를 잡을 수 있지만 코드가 매우 복잡하고 읽기 어렵습니다.
- QueryDSL: (권장) 자바 코드로 직관적인 쿼리 작성을 가능하게 해주는 외부 라이브러리입니다. 가독성이 훌륭하고 컴파일 시점에 문법 오류를 완벽하게 잡아냅니다.
단순한 CRUD는 JPA 기본 기능을 사용하고, 복잡한 통계나 조인(Join) 쿼리가 필요할 때 QueryDSL과 같은 강력한 도구와 함께 JPQL을 적절히 활용하는 것이 모던 자바 개발의 핵심 전략입니다.