Skip to content

Latest commit

 

History

History
135 lines (105 loc) · 11.4 KB

File metadata and controls

135 lines (105 loc) · 11.4 KB

여러 사용자가 규칙 없이 아무 데이터나 입력하면 데이터베이스는 엉망이 되어 사용할 수 없게 될수도 있다. 이를 방지하기 위한 대표적인 기법이 데이터 무결성과 제약 조건, 트랜잭션과 동시성 제어이다.

무결성 제약조건

  • 무결성 : 데이터에 결함이 없는 상태, 즉 데이터가 정확하고 유효하게 유지되는 상태
  • 제약 조건 : 정해 놓은 규칙에 맞는 데이터만 입력받고 규칙에 어긋나는 데이터는 거부하여 데이터 무결성을 지키는 방법
  • 관계 데이터 모델이 기본으로 포함하고 있는 무결성 제약조건에는 개체 무결성 제약조건과 참조 무결성 제약조건으로 나뉜다. 데이터베이스의 상태를 일관성 있게 유지하기 위해서는 두가지 모두 만족시켜야 한다.
    • 개체 무결성 제약조건 : 기본키를 구성하는 모든 속성은 널(NULL) 값이나 중복 값을 가질 수 없다.
    • 참조 무결성 제약조건 : 외래키는 참조할 수 없는 값을 가질 수 없다.

1) 개체 무결성 제약조건 (entity integrity constraint)

  • 릴레이션에서 기본키(식별자)를 구성하는 모든 속성은 널(NULL)값이나 중복값을 가질 수 없다.
  • 관계 데이터 모델에서는 릴레이션에 포함되어 있는 튜플들을 유일하게 구별해주고 각 투플에 쉽게 접근할 수 있도록 릴레이션마다 기본 키를 정의한다. 그런데 기본 키를 구성하는 속성 전체나 일부가 널 값이 되면 튜플의 유일성을 판단할 수 없어 기본키의 본래 목적을 상실하게 된다.
  • 개체 무결성 제약조건을 만족시키려면 새로운 튜플이 삽입되는 연산과 기존 투플의 기본키 속성 값이 변경되는 연산이 발생할 때 기본키에 널 값이 포함되는 상황에서는 연산의 수행을 거부하면 된다.
  • ex. employees 테이블의 employee_id 열은 기본 키로 주민등록번호와 같은 것이므로 데이터 값을 구별할 수 있는 유일한 값이어야 한다. 또한 NULL일 수 없다.

2) 참조 무결성 제약조건 (reference integrity constraint)

  • 외래키 값은 참조 릴레이션의 기본키 값과 동일해야 한다. 즉 외래키는 참조할 수 없는 값을 가질 수 없다.
  • 참조 무결성 제약조건은 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용된다. 따라서 외래키는 참조할 수 없는 값을 가질 수 없다.
  • 참조 무결성 제약 조건은 다음 두 조건 중 하나가 성립하면 만족된다.
    • 외래 키의 값은 참조 릴레이션의 어떤 투플의 기본 값과 같다.
    • 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않으면 널값을 가진다.
  • ex. img
  • 위 그림은 EMPLOYEE 릴레이션의 ENO 애트리뷰트는 DEPARTMENT 릴레이션의 기본 키인 DEPTNO를 참조하는 외래 키이다. 참조 무결성 제약조건에 따라서 ENO의 값은 DEPTNO에 나타나는 값만 나타낼 수 있다.
  • 단, 신입 사원에 관한 정보를 EMPLOYEE 릴레이션에 삽입하는것과 같은 경우에는 사월 투플의 부서번호에 잠정적으로 널값을 지정할 수 있다.



