트랜잭션 관리 (Transaction Management)


<aside> 1️⃣ 트랜잭션 관리란?

</aside>

<aside> 2️⃣ 트랜잭션 관리의 중요성

</aside>

  1. 데이터 일관성 유지: 트랜잭션 관리를 통해 여러 개의 데이터베이스 작업이 하나의 논리적인 단위로 처리된다. 트랜잭션 내의 모든 작업이 성공하면 커밋되고, 하나의 작업이라도 실패하면 롤백되어 이전 상태로 되돌린다. 이렇게 함으로써 데이터 일관성을 유지할 수 있다.
  2. 데이터의 안정성 보장: 트랜잭션은 데이터의 안정성을 보장한다. 트랜잭션 내에서 작업이 수행되는 동안 다른 사용자 또는 프로세스에 의해 접근되지 않는다. 작업이 완료되고 커밋되면 다른 사용자가 해당 작업을 확인할 수 있다. 트랜잭션의 롤백 기능은 작업이 실패할 경우 이전 상태로 되돌리므로 데이터 손실을 방지한다.
  3. 동시성 제어: 트랜잭션 관리를 통해 여러 개의 동시 작업이 동시에 수행되는 경우 데이터 충돌이 발생하는 것을 방지할 수 있다. 트랜잭션은 데이터베이스에서 동시에 수행되는 작업들 간에 일관성과 독립성을 유지하도록 보장한다.
  4. 오류 처리와 롤백: 트랜잭션 관리는 오류 처리와 롤백을 통해 안정성을 제공한다. 예외가 발생하면 트랜잭션은 롤백되어 이전 상태로 되돌아간다. 이를 통해 데이터베이스에서 발생한 오류를 처리하고 예외 상황을 복구할 수 있다.
  5. 비즈니스 로직 분리: 트랜잭션 관리를 사용하면 비즈니스 로직과 데이터베이스 작업을 분리할 수 있다. 이렇게 함으로써 비즈니스 로직은 트랜잭션을 고려하지 않고 개발될 수 있다. 데이터베이스 작업과 트랜잭션 처리는 트랜잭션 관리자에 의해 처리되므로 개발자는 비즈니스 로직에만 집중할 수 있다.

트랜잭션 관리는 데이터베이스 작업의 안전성, 일관성, 동시성, 오류 처리 등을 보장하여 신뢰성 있는 애플리케이션을 구축하는 데 중요한 역할을 한다. 데이터의 정확성과 안전성을 유지하기 위해 트랜잭션 관리는 필수적인 요소이다.

<aside> 3️⃣ 예시

</aside>

  1. 선언적 트랜잭션 관리(Declarative Transaction Management)

    @Transactional
    public void performTransaction() {
        // 트랜잭션 내에서 수행될 작업들
    }
    
    
  2. 프로그래밍적 트랜잭션 관리(Programmatic Transaction Management)

    @Autowired
    private PlatformTransactionManager transactionManager;
    
    public void performTransaction() {
        TransactionDefinition txDefinition = new DefaultTransactionDefinition();
        TransactionStatus txStatus = transactionManager.getTransaction(txDefinition);
    
        try {
            // 트랜잭션 내에서 수행될 작업들
    
            transactionManager.commit(txStatus);
        } catch (Exception e) {
            transactionManager.rollback(txStatus);
            throw e;
        }
    }
    
  3. 분산 트랜잭션 관리(Distributed Transaction Management)