Spring Boot/Spring Data JPA(33)
-
Transactionality
디폴트 Transaction 설정CrudRepository에서 상속받는 메서드들은 SimpleJpaRepository에서 기본적인 트랜잭션 설정을 상속받습니다. 읽기 작업(read operation)의 경우 @Transactional 어노테이션의 readOnly 속성이 true로 설정됩니다. 반면, 그 외의 작업들은 기본적인 @Transactional 설정이 적용됩니다.예시: CrudRepository 기본 트랜잭션 설정public interface UserRepository extends CrudRepository { @Override @Transactional(timeout = 10) public List findAll(); // 추가적인 쿼리 메서드 선언}위 코드에서는 find..
2024.10.22 -
Projections
Spring Data JPA에서 프로젝션은 엔티티의 전체 데이터가 아니라 특정 속성만 조회할 때 유용한 방법입니다. 특히 대규모 데이터를 다룰 때 불필요한 정보를 조회하지 않고 필요한 속성만을 가져오는 데 도움을 줍니다. 이번 설명에서는 Spring Data JPA에서 제공하는 프로젝션의 여러 방법에 대해 설명하고 샘플 코드를 통해 이해를 도울 것입니다.1. 기본 개념: 프로젝션이란?일반적으로 Spring Data JPA의 쿼리 메서드는 Repository가 관리하는 엔티티, 즉 Aggregate Root의 전체 객체를 리턴합니다. 하지만 일부 속성만 조회하고 싶을 때가 있습니다. 이때, 프로젝션을 사용하여 필요한 속성만 조회할 수 있습니다.2. 기본 예시: 엔티티와 Repository먼저, Person..
2024.10.22 -
Scrolling
데이터베이스에서 대량의 데이터를 처리하는 방식 중 스크롤링(Scrolling)은 데이터를 효율적으로 조회하고 페이지네이션 방식보다 더 세밀한 컨트롤이 가능해 대규모 데이터셋을 다룰 때 유용합니다. 특히 실시간 데이터 처리, 로그 파일 분석, 또는 대규모 레코드 처리 같은 상황에서 유리합니다. 이번 설명에서는 스크롤링의 원리, 주요 유형, 장단점, 그리고 실제 사례를 다루면서 스크롤링의 성능 최적화 및 효과적인 활용 방안을 깊이 있게 살펴보겠습니다.1. 스크롤링의 개념스크롤링은 대규모 데이터셋을 한 번에 모두 가져오는 대신, 일정 단위로 분할하여 데이터를 순차적으로 가져오는 기법입니다. 보통 페이지네이션과 혼동되기도 하지만, 스크롤링은 메모리 사용량을 줄이고 성능을 최적화하는 데 중점을 둔 기법입니다.페이..
2024.10.20 -
Configuring Fetch- and LoadGraphs
JPA 2.1 사양은 Fetch- 및 LoadGraphs를 설정하는 기능을 도입했으며, Spring Data JPA에서도 이를 지원합니다. 이 기능은 @EntityGraph 애노테이션을 통해 사용할 수 있으며, 이를 통해 엔티티의 페치 계획을 구성할 수 있습니다. 이 애노테이션은 @NamedEntityGraph 정의를 참조할 수 있습니다. 이 설명에서는 @EntityGraph를 활용하여 엔티티 그래프를 정의하고 사용하는 방법을 자세히 설명하겠습니다.1. Named Entity Graph 정의Named Entity Graph는 특정 엔티티에 대해 미리 정의된 페치 계획입니다. 이를 통해 엔티티와 관련된 속성을 로드하는 방식을 제어할 수 있습니다. 기본적으로 JPA는 연관된 엔티티를 지연 로드(Lazy Lo..
2024.10.20 -
Applying Query Hints
Spring Data JPA에서 제공하는 다양한 기능을 통해 쿼리를 정의하고, 그 쿼리에 힌트 및 코멘트을 추가하는 방법에 대해 설명하겠습니다.1. 쿼리 힌트 적용하기JPA 쿼리 힌트를 적용하기 위해 @QueryHints 어노테이션을 사용할 수 있습니다. 이 어노테이션은 JPA의 @QueryHint 어노테이션 배열과 페이지네이션을 적용할 때 추가 카운트 쿼리에 적용할 힌트를 비활성화할 수 있는 불리언 플래그를 받습니다.예제: 쿼리 힌트 사용public interface UserRepository extends Repository { @QueryHints(value = { @QueryHint(name = "name", value = "value")}, forCounting = fa..
2024.10.20 -
Other Methods, Modifying Queries
Other MethodsSpring Data JPA는 다양한 방법으로 쿼리를 작성할 수 있는 기능을 제공합니다. 그러나 때때로 쿼리가 제공된 기술로는 너무 복잡할 수 있습니다. 이런 경우에는 다음과 같은 대안들을 고려해볼 수 있습니다.1. 직접 쿼리 작성하기가장 먼저 고려해야 할 방법은 @Query 어노테이션을 사용하여 직접 쿼리를 작성하는 것입니다. 이를 통해 JPQL, HQL, 또는 네이티브 SQL을 사용하여 원하는 대로 쿼리를 구성할 수 있습니다.예를 들어:public interface UserRepository extends JpaRepository { @Query("SELECT u FROM User u WHERE u.lastname = ?1") List findByLastname(String..
2024.10.20