개념정리

트랜젝션

이건탁 2021. 4. 2. 01:41
728x90

하나의 단위로 수행되길 바라는 작업의 묶음(=업무 수행단위, 논리적인 수행단위)
데이터베이스에서는 상태를 변화시키기 위해 수행하는 작업의 단위
일반적인 컴퓨터 과학에서는 쪼개질 수 없는 업무처리의 단위를 의미

트랜잭션 처리는 ACID를 유지하는 것


트랜잭션의 성질

Autoimaticity : 원자성
- 트랜잭션의 원자성(atomicity)은 트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다는 all-or-nothing 방식을 의미한다.
 = 한 트랜잭션 내에서 실행한 작업은 하나로 간주한다. 즉 모두 성공 혹은 모두 실패
terms.naver.com/entry.naver?docId=3431260&cid=58430&categoryId=58430

Consistency : 일관성
- 트랜잭션의 일관성(consistency)은 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 함을 의미한다. 
 =  트랜잭션은 데이터 인터그리티 만족 등 일관성있는 데이터베이스 상태를 유지
terms.naver.com/entry.naver?docId=3431261&cid=58430&categoryId=58430

Isolation : 고립성
- 트랜잭션의 격리성(isolation)은 고립성이라고도 하는데, 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음을 의미한다. 
 = 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않게 격리
terms.naver.com/entry.naver?docId=3431262&cid=58430&categoryId=58430

Durability : 지속성
- 트랜잭션의 지속성(durability)은 영속성이라고도 하는데 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미한다. 
 = 트랜잭션이 성공적으로 실행되면 결과는 항상 저장된다.
terms.naver.com/entry.naver?docId=3431263&cid=58430&categoryId=58430


COMMIT
하나의 트랜잭션 작업이 성공적으로 끝났고, 로그가 정상적으로 남았다라는 것을 알려주는 것

ROLLBACK
트랜잭션 작업 중 비정상적으로 종료되거나, 원자성이 깨진 경우 그 전 상태로 돌아가는 작업


개발에서의 트랜잭션

DB접근이 발생하는 여러 단위 작업들을 의미있는 그룹으로 묶어서 일괄 커밋 또는 일괄 롤백하는 매커니즘을 뜻한다.

- 어노테이션 방식으로 @Transactional을 선언하여 사용한다. = 선언적 트랜잭션
- JDBC, MyBatis 등을 사용할 때는 DataSourceTransactionManager를 관리자로 등록한다.
  이 클래스는 dataSource 프로퍼티를 통해 전달받은 Connection으로 커밋, 롤백을 수행하면서 관리한다.


Spring에서 Transaction 설정하기

스프링에서는 트랜잭션 처리를 지원하는데, 그 중 annotation 방식으로 ( @Transactional ) 을 선언하여 사용하는 방법을 선언적 트랜잭션이라고 한다

클래스 전체나 메소드 단위로 @Transactional 을 적용하면 (AOP) , 트랜잭션 기능이 적용된 프록시 객체가 생성된다.

CheckedException 이나 예외가 없을 때는 Commit 하고,
UncheckedException 이 발생하면 Rollback 한다.

주의사항

@Transactional은 우선순위를 가지고 있다
클래스 method에 선언된 트랜잭션의 우선순위가 가장 높고, 인터페이스에 서언된 트랜잭션 우선순위가 가장 낮다.

클래스 메소드 > 클래스 > 인터페이스 메소드 > 인터페이스

  • 인터페이스 기반 프록시에서만 유효한 트랜잭션이 설정된다
  • 자바 어노테이션은 인터페이스로부터 상속되지 않기 때문에, 클래스 기반 프록시나 Aspect J기반에서 트랜잭션을 인식할 수 없다.
  • 스프링 트랜잭션의 기본모드인 proxy 모드에서는 오직 외부로부터 method 호출이 발생한 경우에만 method가 인터셉트 되어 트랜잭션 관리가 적용된다.
    (오브젝트 내의 한 method가 동일 오브젝트 내의 다른 method를 호출할 경우에는 호출 당한 method가 @Transctional이 붙어 있다고 해도, 적용되지 않는다. 위빙되어 있는 method를 부르는게 아니니깐.)

(위빙, Weaving : Advice를 핵심 로직 코드에 적용하는 것을 말한다. )


참조

sarc.io/index.php/java/1965-transaction

 

트랜잭션(Transaction)이란?

[{"id":"9","listid":"1","parentid":"0","videosource":"","videoid":"","imageurl":"","title":"","description":"","custom_imageurl":"","custom_title":"","custom_description":"","specialparams":"","lastupdate":"0000-00-00 00:00:00","allowupdates":"1","status":

sarc.io

velog.io/@ligok113/JAVA-Transactional-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98

 

[JAVA] @Transactional 트랜잭션

트랜잭션이란?데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위.Atomic ( 원자성 )하나의 트랜잭션에서 작업되는 일들은 모두 실행되던지 모두 실행되지 않도록 해야한다.Consistency (

velog.io

 

728x90