NoTimeForDawdling

트랜잭션(Transaction) 본문

DB

트랜잭션(Transaction)

Room_Energy 2021. 2. 16. 15:11

데이터베이스를 공부하다 보면 트랜잭션이라는 말을 많이 들어보셨을 겁니다. 지금부터 이 트랜잭션이란 무엇인지 알아보겠습니다.

트랜잭션이란?

  • 트랜잭션이란 데이터베이스의 상태를 변환시키는 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산을 의미합니다.
  • 하나의 연산이라도 잘못되면 지금까지 했던 연산들을 모두 취소해야 합니다.

트랜잭션 필요성

예를 들어, 친구에게 돈을 송금하는 상황을 가정해 보겠습니다.

제 통장에서 10,000원을 차감하고, 친구 통장에 10,000원을 입금하고 있는 사이에 전산 오류가 발생했습니다.

이 오류로 인해 제 통장에서 10,000원이 줄었지만 친구 통장에는 10,000이 들어오지 않는 상황이 발생했습니다.

이러한 경우가 생기지 않도록 중간에 오류가 발생한다면 다시 처음부터 송금을 하도록 하는 연산을 수행하고

정상적으로 송금이 완료 됐다면 실행을 끝마치는 연산을 수행합니다.

이러한 송금 과정을 트랜잭션이라 볼 수 있습니다.

 

이렇게 트랜잭션을 사용하면 데이터(금액)의 부정합을 방지할 수 있습니다. 즉, 데이터의 안전성을 확보할 수 있습니다.

DB를 예로 들면 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제는 도중에 오류가 발생하면 모든 작업을 원래 상태로 되돌립니다.

DB에서 모든 과정이 성공했을 때만 결과를 반영합니다.

트랜잭션 성질(ACID)

원자성(Atomicity)

  • 원자성이란 트랜잭션의 연산은 DB에 모두 반영되거나 모두 반영되지 않아야 함을 의미합니다.
  • 즉, 트랜잭션 작업중 어느 하나라도 오류가 발생하면 전부 취소되어야 합니다.

일관성(Consistency)

  • 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 DB상태를 유지하는 것을 의미합니다.
  • 시스템이 가지고 있는 고정 요소(공유자원)는 트랜잭션 수행 전과 후의 상태가 같아야 합니다.

고립성(Isolation)

  • 둘 이상의 트랜잭션이 동시에 병행되어 실행될 때 어느 한 트랜잭션이 다른 트랜잭션 연산에 끼어들 수 없는 것을 의미합니다.
  • 즉, 수행중인 트랜잭션은 완료될 때까지 다른 트랜잭션의 수행 결과를 참조할 수 없습니다.

영속성(Duration)

  • 성공한 트랜잭션의 결과는 시스템이 고장 나더라도 영구적으로 반영되어야 함을 의미합니다.

트랜잭션 연산(commit & rollback)

commit

  • commit이란 성공한 트랜잭션의 결과를 DB에 저장하는 연산입니다.
  • commit을 수행하면 이전 데이터가 전부 update 됩니다.

rollback

  • rollback은 트랜잭션을 처음부터 다시 시작하거나, 폐기하는 연산입니다.
  • 트랜잭션 처리가 비정상적으로 종료되어 DB의 일관성이 깨진 경우, 이 트랜잭션이 행한 모든 연산을 취소하는 연산입니다.(원자성)
  • 트랜잭션이 시작되기 전의 상태(마지막 commit 완료 시점)로 되돌립니다.

 

 

'DB' 카테고리의 다른 글

DB 데이터 캐싱(Caching)  (0) 2021.03.11
ORM(Object Relation Mapping)이란?  (0) 2021.03.10
DB 인덱스(Index)  (0) 2021.03.04
Primary Key vs Unique Key  (0) 2021.02.26
트랜잭션 격리 수준(Isolation Level)  (0) 2021.02.18