[10분 테코톡] 키아라의 스프링 트랜잭션 전파

youngkyu MIn·2023년 10월 17일

movie

물리 트랜잭션 (Physical Transaction)

  • 특정 데이터베이스 연결에 대한 실제 트랜잭션 경계를 의미한다.
  • 데이터베이스 시스템에서 실제로 커밋 또는 롤백이 발생하는 단위다.

논리 트랜잭션 (Logical Transaction)

  • 애플리케이션의 관점에서 보는 트랜잭션의 경계를 의미다.
  • 하나의 물리 트랜잭션 내에서 여러 개의 논리 트랜잭션을 포함할 수 있다.
  • 논리 트랜잭션은 개발자가 애플리케이션 로직 내에서 정의한 트랜잭션 경계로, 예를 들면, 여러 서비스 메서드 호출 등이 될 수 있다.

트랜잭션 핵심 원리

  • 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다.
    -> 하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다.
  • 신규 트랜잭션만이 물리 트랜잭션을 종료(커밋,롤백)할 수 있다.

@Transactional(propagation = Propagation.REQUIRED)

  • 이미 진행 중인 트랜잭션이 있을 경우, 그 트랜잭션에 참여한다 (즉, 현재의 물리 트랜잭션에 논리 트랜잭션이 묶인다).
  • 진행 중인 트랜잭션이 없을 경우, 새로운 트랜잭션을 시작한다.
  • @Transactional 어노테이션을 사용할 때 기본값으로 설정된다. (즉, 그냥 @Transactional 만 써도 됨)

@Transactional(propagation = Propagation.REQUIRES_NEW)

  • 현재 진행 중인 트랜잭션이 있을 경우: 현재 진행 중인 트랜잭션을 일시 중단하고, 새로운 트랜잭션을 시작한다. 이렇게 해서 두 트랜잭션은 독립적으로 작동하게 된다. 일시 중단된 트랜잭션은 새로 시작된 트랜잭션이 종료된 후에 다시 재개된다.
  • 현재 진행 중인 트랜잭션이 없을 경우: 새로운 트랜잭션을 시작한다.
  • 특정 부분의 작업이 실패하더라도 전체 트랜잭션을 롤백하지 않고, 그 부분만 롤백할 수 있다.
  • 별도의 트랜잭션으로 로깅 또는 오디팅을 수행할 수 있다.

정리

  • 논리 트랜잭션이 하나라도 롤백되면 관련된 물리 트랜잭션은 롤백된다.
  • REQUIRES_NEW 전파 타입을 사용해서 트랜잭션을 분리할 수 있다.
  • 트랜잭션의 수만큼 DB 커넥션이 발생한다.
profile
한 줄 소개

0개의 댓글