[코비] 4.3 트랜잭션과 무결성

최정윤·2023년 9월 18일
0

코비

목록 보기
17/38
post-custom-banner

4.3.1 트랜잭션

데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위.
즉 여러 개의 쿼리를 묶는 단위.

특성 (ACID)

  • 원자성 (Atomicity)
  • 일관성 (Consistency)
  • 독립성 (Isolation)
  • 지속성 (Durability)

1. 원자성

트랜잭션과 관련된 일이 모두 수행 되거나 되지 않았음을 보장.
문제가 발생하여 롤백하는 경우 해당 트랜잭션의 모든 작업이 수행되지 않음 ex) 은행 돈 이체.

무결성 보장

  • Commit: 여러 쿼리가 성공적으로 처리됨을 확정.
  • update, insert, delete 등의 쿼리가 트랜잭션 단위로 수행되고 영구 저장.
  • Rollback: 에러나 이슈 때문에 트랜잭션 전으로 되돌림.

2. 일관성

허용된 방식으로만 데이터를 변경해야 하는 것.
데이터베이스의 모든 데이터는 조건, 규칙 등에 따라 유효해야 한다.

3. 격리성

트랜잭션 수행 시 서로 끼어들지 못해야 하는 것.
병렬 트랜잭션이라도 격리되어 순차적으로 실행되듯 작동해야 한다.

격리 수준
Serializable - Repeatable_read - Read_committed - Read_uncommitted
오른쪽 갈수록 동시성 강하며 격리성 약해짐

  • Serializable: 트랜잭션 순차적 진행. 교착 상태 확률 높고 성능 떨어짐.

  • Repeatable_read: 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정 불가 (새 행 추가는 가능).

  • Read_committed: 가장 많이 사용. 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없음 (커밋 완료 데이터만 조회). 한 트랜잭션이 수정한 행을 다른 트랜잭션이 수정 가능.

  • Read_uncommitted: 한 트랜잭션 커밋 이전에 다른 트랜잭션에 노출되나 빠름.
    격리 수준에 따라 발생하는 현상

  • 팬텀 리드: 한 트랜잭션 내에서 동일한 쿼리를 보낼 때 결과가 다른 경우.

  • 반복가능하지 않은 조회: 한 트랜잭션 내의 같은 행에 반복 조회가 발생했는데 그 값들이 다른 것.

  • 더티 리드: 한 트랜잭션이 실행 중에 다른 트랜잭션에 의해 수정되었지만 커밋되지 않은 이전 데이터를 읽는 것.

4. 지속성

성공적으로 수행된 트랜잭션은 영원히 반영되어야 함.
데이터베이스에 시스템 장애가 발생해도 원래 상태로 회복할 수 있어야 함.
체크섬, 저널링(커밋 전 로깅), 롤백 등 기능 제공.

4.3.2 무결성

데이터의 정확성, 일관성, 유효성을 유지하는 것.
데이터베이스 값과 실제 값이 일치하는지에 대한 신뢰를 보장함.

  • 개체 무결성: 기본 키의 필드 값은 Null이 허용되지 않음.

  • 참조 무결성: 참조 관계인 두 테이블은 항상 일관된 값 유지.

  • 고유 무결성: 특정 속성에 대해 각 튜플의 값이 달라야 하는 조건이 주어지면 달라야 함. Unique

  • Null 무결성: 특정 속성 값에 Null이 올 수 없다는 조건이 주어지면 Null 못옴

  • 도메인 무결성: 특정 속성 값이 정의된 도메인이 속해야 하는 것. 성별이면 남 또는 여에 반드시 속함.

  • 키 무결성: 한 릴레이션에는 하나 이상의 키가 존재

profile
개발 기록장
post-custom-banner

0개의 댓글