데이터베이스

[데이터베이스] 트랜잭션 (Transaction)

4Legs 2021. 3. 19. 20:57

트랜잭션 (Transaction)

트랜잭션은 데이터베이스의 상태를 변화시키는 작업의 단위를 의미한다.

데이터베이스의 상태를 변화시킨다는 것은 곧 테이블에 행을 추가하거나, 갱신하는 것을 의미한다. (즉, SQL문의 실행을 의미한다.)

트랜잭션은 SQL을 통한 작업의 한 묶음(단위)이라 할 수 있다.

하지만 하나의 SQL문이 반드시 하나의 트랜잭션이 되는 것은 아니다. 여러 질의어들의 묶음 또한 트랜잭션이 될 수 있다

따라서, 트랜잭션이라는 하나의 큰 상자에 여러 SQL문을 넣는다는 형태로 이해하면 된다.

 

트랜잭션의 성질 : ACID

Atomicity (원자성)

트랜잭션은 반드시 완전히 수행되거나, 아예 아무것도 수행되지 않아야 한다는 성질이다.

이는 곧, 트랜잭션은 일부만 진행된 상태가 될 수 없음을 의미한다. 만약 트랜잭션이 수행되던 도중 오류가 발생한다면, 반드시 트랜잭션 전체가 취소되어야 한다.

Consistency (일관성)

트랜잭션이 완료된 후에도 데이터베이스는 일관된 상태를 유지해야 한다는 성질이다.

일관된 상태를 유지해야 된다는 것은, 예를 들어 정수형이던 칼럼이 트랜잭션 후에 문자열 형태로 변하지 않는 것을 들 수 있다. 

Isolation (독립성)

둘 이상의 트랜잭션이 병렬적으로 수행되는 경우의 결과는 각 트랜잭션들을 순서대로 하나씩 수행한 결과와 같아야 한다는 성질이다.

즉, 하나의 트랜잭션이 수행되는 도중 다른 트랜잭션이 끼어들 수 없다는 것을 의미한다.

Durability (영속성)

트랜잭션 수행에 의한 결과는 다른 트랜잭션에 의해 변경되지 않는 한 보존되어야 한다는 성질이다.

 

트랜잭션의 종료

트랜잭션은 기본적으로 Commit과 Rollback 이란 연산을 통해 완료된다.

Commit 이란 하나의 트랜잭션이 성공적으로 끝났음을 알려주는 작업이다.

Rollback 이란 트랜잭션이 수행되던 도중 비정상적으로 종료된 경우 등에, 트랜잭션의 원자성을 지키기 위해 지금까지 트랜잭션 내의 수행 내용들을 트랜잭션 시작 이전 상태로 되돌리는 작업이다.

트랜잭션의 상태

  • Active

트랜잭션이 실행 중인 상태이다.

  • Partially Committed

트랜잭션의 모든 내용을 다 수행했지만, 아직 Commit되지는 않은 상태이다.

  • Committed

Commit 연산을 실행하여 트랜잭션이 성공적으로 종료된 상태이다.

  • Failed

트랜잭션 실행 중 오류가 발생해 중단된 상태이다.

  • Aborted

트랜잭션의 비정상 종료로 Rollback 연산을 실행한 상태이다.