T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/데이터베이스 DB

DB 입문, 데이터베이스 기초

Tonny Kang 2024. 10. 12. 17:30
반응형

DBMS - 데이터베이스 관리 시스템


DB에 접근하고, DB에 데이터를 저장하며, DB에서 원하는 정보를 검색하고 DB를 관리하는 프로그램

 
SQL(Structured Query Language)을 사용함
데이터베이스에 대한 모든 접근은 DBMS에 의해 중앙 집중식으로 관리됨

 
반드시 갖춰야 할 특성:
 
편리성

  • 복잡성 관리의 핵심은 추상화 (Abstraction)
  • 프로그래머는 데이터가 어떻게 구조화되고 저장되는지 걱정할 필요가 없음

효율성
수백만 개의 레코드 중 하나의 레코드에 반복적으로 접근해야 할 경우, 인덱스가 유용함

  • 원자성과 ACID
  • 동시성 제어 및 잠금

예)
테이블을 조인하기 전에 "물리학" 전공 교수만 남기는 것이 테이블을 조인한 후 "물리학" 교수를 찾는 것보다 훨씬 효율적임
 
안전성

  • 트랜잭션 및 충돌 복구
  • 인증

만약 DBMS가 없다면?

데이터는 많은 프로그램에서 사용되는 여러 다른 파일에 수집될 것임
→ 각 프로그램이 자체 파일 시스템을 처리함

  • 데이터 중복: 동일한 정보가 여러 파일에 중복될 수 있음
  • 불일치: 변경된 정보가 다른 곳에 반영되지 않을 수 있음
반응형

데이터 모델


관계형 데이터 모델

  • 데이터는 테이블에 저장됨

→ 테이블은 관계(relations)라고 불리며, 각 인스턴스와 테이블 간의 관계가 있음

스키마 Schema

  • 데이터 컬렉션에 대한 설명

예)
테이블의 데이터 유형, 열 이름

Table(columnName: dataType, columnName: dataType, ..... columnName: dataType)

데이터 추상화


물리적 수준  Physical Layer

  • 가장 낮은 수준의 데이터 추상화
  • 데이터가 실제로 어떻게 저장되는지

논리적 수준 Logical Layer

  • 어떤 데이터가 저장되는지
  • 그들 사이에 어떤 관계가 존재하는지

알 필요가 없는 것:

  • 데이터가 어떤 디스크에 저장되는지
  • 데이터가 인덱싱되어 있는지

→ 물리적 데이터 독립성 → 추상화!

뷰 수준 View Layer

  • 다양한 애플리케이션을 위해 여러 뷰가 존재할 수 있음, 전체 DB의 일부만

고려할 필요가 없는 것:

  • 애플리케이션을 다시 작성하지 않고 새 항목을 어떻게 추가하는지

→ 논리적 데이터 독립성


Q. DB 애플리케이션이 많은 사용자를 서비스할 때의 과제는 무엇인가?


  1. 보안
    • 다양한 사용자에 대한 다른 역할과 권한 부여
  2. 성능
    • 동시 접근을 제공해야 함
    • → 유일한 사용자인 경우에만 허용되어야 함
  3. 일관성
    • 동시성으로 인해 일관성 문제가 발생할 수 있음

트랜잭션 (Transactions)


DB 동작(읽기/쓰기)의 원자적 시퀀스

 
원자성(Atomicy): 더 이상 분할할 수 없음, 전체적으로 완료되거나 전혀 실행되지 않음
→ 트랜잭션이 취소되면 아무 일도 없었던 것처럼 되어야 함
어떻게?
→ 선행 기록(Write-ahead Logging, WAL)

  • 모든 동작이 완료되기 전에 해당 로그 항목이 디스크에 강제로 기록됨
  • 충돌 후, 부분적으로 실행된 트랜잭션은 로그를 사용하여 취소됨

데이터 무결성


데이터의 전반적인 정확성, 완전성 및 일관성

 
사용자는 트랜잭션 실행 전후에 일관된 상태를 요구할 수 있음
일관성: 트랜잭션을 포함한 모든 동작은 모든 무결성 제약 조건을 준수하는 상태로 이어져야 함

728x90

Concurrency 및 Locking


DBMS는 동시 트랜잭션의 실행이 일련의 실행과 동등하도록 보장함

 
Serializability → 트랜잭션 집합이 격리되어 있으며, 그 효과는 모두 순차적으로 실행된 것과 같음
어떻게?
→ Locking

  • 한 번에 한 승자만 잠금을 얻음
  • 패자는 차단(대기)되어 승자가 끝날 때까지 기다림

→ 이것 없이는 교착 상태가 발생할 수 있음

DB 시스템의 역사


1960~70년대


네비게이션 데이터베이스 (Charles Bachman)

  • 사용자가 레코드 간 포인터를 사용하여 관계를 암시
  • 구현하기 너무 어려움

→ 관계형 모델 (Ted Codd)

  • 데이터를 관계의 집합으로 구성

1970~80년대


System R 팀 (IBM)

  • 쿼리 최적화
  • SQL

1990년대


  • 월드 와이드 웹의 폭발적 성장

→ 확장성이 중요한 이슈가 됨

2000년대


  • 데이터베이스 시스템에 저장되는 데이터 유형이 진화
  • 반구조화 데이터가 점점 더 중요해짐 (XML, JSON 등)

→ NoSQL

반응형