DB Transaction

·2022년 4월 22일
0

트랜잭션(Transaction)이란?

데이터베이스의 상태를 변화시키기 위해 수행하는 논리적인 작업의 단위

Lock

두 명 이상의 데이터베이스 사용자가 동일한 데이터 항목에 대해 동시에 변경을 수행하여 생길 수 있는 데이터의 부적절한 변경을 방지하기 위해 동시성을 제어하는 역할을 한다.


트랜잭션의 특징 : ACID

Atomicity : 원자성

  • 원자와 같이 트랜잭션을 더 이상 쪼갤 수 없는 단위라 생각하고 트랜잭션을 진행하며 모든 연산이 완전히 반영되거나 전혀 반형되지 않아야 함을 보장하는 특성
  • All or Nothing으로, 모든 연산들이 실패 없이 성공적으로 완료되면 Commit을 하고, 하나라도 실패하면 모든 연산들을 취소하고 트랜잭션 실행 바로 직전의 상태로 되돌리는 Rollback을 진행한다.

Consistency : 일관성

  • 트랜잭션이 성공적으로 실행 된 후에도 데이터베이스가 일관성 있는 상태를 가지고 있어야 함을 보장하는 특성
  • 변경된 데이터의 값이 정의된 제약조건이나 cascade, trigger에 맞게 변경되어야한다.

Isolation : 독립성

  • 둘 이상의 트랜잭션이 동시에 실행 될 때, 실행되는 각각의 트랜잭션이 서로의 연산에 끼어들 수 없어야 함을 보장하는 특성
  • Lock을 통해 독립성을 보장하고 있으며, 독립성을 통해 업데이트가 누락되거나, 데이터가 꼬이는 것을 방지한다.

Durability : 지속성

  • 트랜잭션이 성공적으로 완료 되었으면 해당 트랜잭션의 결과는 영구적으로 반영되어야 함을 보장하는 특성
  • 트랜잭션이 성공적으로 완료되어 Commit을 하려고 할 때 어떠한 이유로 DB의 서버가 강제종료 되어도 DB 서버가 다시 살아났을 때 완료된 데이터는 그대로 Commit이 되어야한다.

트랜잭션의 상태

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

    트랜잭션의 연산

    - Commit : 모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로 완료된 모든 내용을 데이터베이스에 영구적으로 저장하는 것이다.
    - Rollback : 트랜잭션의 처리과정에서 발생한 변경사항들을 모두 취소하는 명령어로 트랜잭션이 시작하기 전의 상태로 되돌리는 것이다.


Ex) 은행 계좌 송금 - A가 B에게 10,000원을 송금한다.

  1. A의 은행잔고 값을 조회하여 메인 메모리로 불러온다.
  2. 불러온 A의 잔고에서 10,000을 감소시킨다.
  3. B의 은행잔고 값을 조회하여 메인 메모리로 불러온다.
  4. B의 잔고를 10,000을 증가시킨다.
  5. 감소된 A의 잔고를 저장한다.
  6. 증가된 B의 잔고를 저장한다.

트랜잭션의 문제와 해결 방법

❌ 애플리케이션과 데이터베이스를 커넥션이 연결하고 있다. 하지만 이 커넥션의 개수는 제한적이기 때문에 트랜잭션이 커넥션을 소유하는 시간이 길어지면 다른 트랜잭션에서 사용할 수 있는 커넥션의 수가 줄어든다.
⭕ 필요한 기능 범위에서만 최소한으로 정의하여 소유 시간을 줄여야한다.

❌ 교착상태- 두 개 이상의 트랜잭션이 특정 자원을 잠근 뒤 다른 트랜잭션에서 잠긴 자원을 요구하여 시간이 지나도 진행하지 못하는 상태를 의미한다.
⭕ 트랜잭션을 자주 커밋하여 트랜잭션 실행 중 잠금의 시간을 줄인다.
     정해진 순서대로 테이블에 접근하여 서로 엇갈려 잠금을 하지 않게 한다.


**추가로
트랜잭션 격리수준

profile
으쌰으쌰🐜🐜

0개의 댓글