Transaction

0

취업 및 면접준비

목록 보기
12/20

정리 링크

Transaction이란?

1. 정의

  • 작업의 완전성 보장. 쉽게 설명하면 실패하면 롤백하고 성공하면 전체가 다 작업되는 것. 즉 일부 작업만 완성되는 현상을 방지해주는 것이라 볼 수 있다.

2. 왜 쓸까?

  • 보통 은행에 돈을 송금하는 것으로 예를 많이 드는데 데이터베이스에 바로 적용하자면 비정상 처리 된(일부만 전송되고..) 데이터의 부정합이 발생할 것을 방지하여 이를 원상복귀 시키고(롤백) 정상적으로 전체를 실행시키기 위해서다. 즉 데이터 부정합 방지가 가장 큰 목적이라 할 수 있겠다.

3. Transaction vs Lock

참고 링크

  • 트랜잭션은 이해가 되었는데 락은 대체 무슨 관련이 있을까?

  • 정의 : 데이터의 일관성을 지키기 위해 락을 걸고 관리하는 것

    동시성 / 일관성 / 잠금

  • 필요성 : 동시에 접근해서 수정하려고 할 때 DB의 일관성이 깨질 수 있다.
    e.g. 책 1권을 동시에 빌리는데 두 명 다 빌림 처리 되어버림
    -> 락은 여러 사용자가 동일한 시간에 동일한 데이터를 동시에 엑세스할 수 있게 해준다.

  • 락은 트랜잭션을 순차적으로 처리되도록 함으로써 손실된 업데이트를 방지하는데 중요한 역할을 하며 자동으로 발생한다.

  • 락을 통해 데이터에 대한 일관성 유지, 동시 사용이 가능해진다.

트랜잭션이 데이터의 부정합을 방지해주고 정합성을 높여준다면(완성도?) 락은 데이터의 동시성, 순차성, 일관성 등 일종의 순서에 관한 것을 높여준다.

4. 특징 : ACID

  1. A : 원자성 -> 문제가 생기면 롤백, 안 생기면 완벽히 수행
  2. C : 일관성 -> 언제나 일관성 있는 DB 상태로 변환, 고정요소는 같다.
  3. I : 독립성 -> 트랜잭션 간 독립적 수행
  4. D : 지속성 -> 완료된 후 영구적으로 데이터 작업 결과 저장

5. 트랜잭션 상태

  1. Active : 트랜잭션 실행 상태

  2. Failed : 실패

  3. Aborted : 트랜잭션 취소 상태, 롤백

  4. Partial commiitted : 트랜잭션 커밋 명령이 도착한 상태, sql문은 이미 실행 되었고 commit만 남은 상태

  5. Committed : 커밋이 완료되 상태

6. 트랜잭션 주의사항

  • 트랜잭션이 필요한 최소한으로만 적용하기
    -> DB 커넥션 개수가 제한적이기 때문에 각 커넥션을 프로그램이 오래 가지고 있을 수록 병목확률이 커진다.
  • 가능하면 트랜잭션 각가의 범위 크기도 최소화해야 한다.
    -> 모든 작업에 트랜잭션이 필요하다고 해서 한 단위로 묶는 것이 아니라 여러 트랜잭션으로 쪼개야 한다.
profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글