Spring 90

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

1. Spring - ORM 통합데이터베이스와의 상호작용을 쉽게 처리 가능 (IoC Container 활용)DAO 구현, 트랜잭션 전략, 자원 관리 이점테스트 용이성ORM 관련 코드를 독립적으로 테스트하기 쉬움 (구현체 쉽게 교체 가능)(IoC) 일관된 예외 처리ORM 도구에서 발생하는 예외들을 공통의 계층으로 변환 (DataAccessException) 자원 관리퍼시스턴스 자원들을 쉽게 관리 및 구성 가능 통합된 트랜잭션 관리선언적 트랜잭션 관리 (@Transactional + AOP Proxies) 출처Spring - Introduction to ORM with Spring

Spring/Spring 2024.08.11

[Spring][Data Access] 2. DAO Support

Spring은 다양한 데이터 접근 기술을 일관된 방식으로 사용할 수 있도록 도와줍니다 1. Consistent Exception Hierarchy특정 기술별로 발생하는 예외들을 DataAccessException 계층으로 변환 (Spring 자체)SQLException(JDBC), PersistenceException(JPA) 장점일관된 방식으로 예외 처리예외가 발생했을 때, 원래 예외에 대한 정보를 잃지 않음 2. @RepositorySpring에서 DAO나 Repository 클래스를 정의할 때 사용 (빈으로 등록됨)Spring이 자동으로 예외를 변환해줌 (데이터 접근 계층에서 예외를 일관되게 처리 가능) 3. Dependency Injection관련 데이터베이스 리소스 주입   출처Spring - ..

Spring/Spring 2024.08.11

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

1. Transaction-bound Eventsevent커스텀 이벤트트랜잭션 경계 내에서 발생더보기이벤트 객체public class OrderCreatedEvent { private final Order order; public OrderCreatedEvent(Order order) { this.order = order; } public Order getOrder() { return order; }} 더보기이벤트 발행@Service@RequiredArgsConstructorpublic class OrderService { private final ApplicationEventPublisher eventPublisher; @Transactio..

Spring/Spring 2024.08.11

[Spring][Data Access] 1-4. Transaction Manager: Declarative Transaction Management - Using @Transactional (3)

1.  @Transactional트랜잭션 경계를 선언적으로 설정하는데 사용됨 (메서드나 클래스)public 메서드만 트랜잭션 대상으로 간주 (class-based proxy 사용 시, protected or package-private 메소드도 적용 가능) SettingtransactionManagerpropagationisolationreadonlytimeoutrollbackfornoRollbackfor 2. Transaction with AOPSpring의 선언적 트랜잭션 관리는 AOP를 기반으로 함이 프록시는 TransactionInterceptor를 통해 트랜잭션 작업을 수행 (시작, 커밋, 롤백) AspectJ ModeAOP 프록시를 사용하므로 자기 호출에는 트랜잭션 적용 X (인스턴스가 자신의..

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해당 에노테이션을 메소드 또는 클래스에 사용하여 적용하는 방식 Transaction Metadata트랜잭션 관리에 필요한 정보를 메타데이터를 통해 제공 (XML or Annotation)전파 수준, 롤백 규칙 (예외 클래스), 읽기 전용더보기@Servicepublic class ProductService { // 기본 트랜잭션 설정: REQUIRED 전파 수준, 기본 격리 수준 @Transactional public void addProduct(Product product) { // 트랜잭션이 시작됩니다. saveProduct(product);..

Spring/Spring 2024.08.11

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

1. Declarative Transaction Management선언적으로 트랜잭션 정의 (Annotation, XML)코드 내에서 직접 트랜잭션 관리 X AOP 사용실제 트랜잭션 경계 설정 및 관리 자동화 (비침투적)세밀한 트랜잭션 동작 제어 (Advice 추가 가능) 롤백 규칙기본적으로 unchecked exception에 대해 자동 롤백 (checked exception 자동 롤백 X)롤백 규칙을 설정하여 특정 예외 발생 시, 자동 롤백을 설정할 수 있음// 트랜잭션 전파와 롤백 규칙 설정@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)public void updateUserEmail(Long user..

Spring/Spring 2024.08.11

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

1. 트랜잭션 매니저와 리소스의 연관성트랜잭션 매니저는 특정 리소스와 연결되어 있음 (Database connection, Hibernate session)각각의 트랜잭션 매니저는 자신과 연결된 리소스를 자동으로 관리 및 사용 (생성 - 재사용 - 정리) 2. Transaction Synchronization리소스들이 트랜잭션의 시작과 종료 시점에 적절히 동작하도록 하는 매커니즘 트랜잭션 시작트랜잭션 컨텍스트 내에서 동기화됨 트랜잭션 종료커밋 or 롤백 -> 동기화 해제 3. High-level Synchronization ApproachTemplate-based API@Repositorypublic class UserRepository { private final JdbcTemplate jdbcT..

Spring/Spring 2024.08.11

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

1. Transaction StretegySpring이 트랜잭션을 어떻게 처리할지 정의TransactionManager 인터페이스에서 담당 2. TrasactionDefinition트랜잭션의 동작 방식 정의더보기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; int PROPAGATION_NEVER = 5; int PROPAGATION_N..

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)여러 트랜잭션 리소스를 하나의 트랜잭션으로 묶어 관리 (atomic)여러 자원간의 데이터 일관성 유지 O JTAJava Transaction APIJava에서 전역 트랜잭션을 관리하기 위한 표준 API 단점복잡성: 예외처리 모델의존성: JNDI를 통해 UserTransaction 객체 주입받아야 함더보기public class JTADemo { public static void main(String[] args) { UserTransaction userTransaction = null; try { // JNDI를 통해 UserTransaction 객체를 주입받아야 함 ..

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) -> { ..