Skip to content

Latest commit

 

History

History
36 lines (26 loc) · 2.74 KB

transaction_acid.md

File metadata and controls

36 lines (26 loc) · 2.74 KB

트랜잭션과 ACID

트랜잭션이란

하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합을 트랜잭션이라고 한다. 트랜잭션의 예로 계좌 간의 자금 이체가 많이 언급된다. 한 계좌에서 10만 원을 인출하여 다른 계좌로 10만 원 입금하는 이체 작업은 전체 작업이 정상적으로 완료되거나, 만약 정상적으로 처리될 수 없는 경우에는 아무 것도 실행되지 않은 처음 상태로 되돌려져야 한다. 이러한 트랜잭션은 다양한 데이터 항목들을 액세스하고 갱신하는 프로그램 수행의 단위가 된다.

트랜잭션 Lock

Lock은 트랜잭션의 동시성을 제어하기 위한 기능이다. 여러 트랜잭션이 동시에 같은 자원을 사용할 경우, 순서대로 하나의 트랜잭션만이 자원(테이블, 데이터)을 변경할 수 있게 해준다.

ACID

트랜잭션은 ACID 성질이라고 하는 다음의 네 가지 성질로 설명된다.

  • Atomicity(원자성) : 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 아니면 전혀 어떠한 연산도 수행되지 않은 상태를 보장해야 한다. (all or nothing)
  • Consistency(일관성) : 트랜잭션이 완료되면 데이터는 일관성있게 유지되어야 한다. 문자열(string) 칼럼이 정수형(integer) 타입 등으로 바뀌어선 안된다.
  • Isolation(독립성) : 여러 트랜잭션이 동시에 수행되더라도 각 트랜잭션은 서로 영향을 받지 않고 독립적으로 수행되어야 한다. (트랜잭션 이전 상태로 되돌아갈 수 있어야 한다)
  • Durability(지속성) : 트랜잭션이 성공적으로 완료/커밋되면, 해당 트랜잭션에 의한 변경은 S/W, H/W 장애가 발생되더라도 보존되어야 한다.

트랜잭션 격리수준

트랜잭션 격리수준에서 고립도와 성능은 트레이드 오프 관계다.

  • READ UNCOMMITTED: 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있다. (각 트랜잭션의 변경내용이 COMMIT/ROLLBACK 여부 상관 없이 다른 트랜잭션에서 값을 읽을 수 있다.
  • READ COMMITTED: 다른 트랜잭션에서 커밋된 내용만 참조할 수 있다. (기본적인 격리수준)
  • REPEATABLE READ: 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있다.
  • SERIALIZABLE: 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다.(성능 매우 떨어짐)

Reference