커스텀 Repository — QueryDSL 연동을 위한 확장 패턴
1. 개요 JpaRepository의 메서드 이름 쿼리와 @Query로 해결할 수 없는 경우가 있다. 동적 조건이 많거나, QueryDSL 같은 외부 라이브러리를 써야 하거나, 복잡한 집계 쿼리가 필요한 경우다. 이때 커스텀 Repository 패턴을 사용한다. 이 글에서는 커스텀 Repository의 구조, 명명 규칙, EntityManager 직접...
1. 개요 JpaRepository의 메서드 이름 쿼리와 @Query로 해결할 수 없는 경우가 있다. 동적 조건이 많거나, QueryDSL 같은 외부 라이브러리를 써야 하거나, 복잡한 집계 쿼리가 필요한 경우다. 이때 커스텀 Repository 패턴을 사용한다. 이 글에서는 커스텀 Repository의 구조, 명명 규칙, EntityManager 직접...
1. 개요 엔티티 전체를 조회하면 필요 없는 컬럼까지 DB에서 읽어온다. 목록 조회에서 제목과 가격만 필요한데 SELECT *를 날리는 셈이다. Projection은 필요한 필드만 선택적으로 조회해서 데이터 전송량과 메모리 사용을 줄이는 기법이다. Spring Data JPA는 인터페이스 기반, 클래스(DTO) 기반, 동적 Projection 세 가지...
1. 개요 목록 조회에서 전체 데이터를 한 번에 가져오면 메모리가 터진다. 페이징은 이를 조각 단위로 잘라서 가져오는 방식이다. Spring Data JPA는 Pageable, Page, Slice 등의 추상화로 페이징 처리를 단순하게 만들어준다. 이 글에서는 PageRequest 생성 방법, Page와 Slice의 차이, COUNT 쿼리 분리 최적화...
1. 개요 메서드 이름 쿼리는 단순 조건에서 강점을 보이지만, 조건이 복잡하거나 JOIN이 필요하면 한계에 부딪힌다. @Query는 JPQL 또는 SQL을 직접 작성해서 이 한계를 극복한다. 이 글에서는 @Query의 기본 사용법, 파라미터 바인딩 방식, 네이티브 쿼리, 그리고 UPDATE/DELETE 벌크 연산 처리까지 다룬다. 주제 내용 @Quer...
1. 개요 Spring Data JPA는 메서드 이름을 파싱해서 JPQL을 자동으로 생성한다. findByTitle이라고 선언하면 SELECT b FROM Book b WHERE b.title = :title 쿼리가 만들어진다. 별도 SQL 없이 메서드 선언 하나로 쿼리가 완성되는 구조다. 이 방식을 파생 쿼리(Derived Query) 또는 메서드 ...
1. 개요 Spring Data JPA를 쓰다 보면 JpaRepository를 상속하는 인터페이스 하나만 만들어도 저장, 조회, 삭제가 전부 동작한다. 왜 그런지, 내부에서 무슨 일이 벌어지는지 이해하고 있어야 나중에 커스터마이징이나 성능 튜닝을 제대로 할 수 있다. 이 글에서는 Repository 인터페이스 계층 구조, 각 계층이 제공하는 메서드, ...