[DB] 트랜잭션(Transaction)

giggle·2023년 8월 15일
0
post-custom-banner

📌 트랜잭션(Transaction)이란?

트랜잭션(Transaction)이란 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 논리적 단위입니다. 데이터 베이스의 상태를 변화시킨다는 말은 SELECT, INSERT, UPDATE, DELETE 등과 같은 조작어를 사용하는 행동을 의미합니다.

또한 트랙잭션은 데이터베이스의 무결성이 보장되는 상태에서 요청된 작업을 완수하기 위한 작업의 기본 단위이자 상황에 따라 여러 개가 만들어 질 수 있습니다.

그 각각의 트랜잭션들은 상황에 따라 Commit(저장) 되거나 Rollback(철회) 될 수 있습니다.

📌 트랜잭션 특징(ACID)

원자성(Atomicity)

  • 트랜잭션 연산은 데이터베이스에 모두 반영되거나 전형 반영되지 않아야 합니다.
  • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 하나의 오류가 발생한다면 트랜잭션은 전부 취소됩니다.

일관성(Consistency)

  • 트랜잭션이 실행을 성공적으로 완료한다면, 항상 일관성있는 데이터베이스 상태로 변환됩니다.
  • 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 합니다.
  • 트랜잭션은 정의된 규칙과 제약 조건을 준수하여 데이터베이스를 변경해야 합니다.

독립성, 격리성(Isolation)

  • 여러개의 트랜잭션이 동시, 병행 실행되는 경우, 어느 하나의 트랜잭션 실행 중 다른 트랜잭션의 연산이 끼어들 수 없습니다.
  • 수행 중인 트랜잭션은 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없습니다.
  • 격리성을 보장하기 위해서는 Lock과 Unlock 기법을 사용합니다.
  • 하지만, 격리수준에 따라 수행 결과 참조 가능 여부가 달라집니다.

영구성(Durability)

  • 성공적으로 완료된 트랜잭션의 결과는 어떠한 경우가 있더라도(시스템 고장..) 영구적으로 반영되어야 합니다.

📌 연산

커밋(Commit)

  • 모든 부분 작업들이 성공적으로 완료하면 해당 변경사항을 한꺼번에 데이터베이스에 반영합니다.
  • 즉, 모든 작업들은 정상적으로 처리하겠다는 명령어로 처리 과정을 데이터베이스에 영구적으로 저장합니다.
  • 커밋 수행 후에는 하나의 트랜잭션 과정이 종료되며, 이전 데이터가 완전히 업데이트됩니다.

롤백(Rollback)

  • 부분 작업이 실패하면 트랜잭션 실행 전으로 되돌립니다.
  • 작업 중 문제 발생으로 인해 트랜잭션의 처리 과정에서 발생한 변경 사항 취소하는 명령어입니다.
  • 일부 작업이 정상적으로 처리되더라도 모든 트랜잭션 연산을 취소합니다. -> 원자성
  • 트랜잭션 시작되기 이전의 상태로 되돌림
    • 마지막 커밋 완료한 시점으로 되돌아 감
    • 마지막으로 수행한 커밋 명령까지만 정상 처리된 상태로 유지
    • 커밋하여 저장한 것만 복구
  • 해당 트랜잭션을 재시작 혹은 폐기
    • 마지막으로 수행한 커밋 명령 이후 수행한 모든 DML 명령어 작업들을 취소시켜 이전 상태로 원상 복귀

세이브포인트(save point)

  • 임시저장, 부분저장으로 전체가 아닌 특정 부분에서 트랜잭션을 취소 위해 사용합니다.
  • 현재의 트랜잭션 작게 분할 가능하며 여러 개의 SQL문의 실행을 수행하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 지정 가능합니다.
  • 취소 지점 명시한다면 그 지점까지 작업 취소합니다.

사용 방법
SAVEPOINT 세이브포인트명;
→ 세이브포인트 지정
ROLLBACK TO 세이브포인트명;
→ 해당 세이브포인트 지점까지 처리한 작업 롤백

📌 트랜잭션 상태

활동(Active)

트랜잭션이 실행 중인 상태

실패(Failed)

트랜잭션 실행에 오류가 발생하여 중단된 상태

철회(Aborted)

트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태

부분 완료(Partially Committed)

트랜잭션의 마지막 연산까지 실행
커밋 연산이 실행되기 직전의 상태

완료(Committed)

트랜잭션이 성공적으로 종료되어 커밋 연산을 실행한 후의 상태

📌 트랜잭션 복구

REDO

UNDO로 취소했던 작업을 마음이 바뀌어 다시 되돌리는 작업입니다.

  • 이미 커밋한 트랜잭션의 수정을 재반영하는 복구 작업
  • 사용자가 했던 작업을 그대로 다시 복구
  • "취소를 취소"

UNDO

컴퓨터로 무언가를 작업할 때 마음에 들지 않아 조금 전으로 되돌리고 싶을 때 행하는 작업입니다.

  • 아직 완료되지 않은 트랜잭션이 수정한 페이지들도 디스크에 출력될 수 있으므로, 해당 트랜잭션이 어떤 이유든 정상적으로 종료될 수 없게 되면 트랜잭션이 변경한 페이지들은 원상 복구 되어야 함
  • 사용자가 했던 작업을 반대(원상태)로 복구
  • "방금 전에 했던 일을 취소" -> 무효화

참고


피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.
post-custom-banner

0개의 댓글