트랜잭션 (Transaction)

  • 트랜잭션은 다수 사용자가 데이터베이스를 동시에 접근하도록 허용하면서 데이터 베이스가 일관성을 유지하게 하는 기술
  • 데이터베이스의 회복동시성 제어 를 가능하게 해 데이터베이스가 일관된 상태를 유지하게 한다.
    • 동시성 제어(Concurency control) : 여러 사용자가 데이터베이스를 동시에 공유할 수 있도록 여러 트랜잭션이 동시에 수행될수 있게 함.
    • 회복 : 데이터베이스에 장애 발생시 장애 발생 전 상태로 복구시키는 것.
  • 트랜잭션은 모두 실행되거나 실행되지 않거나(all or nothing). 즉, 데이터 작업시에 문제가 생기면, 데이터 작업을 하기 이전 시점으로 모든 데이터를 원상 복구한다.
  • 예시
    • img
    • 만약 정미림의 계좌에서 돈을 인출하고 나서 안명석의 계좌에 돈을 입금할 때 UPDATE문 하나가 에러 난다면 정미림의 통장 잔액만 바뀌게 된다. 따라서 트랜잭션으로 두개의 UPDATE문을 하나의 작업으로 묶어 두개의 UPDATE문이 하나라도 정상적으로 수행되지 않는다면 이 트랜잭션은 수행되지 못하게 한다. 다시말해 트랜잭션은 두 UPDATE문을 하나의 논리적인 작업 단위로 처리한다.



트랜잭션의 특성

데이터베이스 트랜잭션이 안전한 수행을 보장하기 위해 네가지 특성 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 내구성(Durability) 을 만족해야 한다. 앞글자를 따 ACID 특성이라고도 한다.

1) 원자성(Atomicity) ⭐️

트랜잭션의 처리가 완전히 끝나지 않았을 경우에는 전혀 이루어지지 않은 것과 같아야 한다(all or nothing).

2) 일관성(Consistency)

트랜잭션의 실행이 성공적으로 완료되면 데이터베이스는 모순 없이 일관성이 보존된 상태여야 한다.

3) 격리성(Isolation) ⭐️

현재 수행중인 트랜잭션이 완료될 때 까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없다.

4) 지속성(durability)

트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 한다.



DBMS (DataBase Management System)

  • 다수의 컴퓨터 사용자들이 컴퓨터에 수록 된 수 많은 자료들을 쉽고 빠르게 추가, 수정, 삭제 할 수 있도록 해주는 시스템
  • 데이터베이스 내의 정보를 검색하거나 정보를 저장하기 편리하고 효율적인 환경을 제공하는 것이 목적

RDBMS(Relational DataBase Management System)

  • 관계형 데이터베이스 시스템으로 가장 주류로 사용됨.
  • SQL(Structured Query Language) : 관계형 데이터베이스를 이용하기 위한 표준 언어
  • 대표적인 RDBMS에는 Oracle, MS SQL Server, MySQL 등이 있다.
  • 특징
    • 모든 데이터를 로우(Row: 행, 줄)와 컬럼(Column: 열, 칸)의 2차원으로 표현
    • 어떤 상황에서도 데이터 무결성을 보장한다. 즉, 안정성일관성 에 강점을 보인다.
    • 트랜잭션(All or Nothing) 처리 가능 NoSQL은 트랜잭션을 지원하지 않음.
    • 단, 수평적 확장이 어렵다는 단점이 존재



트랜잭션의 연산

트랜잭션 연산은 작업 완료를 의미하는 commit과 작업 취소를 의미하는 rollback이 주로 사용된다.

  • commit : 트랜잭션에서 변경하려는 내용이 데이터베이스에 완전하게 반영되는 연산.
  • rollback : 트랜잭션이 갱신한 사항을 트랜잭션이 수행되기 전의 상태로 되돌리는 연산. 트랜잭션에서 변경 내용이 데이터베이스에 일부만 반영된 경우에는 원자성을 보장하기 위해 되돌려야 함.



