전체 글 315

[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

[Real MySQL] 5-2. 트랜잭션과 잠금

"Real MySQL" 책을 정리한 포스팅 입니다. 4. 격리 수준특정 트랜잭션이 얼마나 독립적으로 실행될 수 있는지 정의 (여러 트랜잭션이 동시에 처리될 때)다른 트랜잭션의 중간 결과에 얼마나 영향을 안받을 지다른 트랜잭션에서 변경한 데이터를 얼마나 볼 수 있게 허용할지뒤로갈수록 고립도는 높아지고, 동시성과 성능이 떨어집니다. READ UNCOMMITTEDDirty Read 허용동시성 & 성능 높음데이터 일관성  & 정합성 보장 X (일반적인 DBMS에서 사용 X) Dirty Read다른 트랜잭션에서 커밋되지 않은 트랜잭션 내용 읽기 O READ COMMITTED다른 트랜잭션에서 커밋된 트랜잭션 내용만 읽기 O균형 좋음 (동시성 & 성능 - 데이터 일관성 & 정합성)데이터 일관성 문제 (NON-REPE..

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