2024/08/11 8

[Spring][Data Access] 5-1. ORM Data Access: Introduction to ORM with Spring

1. Spring - ORM 통합ORM 프레임워크와의 통합을 통해 쉽게 코드 관리를 할 수 있게 해줌Spring의 IoC, AOP, Transaction Abstraction을 기반으로 활용 이점항목설명테스트 용이성Spring IoC로 인해 구현체를 쉽게 교체할 수 있음일관된 예외 처리JPA/Hibernate 예외 → Spring의 DataAccessException으로 변환됨자원 관리EntityManager, Session 등의 ORM 리소스를 Spring이 자동으로 lifecycle 관리통합된 트랜잭션 관리선언적 트랜잭션 경계 관리 지원 (@Transactional + AOP 기반)DAO 구현 간소화@Repository, JpaRepository 등으로 데이터 접근 계층을 쉽게 정의 가능  출처Spr..

Spring/Spring 2024.08.11

[Spring][Data Access] 2. DAO Support

Spring은 다양한 데이터 접근 기술을 일관된 방식으로 사용할 수 있도록 도와줍니다 1. Consistent Exception Hierarchy각 기술별로 발생하는 예외들을 Spring의 예외 계층인 DataAccessException으로 통일기술원래 예외변환된 예외 (Spring)JDBCSQLExceptionDataAccessException (예: CannotGetJdbcConnectionException, BadSqlGrammarException)JPA (Hibernate 포함)PersistenceExceptionDataAccessException (예: JpaSystemException, DataIntegrityViolationException)MyBatisPersistenceExceptionD..

Spring/Spring 2024.08.11

[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