Post

Database 기초

Database

데이터베이스는 데이터 관리의 복잡성과 일관성, 무결성의 문제, 조회의 효율과 보안을 위해 등장한 데이터 관리 도구이다.

  • 무결성(Integrity)
    • 도메인 무결성 (Domain Integrity) 각 필드의 값이 정의된 도메인(유효한 값의 집합)에 속해야 한다.
    • 참조 무결성 (Referential Integrity) 외래 키를 통해 다른 테이블과 관계를 맺을 때, 참조 대상이 항상 존재해야 한다.
    • 엔터티 무결성 (Entity Integrity): 모든 테이블은 기본 키를 가지고, 이 기본 키는 고유한 값을 가져야 한다.


정규화

데이터베이스 설계에서 중복을 최소화하고 데이터를 구조화하는 과정으로 데이터의 무결성과 일관성을 유지하고 쿼리 성능을 향상시키기 위해 진행한다.

  • 단계
    1. 제1정규형: 모든 컬럼이 원자 값(Atomic Value)을 가져야 하며, 각 레코드는 유일한 키에 의해 식별
    2. 제2정규형: 제1정규형을 만족하고, 부분 함수 종속성(Partial Functional Dependency)을 제거
    3. 제3정규형: 제2정규형을 만족하고, 이행 함수 종속성(Transitive Functional Dependency)을 제거
    4. BCNF(Boyce-Codd Normal Form): 제3정규형을 만족하고, 모든 결정자가 후보 키(Candidate Key) 집합에 포함

쿼리 성능 향상, 데이터 조회 속도 향상, 복잡성 감소 목적으로 중복을 일부러 허용하는 작업을 반정규화(Denormalization)라고 한다.

중복으로 인해 발생하는 이상(Anomaly)의 종류

  • 삽입 이상: 새로운 데이터 입력 시 불필요한 데이터가 함께 삽입되는 이상
  • 삭제 이상: 데이터 삭제 시 의도치 않은 데이터가 함께 삭제되는 이상
  • 갱신 이상: 데이터 갱신 시 중복된 데이터로 인해 일관성으로 저해되는 이상


트랜잭션(Transaction)

데이터베이스에서 하나의 논리적인 작업 단위

  • ACID 속성
    • Atomicity: 트랜잭션 내의 모든 연산은 모두 성공하거나, 하나라도 실패하면 모든 연산이 취소되어야 한다.
    • Consistency: 트랜잭션이 성공적으로 완료된 후에도 데이터베이스는 일관된 상태를 유지해야 한다.
    • Isolation: 동시에 여러 트랜잭션이 실행되더라도, 각 트랜잭션은 서로에게 영향을 주지 않아야 한다.
    • Durability: 트랜잭션이 성공적으로 완료된 후, 그 결과는 영구적으로 반영되어야 한다.
  • 트랜잭션 상태
    • Active: 트랜잭션이 실행 중인 상태
    • Partially Committed: 트랜잭션의 마지막 연산까지 성공적으로 수행되었지만, 아직 커밋되지 않은 상태
    • Committed: 트랜잭션이 성공적으로 커밋된 상태
    • Failed: 트랜잭션 중 하나 이상의 연산이 실패하여 롤백이 필요한 상태
    • Aborted: 트랜잭션이 실패하여 롤백된 상태
  • 격리 수준(Isolation Levels)
    • Read Uncommitted: 가장 낮은 수준의 격리로, 다른 트랜잭션에서 커밋되지 않은 데이터 조회 가능
    • Read Committed: 커밋된 데이터만 읽을 수 있으며, 다른 트랜잭션에서 변경 중인 데이터 조회 불가
    • Repeatable Read: 트랜잭션 동안 같은 쿼리의 결과가 항상 동일하게 유지되며 새로운 레코드의 삽입 허용
    • Serializable: 가장 높은 수준의 격리로, 트랜잭션을 순차적으로 실행하여 완전한 격리를 보장
  • 락(Lock)
    • 공유 락: 여러 트랜잭션이 동시에 데이터를 조회하도록 허용
    • 배타 락: 여러 트랜잭션이 동시에 데이터를 조회할 수 없음


인덱스(Index)

데이터베이스에서 데이터 검색 속도를 향상시키기 위한 자료 구조

인덱스의 대표적인 자료구조로는 해시와 B트리가 있다. 해시는 범위 검색이나 정렬에 비효율적이므로 RDBMS에서는 일반적으로 B트리 구조를 따르고 NoSQL에서는 해시를 사용한다.


NoSQL(Not only SQL)

대규모 데이터와 분산된 환경에 적합하며, 스키마가 고정되지 않은 유연한 데이터 모델을 가지는 데이터베이스

  • CAP 이론: 분산 시스템은 다음 세가지 속성 중 두가지만 충족 가능하다.
    • 일관성(Consistency): 모든 노드가 일관된 데이터를 저장
    • 가용성(Availability): 모든 요청이 처리 가능
    • 분할 내성(Partition Tolerance): 네트워크 분할이 발생해도 시스템이 정상 작동
  • BASE 속성: CAP 이론의 제약을 완화하고 더 유연한 동작을 위한 속성
    • 기본적으로 일관성 있음(Basically Available): 시스템은 기본적으로 가용
    • 부분적으로 허용(Soft state): 시스템의 상태는 시간과 상황에 따라 변함
    • 최종적으로 일관성 있음(Eventually Consistent): 시간이 지나면 모든 노드가 일관된 상태가 됨
This post is licensed under CC BY 4.0 by the author.