Spring 106

[Spring][Data Access] 1-7. Transaction Manager: Transaction-bound Events

1. Transaction-bound EventsEvent트랜잭션 경계 내에서 발생하는 이벤트트랜잭션 상태에 따라 분리된 작업 실행 (후처리 작업 또는 알림 처리 등)커스터마이징 가능 예제) OrderCreatedEvent더보기public class OrderCreatedEvent { private final Order order; public OrderCreatedEvent(Order order) { this.order = order; } public Order getOrder() { return order; }}예제) 이벤트 발행더보기@Service@RequiredArgsConstructorpublic class OrderService { pr..

Spring/Spring 2024.08.11

[Spring][Data Access] 1-4. Transaction Manager: Declarative Transaction Management - Understanding the Spring Framework’s Declarative Transaction Implementation (1)

1. Declarative Transaction Management with AOP Proxies@Transactional해당 에노테이션을 메소드 또는 클래스에 사용하여 적용하는 방식항목설명Propagation트랜잭션이 존재할 때 기존 트랜잭션을 사용할지, 새로 생성할지 결정Rollback Rules특정 예외 발생 시 트랜잭션을 롤백할지 여부 지정Read-only트랜잭션 내 작업이 읽기 전용임을 명시 → 성능 최적화 힌트Isolation동시에 실행되는 트랜잭션 간에 데이터 접근 충돌을 어떻게 처리할지 결정Timeout트랜잭션이 제한 시간 내에 완료되지 않으면 롤백No rollback특정 예외 발생 시에도 롤백하지 않도록 설정  예제더보기@Servicepublic class ProductService { ..

Spring/Spring 2024.08.11

[Spring][Data Access] 1-4. Transaction Manager: Declarative Transaction Management

1. Declarative Transaction Management선언적으로 트랜잭션 정의 (Annotation, XML)항목설명특징비침투적 관리 (코드 내에서 직접 트랜잭션 제어 X)핵심 기술Spring AOP 사용 → 트랜잭션 시작/커밋/롤백 경계를 프록시로 자동 처리제어 확장성AOP의 Advice로 커스터마이징 가능 (예: 로깅, 타이밍 등 추가 가능)기본 롤백 규칙RuntimeException 및 Error 발생 시 자동 롤백Checked Exception 처리명시적으로 rollbackFor 속성 지정 필요 예제) annotation (rollback)더보기public class CustomCheckedException extends Exception { public CustomChecked..

Spring/Spring 2024.08.11

[Spring][Data Access] 1-3. Transaction Manager: Synchronizing Resources with Transactions

1. 트랜잭션 매니저와 리소스의 연관성트랜잭션 매니저는 특정 리소스와 연결되어 있음 (Database connection, Hibernate session)트랜잭션 매니저는 자신과 연결된 리소스를 사용해서 트랜잭션을 제어하고 자동으로 관리함 (생성 - 재사용 - 정리) 2. Transaction Synchronization트랜잭션 시작과 종료 시점에 여러 리소스들을 함께 연결되도록 하는 역할트랜잭션 컨텍스트에 묶어서 리소스들을 함께 연결시킴 동작 순서단계설명트랜잭션 시작ThreadLocal에 트랜잭션 컨텍스트 생성리소스들을 트랜잭션 컨텍스트에 연결트랜잭션 도중컨텍스트 내의 리소스를 재사용하며 작업 수행트랜잭션 종료리소스들을 커밋 또는 롤백ThreadLocal에서 컨텍스트 해제 예제) EntityManag..

Spring/Spring 2024.08.11

[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

[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@Query("update User u set u.firstname = ?1 where u.lastname = ?2")int setFixedFirstnameFor(String firstname, String lastname);(attribute) flushAutomatically: EntityManager flush (수정 쿼리 실행 전)(attribute) clearAutomatically: EntityManager clear (수정 쿼리 실행 후, 이전 데이터 삭제하기) delete @Modifying @Query("delete from U..