분류 전체보기 557

[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

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