본문 바로가기
데이터베이스

[데이터베이스] 트랜잭션 이란?

by 코딩하는경준 2022. 4. 2.

트랜잭션 이란?

트랜잭션 ( Transaction ) 이란, 데이터베이스의 상태를 변화시킬때 수행하는 작업의 단위를 뜻합니다.

데이터베이스의 상태를 변화시킨다는 것은

SQL 쿼리를 이용하여 데이터베이스에 접근을 하는 것을 의미합니다.

  • SELECT
  • INSERT
  • DELETE
  • UPDATE

등 이 있습니다.

 

트랜잭션 설명 예시

당근마켓에서 요즘 사고싶었던 옷을 판매합니다.

그 옷의 가격은 10000원 이고, 거래를 하기로 마음을 먹고 판매자를 만났습니다.

물건을 건네받고 실시간으로 돈을 입금을하는데 서버에서 오류로 인하여

구매자의 계좌는 10000원이 빠져나갔지만,

판매자의 계좌에는 돈이 들어오지 않았습니다.

이때 서버에서 오류가 발생하지 않고 작업이 잘 성공되어 데이터베이스에 잘 적용되면 커밋(commit) 됐다고 표현을하고

오류가 발생하여 그 작업이 없던일로 하는것을 롤백(rollback) 됐다고 표현을 합니다.

 

트랜잭션의 성질(특징)

트랜잭션의 성질을 ACID 로 표현할 수 있습니다.

  • 원자성 (Atomicity) : 트랜잭션은 DB에 모두 반영되거나, 전혀 반영되지 않아야 합니다.
    ( 완료되지 않은 트랜잭션의 중간 상태를 DB에 반영해서는 안됩니다. )
  • 일관성 (Consistency) : 트랜잭션 작업처리결과는 항상 일관성이 있어야 합니다.
    ( 예를들어, 멤버는 나이의 값이 비어있으면 안된다는 조건을 가지고 있을때 이를 만족하지 못하면 트랜잭션은 롤백되어야 합니다. )
  • 독립성 (Isolation) : 둘 이상의 트랜잭션이 동시 실행되고 있을때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없습니다.
    ( 각각의 트랜잭션은 서로 간섭하지 않고 독립적으로 이루어져야합니다. )
  • 지속성 (Durability) : 트랜잭션이 성공적으로 완료되었으면 결과는 영구히 반영되어야 합니다.

하지만 이를 지킬때에는 성능 문제가 발생할 수 있습니다.

예를들어, 독립성을 완전히 지킨다고 생각했을때 100개의 트랜잭션을 처리하더라도 100개의 트랜잭션이
서로의 트랜잭션을 방해하지 않고, 온전히 순차적으로 마무리 되어야 합니다. ( 이는 동시성이 매우 떨어집니다. )

하지만, 이를 해결하기위해( 성능을 생각하여 동시성을 챙길때 ) 트랜잭션 격리 수준(레벨) 이라는 개념이 있습니다.

 

트랜잭션 격리 수준

동시에 DB에 접근할때 그 접근을 어떻게 제어할지 설정하는것입니다.

트랜잭션 격리 수준

위 그림과 같이 트랜잭션 격리수준에는

READ UNCOMMITED, READ COMMITED, REPEATABLE READ, SERIALIZABLE 

이 있는데요.

아래로 내려갈수록 고립정도는 높아지지만 성능은 낮아진다는 특징이 있습니다.

 

각각의 특징

  • READ UNCOMMITED : 커밋 전의 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 읽는 것을 허용 합니다.

Transaction A 가 UPDATE 쿼리를 사용하고 커밋되기 전에 Transaction B 에서 조회를 하면 DB에 반영되진 않았지만 값을 바로 가져오는 모습을 볼 수 있습니다.

Dirty Read : Transaction A 에서 트랜잭션이 롤백이 된다면 Transaction B 에서는 롤백된 데이터를 읽어오게 됩니다.

  • READ COMMITTED : 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능합니다.

Transaction A 에서 Update 쿼리가 정상적으로 commit 되어야만 Transcation B 에서 조회를 했을때 변경된 값을 불러올 수 있습니다.

Non-Repetable Read : Transaction B 에서 조회를 두번 했는데 두개의 값이 다르게 나오는 현상 입니다. ( 데이터 불일치 문제 )

  • REPEATABLE READ : 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장합니다.

Transaction A 에서 Update 쿼리가 적용이 되어도 Transcation B 에서는 항상 같은 값을 유지 하는것을 볼 수 있습니다.

Pantom Read : 새로운 데이터가 들어오거나 없어졌을때 반영된상태로 값을 불러와 지는 현상 입니다.

  •  SERIALIZABLE : 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가합니다.
    ( 트랜잭션의 성질이 엄격히 지켜지나 성능이 가장 떨어집니다. )

트랜잭션 격리 수준에 따라 발생되는 문제 정리

트랜잭션 격리 수준에 따라 발생되는 문제

 

참고한 자료 

- [10분 테코톡] 🌼 예지니어스의 트랜잭션

- 트랜잭션, 트랜잭션 격리수준(Isolation Level)

- 트랜잭션(Transaction) 이란?

- [DB] 트랜잭션 특징, 격리 수준, 관련 문제점

'데이터베이스' 카테고리의 다른 글

[데이터베이스] Flyway란 무엇일까?  (0) 2022.08.06

댓글