동시성 제어(Concurency control)

  • 은행과 같이 여러 명의 사용자가 동시에 데이터베이스에 접근하여 데이터를 조회하거나 조작하는 다중 사용자 환경에서도 데이터의 일관성을 유지해야 함.
  • 동시성 제어를 통해 여러 사용자가 데이터베이스를 동시에 공유할 수 있도록 여러 트랜잭션이 동시에 수행될수 있게 함 (병행처리)
    병행처리 : CPU가 여러 프로세스를 처리하는 것처럼, 트랜잭션에 정해진 시간을 할당해서 작업을 하다가 부여된 시간이 끝나면 다른 트랜잭션을 실행하는 이런 방식으로 트랜잭션들을 조금씩 처리하는 것.

로킹(Locking)

  • 트랜잭션의 격리성을 보장하기 위해 사용
  • 동시에 수행되는 트랜잭션이 동일 데이터에 접근하지 못하도록 lock/unlock 연산으로 제어하는 것
  • 한 트랜잭션이 먼저 접근한 데이터에 대한 연산을 마칠 때 까지 해당 데이터에 다른 트랜잭션이 접근하지 못하도록 상호 배재하여 직렬 가능성을 보장하는 것.
  • lock 연산
    • 공용 lock
      • 트랜잭션에서 읽기를 목적으로 데이터 항목을 접근시 요청
      • 데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있음
      • 트랜잭션이 데이터에 대해 공용 lock을 수행하면, 해당 데이터에 read연산을 수행할 수 있지만 write연산은 수행할 수 없음
      • 해당 데이터에 대해 다른 트랜잭션도 공용 lock 연산을 동시에 실행할 수 있음
      • 즉, 데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있음
    • 전용 lock
      • 트랜잭션에서 갱신(삽입,수정,삭제)를 목적으로 데이터 항목을 접근할때 요청
      • 트랜잭션이 데이터에 전용 lock을 실행하면 해당 데이터에 대해 read, write연산 모두 할 수 있음.
      • 그러나 해당 데이터에 대해 다른 트랜잭션은 어떠한 lock 연산도 실행할 수 없음
      • 즉, 전용 lock 연산을 실행한 트랜잭션만 해당 데이터에 대한 독점권을 가짐

2단계 로킹 프로토콜 (2PL)

  • lock을 요청하는 것과 lock을 해제하는 것이 2단계로 이루어 진다는 규약
  • lock과 unlock이 번갈아 수행되지 않고 lock이 쭉 수행된 후에 unlock이 쭉 수행되어야 한다. img
  • 2단계 로킹 프로토콜을 따르기 위해서는 모든 트랜잭션이 lock/unlock을 다음과 같이 수행한다
    • 확장 단계 : 트랜잭션이 lock만 수행할 수 있고, unlock은 수행할 수 없음
    • 축소 단계 : 트랜잭션이 unlock만 수행할 수 있고, lock은 수행할 수 없음
  • 즉, lock 확장 단계가 지난 후에 수축 단계를 수행할 수 있음.
  • 교착상태(Deadlock) 발생 가능
    • 교착상태 : 트랜잭션이 상대가 독점한 데이터에 unlock 연산이 실행되기 서로 기다리면서 트랜잭션 수행을 중단하고 있는 상태.
    • 교착상태에 빠지면 트랜잭션은 더이상 수행되지 못하고 상대 트랜잭션의 unlock을 무한히 기다림
    • 예를들어, 트랜잭션 T1이 T2가 lock한 데이터 X에 접근하기 위해 T2가 unlock을 수행하기를 기다리고, T2는 T1이 lock한 데이터 Y에 접근하기 위해 T1이 unlock을 수행하기를 기다리면 교착상태에 빠지게 된다.



Reference
김연희, 『데이터베이스 개론』, 한빛아카데미(2021), 무결성 제약조건 & 트랜잭션
https://itwiki.kr/w/트랜잭션
https://namu.wiki/w/데이터베이스?from=RDBMS
https://thebook.io/006977/ch09/01/02/
https://vvshinevv.tistory.com/39
https://91ms.tistory.com/2
https://slidesplayer.org/slide/15480449/
https://trello.com/c/RUgF2r9O/115-동시성제어에-대해-설명하시오
https://pinelover.tistory.com/178