-
트랜잭션(Transaction)이란?데이터베이스 2023. 2. 3. 15:57
트랜잭션이란?
데이터베이스 작업의 단위를 의미한다.
트랜잭션의 특징 (ACID)
- 원자성(Atomicity)
- 트랜잭션이 데이터베이스에 모두 반영되거나, 모두 반영되지 않아야 한다. (all or nothing)
- 예) A계좌에서 B계좌로 돈을 송금하는 작업이 있을 때, A계좌에서 돈이 빠지는 것과 B계좌에 돈이 들어오는 것은 함께 성공하거나 함께 실패해야 함.
- 일관성(Consistence)
- 모든 트랜잭션이 종료된 후에는 DB의 제약조건을 모두 지키고 있는 상태가 되어야 한다.
- 예) 잔액은 음수가 될 수 없다. 라는 조건이 있다면 이를 위반하는 트랜잭션은 모두 중단됨.
- 독립성(Isolation)
- 하나의 트랜잭션은 다른 트랜잭션과 독립적으로 작동해야 한다.
- 성능을 생각해 isolation 정도를 조절해 사용한다.
- 참고로 MYSQL InnoDB의 기본 값인 REAPEATABLE_READ를 많이 활용한다
- Isolation 단계
- SERIALIZABLE
- 데이터베이스가 한 번에 하나의 트랜잭션만 처리 가능하다.
- REAPEATABLE_READ
- 트랜잭션 시작 순간 특정 데이터를 읽는 순간 스냅샷 떠서 트랜잭션 처리 중에는 계속 값을 유지한다. 실제로는 변경되었더라도 이전에 스냅샷을 뜬 데이터를 기준으로 한다.
- 발생 가능한 문제 : Phantom Read
- READ_COMMITTED
- 트랜잭션 수행 중에 다른 트랜잭션이 종료되면 읽을 수 있다.
- 발생 가능한 문제 : Phantom Read, Non-Repeatable Read
- READ_UNCOMMITTED
- 트랜잭션이 종료되지 않았는데 다른 트랜잭션의 변경사항을 읽을 수 있다.
- 발생 가능한 문제 : Phantom Read, Non-Repeatable Read, Dirty Read
- SERIALIZABLE
- isoltaoin 단계에 따라 발생할 수 있는 문제
- Non-Repeatable Read : 한 트랜잭션에서 같은 데이터를 여러 번 조회했는데 이전에 조회한 데이터와 다르다.
- Phantom Read : Non-Reapetable Read의 한 종류로, 한 트랜잭션에서 조회해 온 결과의 행이 새로 생기거나 없어짐.
- Dirty Read : 특정 트랜잭션에 의해 데이터가 변경되었지만, 아직 커밋되지 않은 상황에서 다른 트랜잭션이 해당 변경 사항을 조회할 수 있다. (A트랜잭션 수행 중에 B트랜잭션이 시작되어 A트랜잭션이 변경한 데이터를 읽어 처리했지만, A트랜 잭션이 롤백되면 유효하지 않은 데이터를 B트랜잭션이 사용하게 됨.)
- 지속성(Durability)
- 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다.
'데이터베이스' 카테고리의 다른 글
RDB(관계형 데이터베이스) NoSQL(비관계형 데이터베이스) 비교 (0) 2023.02.03 [MySQL] 인덱스(index) 에 대해서 (0) 2019.12.04 [mybatis] @Alias 어노테이션에 대해 (1) 2019.10.31 - 원자성(Atomicity)