트랜잭션

신경연·2023년 5월 15일
0

Spring

목록 보기
5/5

트랜잭션(Transaction)

트랜잭션은 SELECT, UPDATE, INSERT, DELETE와 같은 데이터베이스의 상태를 변환시키는 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야할 일련의 연산들을 의미합니다.
사용자의 입장에서는 작업의 논리적 단위로 이해를 할 수 있고, 시스템의 입장에서는 데이터들을 접근 또는 변경하는 프로그램의 단위가 됩니다.

트랜잭션의 특징(ACID)

Atomicity(원자성)

트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영 되지 않아야 합니다. (All or Nothing)
트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 합니다.

Consistency(일관성)

트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 합니다.
시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 수행 완료 후의 상태가 같아야 합니다.

Isolation(독립성)

둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들수 없습니다.
수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조 할 수 없습니다.

Durability(지속성)

트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 합니다.

Commit과 Rollback

Commit

commit 연산은 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때 하나의 트랜잭션이 끝났음을 알려주기 위해 사용하는 연산입니다.

Rollback

Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산입니다.

트랜잭션의 상태

  • 활동(Active) : 트랜잭션의 활동 상태. 트랜잭션이 실행중이며 동작중인 상태를 말한다.
  • 부분완료(Partially Committed) : 트랜잭션의 Commit 명령이 도착한 상태. 트랜잭션의 commit 이전 sql문이 수행되고 commit만 남은 상태를 말합니다.
  • 완료(Committed) : 트랜잭션 완료 상태. 트랜잭션이 정상적으로 완료된 상태를 말합니다.
  • 실패(Failed) : 트랜잭션 실패 상태. 트랜잭션이 더 이상 정상적으로 진행될 수 없는 상태를 말합니다.
  • 취소(Aborted) : 트랜잭션 취소 상태. 트랜잭션이 취소되고 트랜잭션 실행 이전 데이터로 돌아간 상태를 말합니다.

부분완료 vs 완료

commit요청이 들어오면 상태는 부분완료 상태가 됩니다. 이후 commit을 문제없이 수행 할 수 있다면 완료 상태로 전이되고, 만약 오류가 발생하면 실패 상태가 됩니다. 즉, 부분완료는 commit요청이 들어왔을 때를 말하며, 완료 상태는 commit을 정상적으로 완료한 상태를 말합니다.

출처

https://code-lab1.tistory.com/51

profile
반갑습니다

0개의 댓글