Spring 트랜잭션 관리의 아름다운 구현 방식

트랜잭션 개념 정리

트랜잭션은 논리적으로 연결된 작업 단위로, 모든 처리가 성공적으로 완료되거나 전혀 수행되지 않도록 보장합니다.

트랜잭션 특성 (ACID)

  1. 원자성: 트랜잭션은 분할될 수 없는 최소 실행 단위로, 전체 처리가 완료되거나 무효화됩니다.
  2. 일관성: 트랜잭션 수행 전후 데이터 상태가 일치해야 합니다.
  3. 격리성: 병행 처리 시 다른 트랜잭션의 영향을 받지 않도록 독립적인 데이터 공간을 유지합니다.
  4. 지속성: 커밋된 트랜잭션의 변경사항은 시스템 장애에도 불구하고 지속됩니다.

Spring 트랜잭션 관리 인터페이스

PlatformTransactionManager

Spring은 직접 트랜잭션을 관리하지 않고, JDBC, Hibernate 등 다양한 플랫폼에 맞는 트랜잭션 매니저를 제공합니다.


public interface PlatformTransactionManager {
    TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
    void commit(TransactionStatus status) throws TransactionException;
    void rollback(TransactionStatus status) throws TransactionException;
}

TransactionDefinition

트랜잭션 속성을 정의하는 인터페이스로, 격리수준, 전파행동, 타임아웃, 읽기전용 여부 등을 포함합니다.


public interface TransactionDefinition {
    int getPropagationBehavior();
    int getIsolationLevel();
    int getTimeout();
    boolean isReadOnly();
}

TransactionStatus

트랜잭션 상태를 기록하는 인터페이스로, 신규 트랜잭션 여부, 복구점 존재 여부 등을 확인할 수 있습니다.


public interface TransactionStatus {
    boolean isNewTransaction();
    boolean hasSavepoint();
    void setRollbackOnly();
    boolean isRollbackOnly();
    boolean isCompleted();
}

핵심 개념 심화

격리수준

  • ISOLATION_DEFAULT: DB 엔진의 기본 격리수준을 사용
  • ISOLATION_READ_UNCOMMITTED: 가장 낮은 수준, 더티 리드 발생 가능성 있음
  • ISOLATION_REPEATABLE_READ: 읽기 일관성 보장, 페인트 리드 가능
  • ISOLATION_SERIALIZABLE: 가장 높은 격리수준, 성능 저하 유발

전파행동

전파행동설명
PROPAGATION_REQUIRED현재 트랜잭션 존재 시 참여, 없으면 새로 생성
PROPAGATION_REQUIRES_NEW새로운 트랜잭션 시작, 기존 트랜잭션은 일시 중단
PROPAGATION_NESTED중첩 트랜잭션 생성 (외부 트랜잭션 종료 시 자동 회복)

타임아웃 및 읽기전용

트랜잭션 최대 실행 시간(초)과 읽기 전용 여부 설정이 가능합니다.

실제 적용 예시

데이터베이스 연결 정보를 설정하는 예시 구성:


<bean id="txManager" 
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dbSource" />
</bean>

태그: Spring 트랜잭션관리 AOP JDBC ORM

7월 9일 02:11에 게시됨