transaction
-
트랜잭션은 ACID를 보장해야 한다.Atomicity, Consistency, Isolation, Durability 이들 중에 이번에는 격리성에 대해서 알아보자 격리성동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다.격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준을 선택할 수 있다. 격리 수준Read uncommitted : 커밋되지 않은 읽기Read Commited : 커밋된 읽기Repeatable Read : 반복 가능한 읽기Serializable : 직렬화 가능 Read Uncommited의 격리 수준이 가장 낮고 Serializable의 격리 수준이 가장 높다. 격리 수준에 따른 문제점Dirty ReadNon-..
[Transaction] 격리 수준(Isolation)트랜잭션은 ACID를 보장해야 한다.Atomicity, Consistency, Isolation, Durability 이들 중에 이번에는 격리성에 대해서 알아보자 격리성동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다.격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준을 선택할 수 있다. 격리 수준Read uncommitted : 커밋되지 않은 읽기Read Commited : 커밋된 읽기Repeatable Read : 반복 가능한 읽기Serializable : 직렬화 가능 Read Uncommited의 격리 수준이 가장 낮고 Serializable의 격리 수준이 가장 높다. 격리 수준에 따른 문제점Dirty ReadNon-..
2024.12.03 -
spring-retry의 2.0.1 버전부터는 @EnableRetry 어노테이션에 order 설정이 추가되었다. @Retryable의 order 기본값은 Ordered.LOWEST_PRECEDENCE - 1 @Transational의 order 기본값은 Ordered.LOWEST_PRECEDENCE 그렇기 때문에 @Transational 보다 먼저 @Retryable이 적용될 수 있다. @Retryable { @Transactional { Your method body } End of @Transactional } End of @Retryable 위와 같은 순서로 적용되어서 만약 내부 로직에 DB Operation이 있다면 retry시에 기존 Transaction과는 다른 Transaction으로 적용이..
[Spring] @Retryable @Transational 적용 순서spring-retry의 2.0.1 버전부터는 @EnableRetry 어노테이션에 order 설정이 추가되었다. @Retryable의 order 기본값은 Ordered.LOWEST_PRECEDENCE - 1 @Transational의 order 기본값은 Ordered.LOWEST_PRECEDENCE 그렇기 때문에 @Transational 보다 먼저 @Retryable이 적용될 수 있다. @Retryable { @Transactional { Your method body } End of @Transactional } End of @Retryable 위와 같은 순서로 적용되어서 만약 내부 로직에 DB Operation이 있다면 retry시에 기존 Transaction과는 다른 Transaction으로 적용이..
2024.03.27 -
@Transactional은 Proxy 방식으로 동작한다 간략하게 어떻게 proxy가 생성되는지 알아보자 @Service @RequiredArgsConstructor public class TestService { public void insertTest(){ // do something } } public class TestServiceProxy{ private final TransactonManager tm = TransactionManager.getInstance(); public void insertTest() { try { tm.begin(); // 트랜잭션 전처리(트랜잭션 시작, autoCommit(false) 등) insertTest(); // 기존 로직 tm.commit(); // 트랜잭션..
[Spring] @Transactional 동작방식 및 주의사항@Transactional은 Proxy 방식으로 동작한다 간략하게 어떻게 proxy가 생성되는지 알아보자 @Service @RequiredArgsConstructor public class TestService { public void insertTest(){ // do something } } public class TestServiceProxy{ private final TransactonManager tm = TransactionManager.getInstance(); public void insertTest() { try { tm.begin(); // 트랜잭션 전처리(트랜잭션 시작, autoCommit(false) 등) insertTest(); // 기존 로직 tm.commit(); // 트랜잭션..
2023.11.21