CS전공 지식 4.3-트랜잭션과 무결성

KIM HYUNMIN·2024년 10월 22일

CS 기초지식

목록 보기
10/13

트랜잭션이란?

  • 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.
    간단하게 말해서 SELECT,INSERT,DELETE,UPDATE의 질의어를 이용하여 데이터베이스에 접근하는것을 의미한다.

트랜잭션의 특징

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

원자성

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

일관성

  • 일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것이다. 트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라, 처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행된다. 이렇게 해서 사용자는 일관성있는 데이터를 볼수 있는 것이다.

격리성

  • 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다. 하나의 특정 트랜잭션이 완료될떄까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.

지속성

  • 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 점이다.

트랜잭션의 종류

  • 트랜잭션에는 내가 적은 쿼리문과 데이터를 최종적으로 데이터베이스에 반영하는 COMMIT 과 실패했을때 COMMIT 시점으로 다시 되돌아가는 ROLLBACK이 있다.

    1) 활동 : 트랜잭션이 실행 중에 있는 상태, 연산들이 정상적으로 실행 중인 상태
    2) 실패 : 트랜잭션이 실행에 오류가 발생하여 중단된 상태
    3) 철회 : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태
    4) 부분적 완료 : COMMIT 연산이 실행되기 직전의 상태로 아직 작성한 것들을 저장하지 않은 상태
    5) 완료 : 트랜잭션이 성공적으로 종료되어 COMMIT 연산을 실행한 후의 상태

COMMIT

  • 완전 저장
  • 모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로 처리과정을 DB에 영구 저장 하는 것
  • COMMIT을 수행하면 하나의 트랜잭션 과정을 종료하는 것
  • COMMIT을 수행하면 이전 데이터가 완전히 업데이트 된다.

ROLLBACK

  • ROLLBACK은 작업 중 문제가 발생되어 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어이다.
  • 트랜잭션이 시작되기 이전의 상태로 되돌린다.
  • 즉, 마지막 COMMIT을 완료한 시점으로 다시 돌아가는 것

트랜잭션의 격리수준

정의: 트랜잭션 격리수준이랑 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 고립(격리)되어 있는가에 대한 수준을 말한다.

격리수준단계
1) Uncommitted Read (커밋되지 않은 읽기)

다른 트랜잭션에서 커밋되지 않은 데이터에 접근할 수 있게 하는 격리 수준이다. 가장 저수준의 격리수준이며, 일반적으로 사용하지 않는 격리 수준이다.

여기서 트랜잭션 13번이 데이터를 읽은후 10번 트랜잭션에서 문제가 발생하여 롤백된다면 데이터 부정합을 발생시킬수 있다.
이처럼 커밋되지 않은 트랜잭션에 접근하여 부정합을 유발할 수 있는 데이터를 읽는 것을 더티읽기(Dirty Read)라고 한다.

2) Committed Read (커밋된 읽기)
다른 트랜잭션에서 커밋된 데이터로만 접근할 수 있게 하는 격리 수준이다. MySQL을 제외하고 대부분 이를 기본 격리수준으로 사용한다.

Non Repeatable Read(반복 가능하지 않은 읽기) 현상 발생
Committed Read 수준에서는 Non Repeatable Read 현상이 발생한다. 이는 하나의 트랜잭션에서 동일한 SELECT 쿼리를 실행했을 때 다른 결과가 나타나는 것을 말한다.
커밋을 하기 전과 커밋을 하고나서의 결과가 서로 다르다.

3) Repeatable Read (반복가능한 읽기)
Non Repeatable Read 문제를 해결하는 격리 수준으로, 커밋된 데이터만 읽을 수 있되 자신보다 낮은 트랜잭션 번호를 갖는 트랜잭션에서 커밋한 데이터만 읽을 수 있는 격리수준이다.
13번트랜잭션에서 실행됬지만 트랜잭션 10번은 낮은 번호를 가지고 있어 데이터를 읽을 수없다. 따라서 Non Repeatable Read 현상이 해결됨을 확인할 수 있다.

Phantom Read (유령 읽기)
하나의 트랜잭션 내에서 여러번 실행되는 동일한 SELECT 쿼리에 대해 결과 레코드 수가 달라지는 현상을 말한다. Non Repeatable Read는 레코드의 데이터가 달라지는 것을 의미한다면 Phantom Read는 기존 조회했던 레코드의 데이터는 달라지지 않지만, 새로운 레코드가 나왔다가 사라졌다가 하는 것이다.

4) Serializable (직렬화)
가장 고수준의 격리수준으로 트랜잭션을 무조건 순차적으로 진행시킨다. 트랜잭션이 끼어들 수 없으니 데이터의 부정합 문제는 발생하지 않으나, 동시 처리가 불가능하여 처리 속도가 느려진다.

데이터 무결성

  • 데이터의 정확성,일관성,유효성이 유지되는 것을 의미

종류

  • 개체 무결성: 기본 키 제약이라고도 하며, 테이블은 기본키를 지정하고 그에 따른 무결성 원칙을 지켜야 하는 조건
  • 참조 무결성: 외래 키 제약이라고도 하며, 테이블 간의 참조 관계를 선언하는 제약조건
  • 고유 무결성: 테이블의 특정 속성에 대해 각 레코드들이 갖는 값들이 서로 달라야 하는 조건
  • Null 무결성: 특정 속성값에 NULL 이 올 수 없다는 조건이 주어진 경우, 그 속성값은 NULL 값이 올 수 없다는 제약조건
profile
Linux,Window,Network,docker,kubernets

0개의 댓글