[DB] Transaction

gnoesnooj·2022년 1월 7일
0

Transaction 발표준비

1. 트랜잭션 이란 ?

트랜잭션에 대해 먼저 사전 그대로의 정의를 먼저 찾아 보면
DB상태를 변화시키기 위해 수행하는 작업의 단위.
좀 더 뜯어보면 두 부분에서 의문이 생긴다. DB 상태를 변화시킨다와, 작업의 단위. 이 두 부분에서 의문이 생길 수 있다.
db 상태를 변경시킨다는 것은, DB안에 있는 data 들의 상태를 바꾸는 것과 연관지어 생각할 수 있다. update, insert, delete 등 쿼리들이 db 상태의 변경시킨다고 할 수 있다,
이러한 쿼리들이 반드시 하나만이 아니라, 하나 또는 그 이상이 모여서 하나의 논리적인 작업의 단위를 이룬다.




## 2. 트랜 잭션 특징

  • A, 원자성은 All or nothing, 즉 트랜잭션의 내용이 DB에 반영이 된다면 모두 되어야 하고, 아니면 전혀 반영되어선 안된다는 것이다.
  • C, 일관성은 모든 트랜젝션의 처리 결과가 일관성이 있어야 한다는 것이다. 어떤 제약조건이 있거나 데이터 자료형이 있다면 그 조건에 계속 만족해나가한다.
  • I, 독립성은 서로 다른 트랜잭션은 서로 간의 처리 결과나 연산에 영향을 끼쳐서는 안된다는 것이다.
  • D, 지속성은 한번 트랜잭션이 완료된다면 그 결과는 영구히 반영되어야 한다는 것이다.


하지만..



3. 트랜잭션의 문제점

트랜잭션이 둘 이상 동시에 접근 할 때, 문제가 발생하게 된다.

1. Dirty Read



2. Non-Repeatable Read



3. Phantom



4. Spring이 해결하는 방법?

1. Transaction Isolation Level

2. Transaction Propagation



+ 5. 스프링이 @Transactional 을 사용하는 방법 ?

  • spring aop를 사용해서 실행이 된다.
  • 어노테이션이 붙으면 해당 타깃을 포인트컷의 대상으로 등록해서 트랜잭션 관리 대상이 된다.
  • transational 의 타깃이 되는 메소드나 클래스를 직접 실행하는 것이 아닌 cglib에 의해 바이트코드가 조작된 proxy target 이 실행되는 것으로 transactional 이 실행된다.

+ 6. 스프링 readOnly

읽기 전용 모드, 예상치 못한 entity의 변경을 막아주고 성능을 최적화 한다.


참조

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글