트랜잭션의 시작과 전파 속성

함승완·2024년 8월 11일

트랜잭션의 시작과 종료

  • 트랜잭션은 시작 지점과 끝나는 지점이 존재한다 시작하는 방법은 1가지이지만 끝나는 방법은 2가지이다.
  • 트랜잭션이 끝나는 방법은 모든 작업을 확정짓는 커밋과 모든 작업을 무효화 하는 롤백이 있다.

트랜잭션의 시작

  • 트랜잭션은 하나의 Connection을 가져와 사용하다 닫는사이에 일어난다.
  • 트랜잭션의 시작과 종료는 Copnnection 객체를 통해 이루어지기 때문.

트랜잭션의 종료

  • 하나의 트랜잭션이 시작되면 commit()또는 rollback()이 호출될 때 까지가 하나의 트랜잭션으로 묶인다. 이렇게 커밋과 롤백으로 트랜잭션을 종료하는 작업을 트랜잭션 경계설정이라고 한다.

트랜잭션의 전파 속성이란?

  • 스프링이 제공하는선언적 트랜잭션의 장점 중 하나는 여러 트랜잭션을 묶어서 커다란 하나의 트랜잭션 경계를 만들 수 있다는 점이다.
  • 작업을 하다보면 기존 트랜잭션이 진행중일때 추가적으로 트랜잭션을 진행해야 하는 경우가 있다. 이미 트랜잭션이 진행중일 때 추가 트랜잭션 진행을 어떻게 할지 결정하는것이 전파속성이다.

물리 트랜잭션과 논리 트랜잭션

  • 트랜잭션은 데이터베이스에서 제공하는 기술이므로 커넥션 객체를 통해 처리한다. 그래서 1개의 트랜잭션을 사용한다는것은 하나의 커넥션 객체를 사용한다는 것이고 실제 데이터베이스의 트랜잭션을 사용한다는 점에서 물리 트랜잭션이라고 한다.

  • 물리 트랜잭션은 실제 데이터베이스에 적용되는 트랜잭션으로 커넥션을 통해 커밋 롤백하는 단위이다.

  • 논리 트랜잭션은 스프링이 트랜잭션 매니저를 통해 트랜잭션을 처리하는 단위 이다.


다양한 스프링의 트랜잭션 전파 속성

Required 속성과 Requires_new 속성

  • 스프링에는 7가지 전파 속성이 존재하는데, Required와 Requires_new를 이해하면 나머지는 응용 가능

Required

  • Required는 스프링이 제공하는 기본적인 전파 속성으로 기본적으로 2개의 논리 트랜잭션을 묶어 1개의 물리 트랜잭션을 사용하는것

  • 의미 : 트랜잭션이 필요함 (없으면 새로 만듦)

  • 기존 트랜잭션 없을때 새로운 트랜잭션을 생성함

  • 기존 트랜잭션이 있으면 기존 트랜잭션에 참여한다.
    required는 디폴트 속성이여서 별도의 설정이 없으면 required속성으로 트랜잭션이 진행됨


Requires_new

  • Requires_new는 외부 트랜잭션과 내부트랜잭션을 완전히 분리하는 전파 속성이다. 그래서 2개의 물리트랜잭션이 사용되며 각각 트랜잭션 별로 커밋과 롤백이 수행된다.

  • 의미 : 항상 새로운 트랜잭션이 필요함

  • 기존 트랜잭션이 없을때 새로운 트랜잭션을 생성한다.

  • 기존 트랜잭션이 있을때 기존 트랜잭션을 보류시키고 새로운 트랜잭션을 생성한다.


profile
좋은 개발자 좋은 코딩 좋은 컴퓨터

0개의 댓글