분류 전체보기 560

[Spring][Data Access] 1-2. Transaction Manager: Understanding the Spring Framework Transaction Abstraction

1. Transaction StretegySpring이 트랜잭션을 어떻게 처리할지 정의TransactionManager 인터페이스에서 담당 2. TransactionDefinition트랜잭션의 동작 방식 정의 코드) TransactionDefinition 인터페이스더보기public interface TransactionDefinition { int PROPAGATION_REQUIRED = 0; int PROPAGATION_SUPPORTS = 1; int PROPAGATION_MANDATORY = 2; int PROPAGATION_REQUIRES_NEW = 3; int PROPAGATION_NOT_SUPPORTED = 4; in..

Spring/Spring 2024.08.11

[Spring][Data Access] 1-1. Transaction Manager: Advantages of the Spring Framework’s Transaction Support Model

1. Global Transactions (Distributed Transactions)여러 트랜잭션 리소스를 하나의 트랜잭션으로 묶어 관리여러 자원간의 데이터 일관성 유지가 목적 JTA (Java Transaction API)항목설명설명Java에서 전역 트랜잭션을 관리하기 위한 표준 API용도분산 환경에서의 트랜잭션을 통합적으로 관리 (예: 여러 DB, 메시지 큐 등)주요 클래스UserTransaction, TransactionManager 등사용 방식JNDI를 통해 UserTransaction 객체를 주입받아 트랜잭션 제어단점- 복잡성: 예외 처리, 롤백 시나리오 등이 복잡함- 의존성: JNDI를 통한 객체 주입이 필요 (환경 설정 및 컨테이너 종속성)예제) UserTransaction더보기publi..

Spring/Spring 2024.08.11

[Real MySQL] 5-2. 트랜잭션과 잠금: 격리 수준

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 4. 격리 수준여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 얼마나 독립적으로 실행될 수 있는지 정의다른 트랜잭션의 중간 결과에 얼마나 영향을 안받을 지다른 트랜잭션에서 변경한 데이터를 얼마나 볼 수 있게 허용할지뒤로갈수록 고립도는 높아지고, 동시성과 성능은 떨어집니다. 종류격리 수준설명허용되는 현상성능일관성READ UNCOMMITTED커밋되지 않은 데이터도 읽기 가능Dirty Read매우 높음매우 낮음READ COMMITTED커밋된 데이터만 읽기 가능. 동일 쿼리 결과가 다를 수 있음Non-Repeatable ReadPhantom Read높음중간REPEATABLE READ(InnoDB 기본값)트랜잭션 내에서는 항상 동일한 데..

Database/Mysql 2024.08.10

[Spring Data JPA] 3-4. Specifications

1. Specification도메인 객체에 대한 조건을 정의public interface Specification { Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder);}  Predicate각 조건을 표현하는 객체 (where 절) CriteriaBuilder다양한 조건을 빌드할 수 있는 객체 Definitionpublic class CustomerSpecs { // 특정 날짜 이전에 생성된 고객을 찾는 Specification public static Specification isLongTermCustomer() { return (root, query, builder) -> { ..

[Spring Data JPA] 3-3. Custom Repository Implementations

1. CustomizingInterface: Custom Repository interface CustomizedUserRepository { void someCustomMethod(User user);} Implements: Custom Repository Interface (High Priority)postfix: Implclass CustomizedUserRepositoryImpl implements CustomizedUserRepository { @Override public void someCustomMethod(User user) { // 사용자 정의 구현 내용 }} Extends: CrudRepositoryinterface UserRepository extends CrudRepo..

[Spring Data JPA] 3-2. JPA Query Methods (4)

8. Modifying Queries@Modifying명시적 쿼리 선언 메서드 중, 수정 or 삭제 연산일 때 붙여주는 애노테이션 예제) update더보기@Modifying(flushAutomatically = true, clearAutomatically = true)@Query("update User u set u.firstname = ?1 where u.lastname = ?2")int setFixedFirstnameFor(String firstname, String lastname);flushAutomatically: 커밋 전 플러시clearAutomatically: 커밋 후 영속성 컨텍스트 초기화 예제) delete더보기 @Modifying @Query("delete from User u wh..

[Spring Data JPA] 3-2. JPA Query Methods (6)

11. Configuring Fetch- and LoadGraphsEntity Graph엔티티 조회 시, 연관 엔티티들을 fetch 하기 위한 구성 (어떤 연관 엔티티를 함께 로딩할 지 정의)특징Fetch GraphLoad Graph정의명시된 속성만 Fetch하고 나머지 속성은 Lazy로 처리명시된 속성만 Fetch하고 나머지 속성은 FetchType 설정에 따름사용법javax.persistence.fetchgraph를 사용javax.persistence.loadgraph를 사용사용 시점엔티티를 조회할 때 실행 시점에 따라 로딩될 속성 지정엔티티를 조회할 때 그래프에 따라 로딩될 속성 지정 예제) 엔티티 그래프 정의더보기Entity@Entity@NamedEntityGraph(name = "GroupIn..

[Spring Data JPA] 3-2. JPA Query Methods (5)

8. Scrolling대규모 결과 집합을 작은 청크 단위로 처리할 수 있음 모든 결과를 메모리에 로드 X (효율적으로 처리)기능설명Window스크롤링 중 반환되는 청크 - 정보: 현재 청크 데이터 + 위치 정보ScrollPosition스크롤링 작업에서 특정 위치를 나타내기 위한 객체- Offset-based특정 오프셋 위치부터 데이터를 가져옴- Keyset-based키셋 기반으로 데이터를 가져옴 - non-nullable 정렬 속성 사용Scrolling Type - Offset-basedDB에서 전체 결과를 물리화 ✅- 특정 오프셋 위치부터 데이터를 잘라서 반환- Keyset-basedDB에서 전체 결과를 물리화 ❌- 인덱스를 활용하여 데이터를 반환- 오프셋 기반의 단점을 보완 예제) ScrollPosi..