데이터베이스의 정의 및 특징

데이터베이스는 체계적으로 정리된 데이터 모음으로, 여러 응용 시스템이 데이터에 효율적으로 접근하고 관리할 수 있도록 한다.

  • 일관성: 데이터가 잘못되거나 중복되지 않도록 보장한다.
  • 공유성: 여러 사용자가 동시에 데이터를 사용할 수 있다.
  • 무결성: 데이터의 정확성과 일관성을 유지하는 속성이다.
  • 보안성: 계정 및 권한 관리를 통해 인가된 사용자만 데이터에 접근할 수 있도록 보장한다.
  • 중복 최소화: 데이터를 중앙에서 관리하여 중복을 줄이고 저장공간을 절약한다.

무결성 제약

  • 개체 무결성: 기본 키는 NULL 값이 될 수 없다. 각 행은 유일해야 한다.
  • 참조 무결성: 외래 키는 참조되는 기본 키의 값을 유지해야 한다.
  • 도메인 무결성: 특정 속성의 값이 미리 정의된 도메인 내의 유효한 값만 가질 수 있다.
  • 고유 무결성: 특정 열의 값이 중복되지 않도록 보장하는 제약 조건이다.
  • NULL 무결성: 특정 열에 NULL 값이 포함될 수 없음을 명시하는 제약 조건이다.

데이터베이스 키의 개념

키의 종류

키 종류설명
기본 키(Primary Key)테이블의 각 레코드를 유일하게 식별하는 속성
외래 키(Foreign Key)다른 테이블의 기본 키를 참조하여 관계를 설정
후보 키(Candidate Key)기본 키가 될 수 있는 모든 속성
대체 키(Alternate Key)후보 키 중 기본 키로 선택되지 않은 키

인덱스와 성능 최적화

인덱스는 데이터베이스의 검색 성능을 향상시키기 위한 보조 구조로, 책의 목차와 같은 역할을 한다. 자주 조회되는 열에 설정하여 검색을 빠르게 수행할 수 있다. 단, 과도하게 사용하면 삽입/수정/삭제 시 성능 저하가 발생할 수 있다.

인덱스의 종류

  • B-Tree 인덱스: 관계형 데이터베이스에서 가장 많이 사용하는 구조. 검색, 삽입, 삭제 모두 효율적이다.
  • 해시 인덱스: 해시 함수를 사용하여 데이터를 특정 위치에 저장한다. 범위 검색에는 부적합하다.
  • GIN(Generalized Inverted Index): 주로 텍스트 검색에 사용되며, 복잡한 조건의 검색에 효율적이다.

인덱스 설정 시 주의사항

카디널리티(Cardinality)가 높은 열에 인덱스를 설정하면 검색 성능이 향상된다. 카디널리티는 전체 행 수 대비 고유한 값의 수를 나타내는 지표다. 데이터 중복도가 높은 열에 인덱스를 설정하면 오히려 성능 저하가 발생할 수 있다.

관계형 데이터베이스와 NoSQL 비교

관계형 데이터베이스(RDBMS)

  • 구조화된 데이터 관리: 정확한 스키마로 테이블 형식 저장, 테이블 간 관계 유지
  • ACID 특성: 원자성, 일관성, 격리성, 지속성을 보장
  • 사용 예시: 은행, ERP 시스템 등 데이터 정확성이 중요한 애플리케이션

NoSQL 데이터베이스

  • 유연한 스키마: 비정형 데이터와 대용량 데이터를 유연하게 처리
  • 수평 확장에 유리: 데이터를 여러 노드에 분산 저장
  • 사용 예시: 소셜 미디어, 로그 데이터, 실시간 빅데이터 분석

CAP 이론과 PACELC 이론

CAP 이론은 분산 시스템에서 일관성, 가용성, 분할 내성 중 두 가지 특성만 동시에 만족할 수 있다고 설명한다.

  • 일관성(Consistency): 모든 노드에서 동일한 시점에 동일한 데이터를 보여줌
  • 가용성(Availability): 시스템 일부에 장애가 발생해도 응답을 제공
  • 분할 내성(Partition Tolerance): 네트워크 일부가 단절되어도 시스템이 계속 동작

PACELC 이론은 CAP 이론을 보완한 것으로, 네트워크 장애 시 가용성과 일관성 간의 트레이드오프, 장애가 없을 때는 지연 시간(Latency)과 일관성 간의 균형을 설명한다.

트랜잭션과 ACID 특성

트랜잭션은 데이터베이스에서 데이터 상태를 변화시키는 하나의 논리적인 작업 단위다. 모든 작업이 성공적으로 완료되거나, 일부라도 실패하면 전체가 취소되어야 한다.

ACID 특성

특성설명
원자성(Atomicity)트랜잭션 내 모든 연산은 전부 실행되거나 전혀 실행되지 않아야 함
일관성(Consistency)트랜잭션 실행 후 데이터베이스는 항상 일관된 상태를 유지
격리성(Isolation)동시 실행되는 트랜잭션이 서로 간섭하지 않도록 독립적으로 수행
지속성(Durability)커밋된 트랜잭션은 시스템 오류가 발생해도 영구적으로 반영

트랜잭션 관리 예시

  • 은행 시스템: 계좌 이체 시 출금 후 입금이 실패하면 트랜잭션은 롤백되어 전체 작업이 취소된다.
  • 전자상거래: 주문 생성 시 재고 감소와 결제 처리가 모두 트랜잭션으로 묶여 하나라도 실패하면 전체가 롤백된다.