일기

[관계 데이터 모델] 제약 조건_트랜잭션

이준늬 2023. 2. 11. 00:05

트랜잭션(transaction)

  하나의 논리적 기능을 수행하기 위한 작업의 단위
  ▷ 여러 개의 쿼리(DB에 접근하는 방법)를 하나로 묶는 단위

특징

 1. 원자성(atomicity)

    ▷ 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징
         "all or nothing"

더보기

         → 커밋("all")과 롤백("nothing")의 역할
                   - 데이터의 무결성 보장
                   - 데이터 변경 전 변경사항 확인 용이
                   - 해당 작업 그룹화 가능

              - 커밋(commit)
                    여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
                     = 하나의 트랜잭션 수행 성공
              - 롤백(roll back)
                    트랜잭션으로 처리한 과정을 취소

           ※ 트랜잭션 전파: 트랜잭션(커넥션 단위)을 커넥션 객체를 넘겨 수행할 때, 
                                             매번 넘기지 않고, 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶는 것

더보기

ex) 은행 업무에서 롤백시, 삭제만 롤백되고 삽입은 그대로

 2. 일관성(consistency)

    ▷ '허용된 방식'으로만 데이터를 변경해야 한다.

더보기

ex) 은행 업무에서 잔액 이상으로 삭제 불가

 3. 격리성(isolation)

    ▷ 트랜잭션 수행 시 서로 끼어들지 못한다.
          동시성과 상반되는 개념

더보기

    격리 수준에 따른 발생 현상


         (1) 팬텀 리드(phantom read)
                 - 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때, 조회 결과가 다른 경우
                 - 다른 행이 선택될 수 있음
                    ex) A가 조회(19세 이상: 3table) → B가 레코드 삽입(30살) 결과 변경(19세 이상: 4table)

         (2) 반복 가능하지 않은 조회(non-repeatable read)
                 - 한 트랜잭션 내의 같은 행에 두 번 이상 조회 시, 결과가 각각 다른 경우
                 - 행 값이 달라질 수 있음
                    ex) A가 조회(준희 나이:26) → B가 변경(준희 나이:24) → A가 조회(준희 나이:24)

         (3) 더티 리드(dirty read)
                 - 한 트랜잭션이 실행 중일 때, 다른 트랜잭션이 수정중이나 커밋하지 않은 행의 데이터를 읽는 경우
                 - "커밋 되지 않은"
                     ex)A가 조회(준희 나이:26) → B가 변경 중→ A가 조회(준희 나이:24)

 

    → 격리 수준

         (1) SERIALIZABLE 
                  - 격리 정도: 순차적 진행, 여러 트랜잭션이 동시에 같은 행에 접근 불가
                  - 한계: 격리성은 높으나, 교착 상태가 일어날 확률이 높고 성능이 떨어짐
                  - 발생 현상: x

         (2) REPEATABLE_READ 
                  - 격리 정도: 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정 불가
                  - 한계: 새로운 행은 추가 가능하므로, 이후에 추가된 행이 발견될 수 있음
                  - 발생 현상: 팬텀리드
                
         (3) READ_COMMITTED(사용 多)
                  - 격리 정도: 커밋 완료된 데이터만 조회 가능
                  - 한계: 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있음
                                 ex) A가 수정한 행을 B가 수정해, A가 다시 읽을 때, 다른 내용 발견
                  - 발생 현상: 팬텀리드, 반복 불가한 조회


         (4) READ_UNCOMMITTED
                  - 격리 정도: 무결성을 위해함(하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출)
                  - 장점: 정확성보다 양이 더 중요한 "어림잡아" 집계할 때 사용하면 ㄱㅊ
                  - 발생 현상: 팬텀리드, 반복 불가 조회, 더티 리드

 4. 지속성(durability)

    ▷ 성공적으로 수행된 트랜잭션은 영원히 반영된다.
          시스템 장애 시, 회복 기능 있어야함.

더보기

    → 지속성을 위해 제공하는 기능


         - 체크섬
                중복 검사의 한 형태, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순 방법

         - 저널링
                 파일 시스템 또는 DB 시스템에 변경 사항을 commit하기 전에 로깅하는 것

         - 롤백 등등

'일기' 카테고리의 다른 글

join  (0) 2023.02.18
인덱스  (0) 2023.02.16
[관계 데이터 모델] 제약 조건_릴레이션 키  (0) 2023.02.10
[관계 데이터 모델] 제약 조건  (0) 2023.02.10
[관계 데이터 모델] 구조  (0) 2023.02.10