4.3 트랜잭션과 무결성

·2023년 9월 27일
0

CS

목록 보기
14/23

4.3.1 트랜잭션

  • 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 데이터베이스에 접근하는 방법은 쿼리이다. 즉 여러 개의 쿼리들을 하나로 묶는 단위
  • ACID : 원자성, 일관성, 독립성, 지속성

원자성(atomicity)

  • All or Nothing
  • 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나 보장하는 특징
  • ex) 트랜잭션을 커밋 했는데, 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장
  • 트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하는 것이 있으면 안된다. 만약 있다면 롤백이 일어났을 때 어떻게 해야 할 것인지에 대한 해결 방법이 있어야 하고 트랜잭션 전파를 신경 써서 관리해야 한다.

커밋과 롤백

커밋(commit)

  • 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
  • 트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것
  • 커밋이 수행되었다 == 하나의 트랜잭션이 성공적으로 수행되었다.
  • 그림처럼 update, insert, delete의 쿼리가 하나의 트랜잭션 단위로 수행되고 이후에 데이터베이스에 영구 저장 된다.

롤백(rollback)

  • 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일(취소)

이러한 커밋과 롤백 덕에 데이터의 무결성이 보장된다.
또한 데이터 변경 전에 변경 사항을 쉽게 확인할 수 있고 해당 작업을 그룹화할 수 있다.

트랜잭션 전파

  • 트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 한다.
  • 트랜잭션 전파 : 이를 넘겨서 수행하지 않고 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것

일관성(consistency)

  • 허용된 방식으로만 데이터를 변경해야 하는 것
  • 데이터베이스에 기록된 모든 데이터는 여러 가지 조건, 규칙에 따라 유효함을 가져야 한다.

격리성(isolation)

  • 트랜잭션 수행 시 서로 끼어들지 못하는 것
  • 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고, 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.
  • 그냥 순차적으로 하면 쉽겠지만, 성능이 안좋다. 격리성은 여러 개의 격리 수준으로 나뉘어 격리성을 보장한다.
  • 위로 갈수록 동시성이 강해지지만 격리성은 약해지고, 아래로 갈수록 동시성은 약해지고 격리성은 강해진다.

지속성(durability)

  • 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함
  • 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻함
  • 데이터베이스는 이를 위해 체크섬, 저널링, 롤백 등의 기능을 제공

    체크섬 : 중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
    저널링 : 파일 시스템 또는 데이터베이스 시스템에 변경 사항을 commit하기 전에 로깅하는 것, 트랜잭션 등 변경 사항에 대한 로그를 남기는 것

4.3.2 무결성

  • 데이터의 정확성, 일관성, 유효성을 유지하는 것
  • 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과 그 값에 해당하는 현실 세계의 실제 값이 일치하는지에 대한 신뢰가 생김

Reference

주홍철 작가님의 '면접을 위한 CS 전공지식 노트'를 기반으로 작성되었습니다.

0개의 댓글