[Computer Science] Database(Transaction)

Arkiee·2022년 10월 26일
0

Computer Science

목록 보기
8/9
post-thumbnail

트랜잭션(Transaction)이란?

  • DB의 상태를 하나의 일관된 상태에서 또 다른 일관된 상태로 변환시켜주는 일련의 논리적 연산의 집합

    • 사용자의 입장에서는 작업의 논리적 단위
    • 시스템 입장에서는 데이터들을 접근 또는 변경하는 프로그램의 단위
  • 트랜잭션은 DB 서버에 여러 개의 클라이언트가 동시에 액세스하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용합니다.

  • 트랜잭션은 수행 중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있습니다.

트랜잭션 특징

크게 무결성을 보장하기 위한 4가지(ACID)로 구분된다.

  • 원자성(Atomicity): 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다.

  • 일관성(Consistency): 트랜잭션의 작업 처리결과가 항상 일관성이 있어야 한다. (ex. 데이터 타입이 정수형인데, 갑자기 문자열이 되지 않는 것)

  • 독립성(Isolation): 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션도 다른 트랜잭션의 연산에 끼어들 수 없다.

  • 지속성(Durability): 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영된다.

트랜잭션 처리어(TCL: Transaction Control Language)

  • COMMIT: 트랜잭션에 성공해 DB에 상태를 반영
  • ROLLBACK: 트랜잭션에 실패해 기존 상태로 복구

※ DB 회복

외부/내부 장애로 데이터베이스가 일관성을 유지하지 못할 때 이를 유지하기 위한 방법

  • UNDO: 변경된 데이터를 취소하고 예전 데이터로 복구
  • REDO: 백업본으로 변경 후, 로그 기록에 남은 성공 데이터를 DB에 적용

트랜잭션 상태

  • 활동(Active): 트랜잭션이 실행중인 상태
  • 실패(Failed): 트랜잭션 실행에 오류가 발생해 중단된 상태
  • 철회(Aborted): 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
  • 부분 완료(Partially Committed): 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
  • 완료(Committed): 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

잠금(Locking) 기법이란?

  • 잠금(Locking)은 하나의 트랜잭션이 실행되는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제(Mutual Exclusive) 기능을 제공하는 기법입니다.

  • 하나의 트랜잭션이 데이터 항목에 대해 잠금(lock)을 설정하면, 잠금을 설정한 트랜잭션이 해제(unlock)할 때까지 데이터를 독점적으로 사용할 수 있습니다.

  • 단, 데이터가 많은 경우 교착상태에 빠질 수 있음

    교착상태(DeadLock)

    • 여러 트랜잭션이 실행되지 못하고 무기한 대기중인 상태
    • 해결방법
      • 예방기법
        트랜잭션 시작 전, 필요한 데이터에 Lock을 모두 걸어주는 기법. 필요한 데이터가 많은 경우 무쓸모임
      • 회피기법
        자원 할당 시에 타임스탬프를 사용해 시간 순서대로 제어하는 기법.

[참고]
https://coding-factory.tistory.com/226
https://hyeri0903.tistory.com/169

profile
꿈을 꾸는 개발자

0개의 댓글