Team

[CS스터디] DB-트랜잭션과 무결성, 데이터베이스 종류

seungh2 2023. 1. 5. 01:11

트랜잭션

  • 한 번에 모두 수행되거나 수행되지 않아야 하는 작업 수행의 논리적 단위
  • 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 여러 개의 쿼리를 하나로 묶는 단위

ACID 특징

Atomicity 원자성

  • all or nothing
  • 트랜잭션과 관련된 일이 모두 수행되었거나 모두 수행되지 않았거나를 보장하는 특성
  • 트랜잭션 변경 연산은 모두 성공적으로 수행되거나 전혀 수행되지 않아야 한다.
  • 이를 지원하기 위한 연산 : commit과 rollback

commit

여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어

트랜잭션 단위로 수행되며, 변경된 내용이 모두 영구적으로 저장되는 것

rollback

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

Consistency 일관성

  • "허용된 방식"으로만 데이터를 변경해야 하는 것
  • 각 트랜잭션은 트랜잭션 실행 후에 데이터베이스를 하나의 일관된 상태로 남겨두어야 한다.

Isolation 격리성

  • 트랜잭션 수행 시 서로 끼어들지 못하는 것.
  • 각각의 트랜잭션은 단독으로 실행된 것 같은 효과를 가진다.
  • 실행 중인 트랜잭션은 다른 트랜잭션의 간섭 없이 그 실행을 완료할 수 있어야 한다.
  • 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 동작되어야 하고, DB는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.

격리 수준

  1. SERIALIZABLE
    • 트랜잭션을 순차적으로 진행시키는 것
    • 여러 트랜잭션이 동시에 같은 행에 접근할 수 없다.
    • 매우 엄격한 수준으로 해당 행에 대해 격리
    • 교착 상태가 일어날 확률도 많고 가장 성능이 떨어진다.
    • 격리상 강, 동시성 약
  2. REPEATABLE_READ
    • 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않는다.
    • 팬텀 리드 발생
  3. READ_COMMITTED
    • 가장 많이 사용되는 격리 수준
    • 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다.
    • 커밋이 완료된 데이터에 대해서만 조회를 허용한다.
    • 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있다.
    • 팬텀 리드, 반복 가능하지 않은 조회 발생
  4. READ_UNCOMMITTED
    • 가장 낮은 격리 수준
    • 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠르다.
    • 데이터 무결성을 위해 사용하지 않는 것이 좋지만, 몇몇 행이 제대로 조회되지 않더라도 괜찮은 거대한 양의 데이터를 어림잡아 집계하는 데 사용하는 것은 좋다.
    • 팬텀 리드, 반복 가능하지 않은 조회 , 더티리드 발생
  • Phantom read 팬텀 리드
    • 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때, 해당 조회 결과가 다른 경우
  • Non-repeatable read
    • 한 트랜잭션 내의 같은 행에 두 번 이상의 조회가 발생했는데, 그 값이 다른 경우
  • Dirty read
    • 트랜잭션이 아직 커밋되지 않은 데이터를 읽을 때 발생
    • 한 트랜잭션이 실행 중일 때, 다른 트랜잭션에 의해 수정되었지만 아직 "커밋되지 않은"행의 데이터를 읽을 수 있을 때 발생
    • non-repeatable read와 유사

Durability 지속성

  • 성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것
  • 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻한다.
  • 트랜잭션이 성공적으로 완료되면 데이터베이스에 대한 변경은 영구적이어야 한다.
  • 데이터베이스는 체크섬, 저널링, 롤백 등의 기능을 제공한다.
  1. 체크섬 (checksum)
    • 중복 검사의 한 형태
    • 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
  2. 저널링 (Journaling)
    • 파일 시스템 또는 데이터베이스 시스템에 변경 사항을 commit 하기 전에 로깅하는 것, 트랜잭션 등 변경사항에 대한 로그를 남기는 것

