분류 전체보기(319)
-
PESSIMISTIC_READ, PESSIMISTIC_WRITE
PESSIMISTIC_READ비관적 읽기 잠금(Pessimistic Read Lock)은 데이터베이스에서 데이터의 일관성과 무결성을 보장하기 위해 사용되는 잠금 전략 중 하나입니다. 이 잠금 방식은 다른 트랜잭션이 데이터를 수정할 수 없도록 하여 읽기 작업 중에 데이터의 변경을 방지합니다. 아래에서 비관적 읽기 잠금에 대해 설명하겠습니다.비관적 읽기 잠금(Pessimistic Read Lock)비관적 읽기 잠금은 주로 다음과 같은 경우에 사용됩니다:동시성 제어: 여러 트랜잭션이 동시에 같은 데이터를 읽거나 쓸 수 있는 경우, 데이터의 일관성을 유지하기 위해 비관적 잠금을 사용합니다. 이 잠금 방식은 데이터의 무결성을 유지하기 위해 다른 트랜잭션의 수정 작업을 차단합니다.데이터 충돌 예방: 데이터 변경이 ..
2024.10.22 -
Locking
Locking은 데이터베이스에서 동시성을 관리하는 중요한 메커니즘으로, 여러 트랜잭션이 데이터에 접근할 때 데이터 무결성을 보장하기 위해 사용됩니다. Spring Data JPA에서는 @Lock 어노테이션을 사용하여 쿼리 메서드나 CRUD 메서드에 잠금 모드를 지정할 수 있습니다. 아래에서 이를 자세히 설명하겠습니다.1. 쿼리 메서드에서 Lock 모드 정의하기쿼리 메서드에 @Lock 어노테이션을 사용하여 사용할 잠금 모드를 지정할 수 있습니다. 예를 들어, LockModeType.READ를 사용하면 해당 쿼리가 읽기 전용 잠금으로 실행됩니다. 이렇게 하면 다른 트랜잭션에서 동일한 데이터에 대한 변경 작업을 할 수 없게 되어, 데이터 무결성이 유지됩니다.예시 1: 쿼리 메서드에서 Lock 메타데이터 정의하..
2024.10.22 -
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