\(@^0^@)/

[BOOK] 트랜잭션과 무결성, 데이터베이스의 종류 본문

BOOKS/면접을 위한 CS 전공지식 노트

[BOOK] 트랜잭션과 무결성, 데이터베이스의 종류

minjuuu 2023. 5. 10. 20:19
728x90
  • 트랜잭션
    • 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
    • 여러 개의 쿼리들을 하나로 묶는 단위
    • ACID 특징을 (원자성, 일관성, 독립성, 지속성) 갖는다
  • 원자성(atomicity)
    • 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장한다
    • ex) 트랜잭션을 커밋했는데, 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것
    • 커밋(commit)과 롤백
      • 커밋 : 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
        트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것
        "하나의 트랜잭션이 성공적으로 수행되었다"라고도 말할 수 있다.
        • update, insert, delete의 쿼리가 하나의 트랜잭션 단위로 수행되고 이후에 데이터베이스에 영구 저장된다.
      • 롤백 : 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일(취소)을 말한다.
      • 커밋과 롤백 덕에 데이터의 무결성이 보장된다.
      • 데이터 변경 전에 변경 사항을 쉽게 확인할 수 있고 해당 작업을 그룹화할 수 있다.
    • 트랜잭션 전파
      • 트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 한다.
      • 하지만, 이게 매번 넘기기가 귀찮고 어려워서 넘겨서 수행하지 않고
        여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것
  • 일관성(consistency)
    • '허용된 방식'으로만 데이터를 변경해야 하는 것
    • 데이터베이스에 기록된 모든 데이터는 여러 가지 조건, 규칙에 따라 유효함을 가져야 한다.
    • ex) a가 100만 원이 있고, b가 0원이 있을 경우 b는 c에게 50만 원을 입금하지 못한다.
      (0원으로부터 50만 원이 나오는 것은 불가하기 때문)
  • 격리성(isloation)
    • 트랜잭션 수행 시 서로 끼어들지 못하는 것
    • 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고,
      데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.
    • 여러 개의 격리 수준으로 나뉘어 격리성을 보장한다.
    • 위로 갈수록 동시성이 강해지지만 격리성은 약해지고, 아래로 갈수록 동시성은 약해지고 격리성은 강해진다.

 

  • 격리 수준에 따라 발생하는 현상
    • 팬텀 리드(phantom read)
      • 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우
    • 반복 가능하지 않은 조회(non-repeatable read)
      • 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우
    • 더티 리드(dirty read)
      • 반복 가능하지 않은 조회와 유사하며 한 트랜잭션이 실행 중일 때
        다른 트랜잭션에 의해 수정되었지만 아직 '커밋되지 않은'행의 데이터를 읽을 수 있을 때 발생
  • 격리 수준
    • Serializable
      • 트랜잭션을 순차적으로 진행시키는 것
    • Repeatable_read
      • 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않는다. 따라서 이후에 추가된 행이 발견될 수 도 있다.
    • Read_committed
      • 가장 많이 사용되는 격리 수준
      • 다른 트랜잭션이 커밋하지 않은 정보를 읽을 수 없다.
      • 즉, 커밋 완료된 데이터에 대해서만 조회를 허용한다.
    • Read_uncommitted
      • 가장 낮은 격리 수준
      • 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠르다.
      • 데이터 무결성을 위해 사용하지 않는 것이 좋지만,
        거대한 양의 데이터를 '어림잡아' 집계하는 데는 사용하면 좋다.
  • 지속성(durability)
    • 성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다
    • 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 한다.

 

  • 무결성
    • 데이터의 정확성, 일관성, 유효성을 유지하는 것
    • 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과
      그 값에 해당하는 현실 세계의 실제 값이 일치하는지에 대한 신뢰가 생긴다.
    • 개체 무결성
      • 기본키로 선택된 필드는 빈 값을 허용하지 않는다
    • 참조 무결성
      • 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야 한다
    • 고유 무결성
      • 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값을 가진다
    • NULL 무결성
      • 특정 속성 값에 NULL이 올 수 없다는 조건이 주어진 경우 그 속성 값은 NULL이 될 수 없다는 제약 조건

  • 관계형 데이터베이스(RDBMS)
    • 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리키며 SQL이라는 언어를 써서 조작한다.
    • MySQL, PostgreSQL, 오라클, SQL Server, MSSQL 등이 있다.
    • 관계형 데이터베이스의 경우 표준 SQL을 지키기는 하지만, 각각의 제품에 특화시킨 SQL을 사용한다.
    • MySQL
      • 대부분의 운영체제와 호환된다
      • 현재 가장 많이 사용하는 데이터베이스
      • 메타, 트위터 등 많은 기업에서 사용한다.
      • C, C++로 만들어졌다.
      • 대용량 데이터베이스를 위해 설계되어 있고 롤백, 커밋, 이중 암호 지원 보안 등의 기능을 제공한다.

 

  • NoSQL 데이터베이스(Not only SQL)
    • SQL을 사용하지 않는 데이터베이스
    • MongoDB와 redis 등이 있다
    • MongoDB
      • JSON을 통해 데이터에 접근할 수 있다.
      • Binary JSON 형태(BSON)로 데이터가 저장된다.
      • 키-값 데이터 모델에서 확장된 도큐먼트 기반의 데이터베이스.
      • 스키마를 정해 놓지 않고 데이터를 삽입할 수 있기 때문에
        다양한 도메인의 데이터베이스를 기반으로 분석하거나 로깅 등을 구현할 때 강점을 보인다.
      • 도큐먼트를 생성할 때마다 다른 컬렉션에서 중복된 값을 지니기 힘든 유니크한 값인 ObjectID가 생성된다.

출처 : 면접을 위한 CS 전공지식 노트

728x90