트랜잭션 관련 포스팅
- [Spring] 트랜잭션 추상화 정리
- [Spring] 트랜잭션 동기화 정리
- [Spring] 트랜잭션 AOP 동작 흐름
- [Spring] 트랜잭션 AOP 사용 시 주의점 (ft. Spring AOP self-invocation)
- [Spring] 스프링 트랜잭션 전파와 롤백
- [Spring] 트랜잭션 전파 옵션
트랜잭션 의존

- 트랜잭션을 사용하는 코드는 데이터 접근 기술마다 다르다
- 따라서 데이터 접근 기술이 바뀌면 서비스 계층의 코드도 바뀐다
- 이는 OCP 원칙을 위반한다
트랜잭션 추상화
public interface TxManager {
begin();
commit();
rollback();
}
- 트랜잭션은 단순하다. 트랜잭션을 시작하고 비즈니스 로직이 끝난 후 커밋이나 롤백을 수행하면 된다
- 따라서 이 인터페이스를 기반으로 각 데이터 접근 기술에 적합한 구현체를 만들면 된다

- 서비스는 이제 특정 트랜잭션 기술에 직접 의존하는 것이 아니라 TxManager라는 추상화된 인터페이스에 의존한다
- 실제 구현체는 DI를 통해 주입한다
- 클라언트인 서비스는 TxManager에 의존하고 DI를 사용함으로써 OCP 원칙을 지키게 되었다
스프링의 트랜잭션 추상화

- 스프링은 위의 TxManager와 같은 트랜잭션 추상화 기술을 제공한다
- 그것이 바로 PlatformTransactionManager 인터페이스이다
- 구현체도 이미 만들어져 있으므로 가져다가 사용하기만 하면 된다
- 어떤 트랜잭션 매니저을 선택할 지는 현재 등록된 라이브러리를 보고 판단한다
- JDBC 기술을 사용하면 DataSourceTransactionManger를 빈으로 등록하고, JPA를 사용하면 JpaTransactionManager를 사용한다
- 둘다 사용하는 경우엔 JpaTransactionManger를 등록한다
- JpaTransactionManger는 DataSourceTransactionManger가 제공하는 기능도 대부분 지원한다
package org.springframework.transaction;
public interface PlatformTransactionManager extends TransactionManager {
TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
- getTransaction(): 트랜잭션을 시작한다
- 이름이 getTransaction()인 이유는 기존에 이미 진행중인 트랜잭션이 있는 경우엔 해당 트랜잭션에 참여할 수 있기 때문이다
- commit(): 트랜잭션을 커밋한다
- rollback(): 트랜잭션을 롤백한다
참고
'Spring > Spring' 카테고리의 다른 글
[Spring] @Transactional과 메모리 DB를 활용한 데이터 접근 계층 테스트 (0) | 2022.08.13 |
---|---|
[Spring] 트랜잭션 동기화 정리 (0) | 2022.08.13 |
[Spring] 스프링 DataSource 간단하게 정리 (0) | 2022.08.08 |
[Spring] 테스트 대상(@InjectMocks) Mocking & Stubbing하기 (0) | 2022.07.24 |
[Spring] Mockito private method invocation 테스트하기 (0) | 2022.07.17 |
트랜잭션 관련 포스팅
- [Spring] 트랜잭션 추상화 정리
- [Spring] 트랜잭션 동기화 정리
- [Spring] 트랜잭션 AOP 동작 흐름
- [Spring] 트랜잭션 AOP 사용 시 주의점 (ft. Spring AOP self-invocation)
- [Spring] 스프링 트랜잭션 전파와 롤백
- [Spring] 트랜잭션 전파 옵션
트랜잭션 의존

- 트랜잭션을 사용하는 코드는 데이터 접근 기술마다 다르다
- 따라서 데이터 접근 기술이 바뀌면 서비스 계층의 코드도 바뀐다
- 이는 OCP 원칙을 위반한다
트랜잭션 추상화
public interface TxManager {
begin();
commit();
rollback();
}
- 트랜잭션은 단순하다. 트랜잭션을 시작하고 비즈니스 로직이 끝난 후 커밋이나 롤백을 수행하면 된다
- 따라서 이 인터페이스를 기반으로 각 데이터 접근 기술에 적합한 구현체를 만들면 된다

- 서비스는 이제 특정 트랜잭션 기술에 직접 의존하는 것이 아니라 TxManager라는 추상화된 인터페이스에 의존한다
- 실제 구현체는 DI를 통해 주입한다
- 클라언트인 서비스는 TxManager에 의존하고 DI를 사용함으로써 OCP 원칙을 지키게 되었다
스프링의 트랜잭션 추상화

- 스프링은 위의 TxManager와 같은 트랜잭션 추상화 기술을 제공한다
- 그것이 바로 PlatformTransactionManager 인터페이스이다
- 구현체도 이미 만들어져 있으므로 가져다가 사용하기만 하면 된다
- 어떤 트랜잭션 매니저을 선택할 지는 현재 등록된 라이브러리를 보고 판단한다
- JDBC 기술을 사용하면 DataSourceTransactionManger를 빈으로 등록하고, JPA를 사용하면 JpaTransactionManager를 사용한다
- 둘다 사용하는 경우엔 JpaTransactionManger를 등록한다
- JpaTransactionManger는 DataSourceTransactionManger가 제공하는 기능도 대부분 지원한다
package org.springframework.transaction;
public interface PlatformTransactionManager extends TransactionManager {
TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
- getTransaction(): 트랜잭션을 시작한다
- 이름이 getTransaction()인 이유는 기존에 이미 진행중인 트랜잭션이 있는 경우엔 해당 트랜잭션에 참여할 수 있기 때문이다
- commit(): 트랜잭션을 커밋한다
- rollback(): 트랜잭션을 롤백한다
참고
'Spring > Spring' 카테고리의 다른 글
[Spring] @Transactional과 메모리 DB를 활용한 데이터 접근 계층 테스트 (0) | 2022.08.13 |
---|---|
[Spring] 트랜잭션 동기화 정리 (0) | 2022.08.13 |
[Spring] 스프링 DataSource 간단하게 정리 (0) | 2022.08.08 |
[Spring] 테스트 대상(@InjectMocks) Mocking & Stubbing하기 (0) | 2022.07.24 |
[Spring] Mockito private method invocation 테스트하기 (0) | 2022.07.17 |