개발소설

[DataBase] 트랜잭션 (transaction), ACID 본문

CS/DataBase

[DataBase] 트랜잭션 (transaction), ACID

ChaeHing 2023. 3. 28. 23:46

트랜잭션 (transaction)

  • 여러 개의 작업을 하나로 묶은 실행 유닛
  • 묶여있는 모든 작업들을 다 완료해야 정상적으로 종료
  • 단 하나의 작업이라도 실패하면 트랙잭션에 속한 모든 작업을 실패한것으로 판단
  • 모든 작업이 성공해야 트랙잭션이 성공
  • 성공, 실패 두가지의 결과만 존재한다.

ACID

  • 테이터베이스 트랜잭션의 성질
  • 하나의 트랜잭션의 안정성을 보장하기 위해 필요
  • Atomicity(원자성)
  • Consitency(일관성)
  • Isolation(격리성)
  • Durability(지속성)
  • 4가지로 구성 되어 있다.

Atomicity(원자성)

  • 하나의 트랜잭션의 모든 작업들이 전부 성공하거나 전부 실패해야 한다.
  • 부분적인 작업만 성공된다면 어떤 데이터는 입력되고 어떤 데이터는 입력되지 않는등 데이터가 오염 될 수 있다.
  • 예를들면 회원정보에 전화번호는 입력되었는데 이름은 모른다던가,  돈을 송금했는데 송금자를 모른다던가 하는 일이 발생 할 수 있다.
  • SQL에서 쿼리를 실행 했을때 한가지라도 실패하는 부분이 있다면 전부 실패하도록 되어있다.

Consitency(일관성)

  • 데이터 베이스의 상태가 일관적이야 한다.
  • 트랙잭션 실행후 데이터베이스의 상태는 이전과 같이 유효해야 한다.
  • 데이터 베이스의 규칙이나 제약사항을 만족해야 한다.
  • 예를들면 한 필드의 속성이 not null 이면, 해당 필드의 레코드를 삭제하거나, 해당 필드만 제외한 레코드를 입력하는 쿼리는 일관성을 위반한다. 

Isolation(격리성)

  • 모든 트랙잭션은 다른 트랙잭션으로부터 독립적이어야 한다.
  • 동시에 여러개의 트랙잭션이 실행되면, 연속으로 실행된 것과 같은 결과를 가진다. 
  • 예를들면 계좌에 100만원이 있을때 하나의 트랙잭션은 60만원을 출금, 또 다른 트랙잭션은 50만원을 출금한다고 했을때 동시에 트랙잭션이 실행되더라도 결과는 -10만원이 아니라 60만원을 출금한뒤 50만원은 출금이 실패하는 상황이 되어야 한다. (연속적으로 실행된 결과가 발생해야 한다.)
  • 두개의 트랙잭션은 같은 작업이 아닌 다른 작업(독립적) 이기 때문이다. - 작업간 격리되어 있다.

Durability(지속성)

  • 트랙잭션이 성공하였다면, 해당 트랙잭션에 대한 로그가 남아야 한다.
  • 시스템에러등이 발생하더라도, 해당 기록은 영구적이어야 한다.
  • 예를 들면 돈을 송금했을때 송금에 성공했다면 그 이후에 은행에 어떠한 오류가 발생하더라도 송금한 내역은 남아있어야한다.

 

'CS > DataBase' 카테고리의 다른 글

[DataBase] 스키마(Schema) 설계  (0) 2023.03.29
[DataBase] NoSQL 그리고 SQL과 비교  (0) 2023.03.29
[DataBase] SQL(Structured Query Language)  (0) 2023.03.28
Comments