트랜잭션 전파

  • 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것
  • 트랜잭션을 수행할 때, 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 한다.
  • 매번 넘겨서 수행하는 것은 어렵고 귀찮기 때문에 사용하는 것이 트랜잭션 전파
  • ex) Spring에서 @Transactional annotation을 통해 여러 쿼리 관련 코드들을 하나의 트랜잭션으로 처리하는 것

무결성

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

개체 무결성

기본키로 선택된 필드는 null 값을 허용하지 않는다.

어떠한 기본 키 값도 null 값이 될 수 없다.

why?

기본 키는 한 릴레이션 내의 각 tuple을 식별하는데 사용되기 때문에

기본 키 값이 null 값이 되면 tuple을 식별할 수 없기 때문

참조 무결성

두 릴레이션 사이에 명시되는 제약 조건

서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야 한다.

한 릴레이션에 있는 tuple이 다른 릴레이션에 있는 tuple을 참조하려면 반드시 참조되는 tuple이 그 릴레이션 내에 존재해야 한다.

* foregin key는 참조 무결성 제약 조건을 만족해야 한다.

고유 무결성

특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성 값은 모두 고유한 값을 가진다.

Null 무결성

특정 속성 값에 Null이 올 수 없다는 조건이 주어진 경우, 그 속성 값은 Null이 될 수 없다는 제약 조건.

데이터베이스의 종류

관계형 데이터베이스

행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스

SQL 언어를 써서 조작한다.

ex) MySQL, PostgreSQL, 오라클, SQL Server, MSSQL 등

MySQL

대부분의 운영체제와 호환되며 현재 가장 많이 사용하는 데이터베이스

대용량 데이터베이스를 위해 설계되어 있고, 롤백, 커밋, 이중 암호 지원 보안 등의 기능을 제공한다.

쿼리 캐시를 지원해서 입력된 쿼리 문에 대한 전체 결과 집합을 저장하기 때문에 사용자가 작성한 쿼리가 캐시에 있는 쿼리와 동일하면 서버는 단순히 구문 분석, 최적화 및 실행을 건너뛰고 캐시의 출력만 표시한다.

PostgreSQL

MySQL 다음으로 개발자들이 선호하는 데이터베이스 기술

디스크 조각이 차지하는 영역을 회수할 수 있는 장치인 VACUUM이 특징

최대 테이블의 크기는 32TB이며, SQL 뿐만 아니라 JSON을 이용해 데이터에 접근할 수 있다.

NoSQL 데이터베이스

Not only SQL

SQL을 사용하지 않는 데이터베이스

MongoDB

JSON을 통해 데이터에 접근할 수 있고, Binary JSON 형태(BSON)로 데이터가 저장되며

wired Tiger 엔진이 기본 스토리지 엔진으로 장착된 key-value 데이터 모델에서 확장된 document 기반의 데이터베이스

확장성이 뛰어나며, 빅데이터를 저장할 때 성능이 좋다.

고가용성과 샤딩, 레플리카셋을 지원한다.

스키마를 정해 놓지 않고 데이터를 삽입할 수 있기 때문에 다양한 데이터베이스를 기반으로 분석하거나 로깅 등을 구현할 때 강점을 보인다.

document를 생성할 때마다 다른 컬렉션에서 중복된 값을 지니기 힘든 unique한 값이 ObjectID가 생성된다. 이를 기본키로 한다.(유닉스 시간 기반의 타임스탬프 4byte, 랜덤 값 5byte, 카운터 3byte)

redis

인메모리 데이터베이스이자 key-value 데이터 모델 기반의 데이터베이스

기본적인 데이터 타입은 문자열이며, 최대 512MB까지 저장 가능하다. (set, hash 등을 지원)

pub/sub 기능을 통해 채팅 시스템, 다른 테이터베이스 앞단에 두어 사용하는 캐싱 계층, 단순한 key-value가 필요한 세션 정보 관리, sorted set 자료 구조를 이용한 실시간 순위표 서비스에 사용한다.

 

 

728x90