[CS] 데이터베이스의 큰 그림

눈치없어·2025년 3월 31일

데이터베이스 배경지식
데이터베이스와 데이터베이스 관리 체계인 DBMS


데이터베이스와 DBMS

데이터베이스: 원하는 기능을 동작시키기 위해 마땅히 저장해야 하는 정보의 집합
사전적 정의는 '여러 사람이 공유하여 사용할 목적으로 체계화를 통합, 관리하는 데이터의 집합'

DBMS(데이터베이스 관리 시스템): 데이터베이스를 제대로 관리하기 위한 수단
즉 데이터베이스를 관리하기 위한 프로그램이라고 생각하면 됨

DBMS의 종류

DBMS는 크게 두 유형으로 구분됨

  • 관계형 데이터베이스 관리 시스템(RDBMS or 관계형 데이터베이스)
    - MySQL, Oracle, PostgreSQL, SQLite, MariaDB, Microsft SQL Server 등
  • NoSQL 데이터베이스 관리 시스템(NoSQL DBMS or NoSQL 데이터베이스
    - MongoDB, Redis 등

DBMS 점유율을 살펴보면 수많은 개발자들이 주로 사용하고 있는 데이터베이스로 RDBMS를 답변
점유율이 가장 높은 RDBMS는 사실상 MySQL
(점유율만 놓고 보면 Oracle인데, 이건 기업 규모나 레거시 시스템까지 포함한 '전체 시장 점유율')
포스팅 내용에 대한 데이터베이스는 MySQL(버전8.0)을 위주로 학습 예정


서버로서의 DBMS

DBMS는 여느 응용 프로그램과 다를 바 없는 응용 프로그램
다만, DBMS는 사용자와 직접적으로 상호작용하기보다는 사용자(개발자)가 만든 프로그램과 상호작용하며 실행됨

응용 프로그램이 DBMS를 이용하는 과정은 클라이언트-서버 간의 동작과 유사함
DBMS 클라이언트는 DBMS에 쿼리를 보냄
이를 위해 DBMS는 데이터베이스를 다루기 위한(데이터베이스 언어) 언어를 제공

대표적인 데이터베이스 언어인 SQL은 RDBMS에서 데이터를 조작하고 관리하기 위한 언어로,
이름 그대로 데이터베이스에 질의(Query)하기 위한 구조화된 언어를 말함

📌 SQL 대분류

  • 데이터 정의를 위한 DDL
  • 데이터 조작을 위한 DML
  • 데이터 제어를 위한 DCL
  • 트랜잭션을 제어하기 위한 TCL
> TCL을 제외하고 DDL, DML, DCL 세 종류로 구분하는 경우도 있음


파일 대신 데이터베이스를 이용하는 이유

1️⃣ 데이터 일관성 및 무결성 제공이 어려움

  • 레이스 컨디션 문제가 발생할 여지가 있음. 이로 인해 데이터의 일관성이 훼손되기가 쉬움
  • 개발자가 파일에 명시된 데이터에 결함이 없음을(무결함을) 일일이 검사하기 번거로움

2️⃣ 불필요한 중복 저장이 많아짐

  • 다량의 데이터 관리에 있어 불필요한 중복 저장은 자칫 스노우볼이 되어 큰 저장 공간 낭비로 이어짐
  • 파일로 다량의 데이터를 관리할 경우, 불필요한 중복 저장이 발생하기가 쉬움

3️⃣ 데이터 변경 시 연관 데이터 변경이 어려움

  • 데이터가 중복되어 여러 곳에 저장되면, 하나의 값을 수정할 때 모든 관련 데이터를 일일이 찾아 변경해야 함
  • 이 과정에서 수정 누락이나 불일치가 발생할 수 있음

4️⃣ 정교한 검색이 어려움

  • 파일에서도 데이터 검색은 가능하지만, 많은 경우 파일 내 문자열 검색에 국한되는 경우가 많음

5️⃣ 백업 및 복구가 어려움

  • 단순 파일 입출력에서는 여러한 기능을 애초에 제공하지 않거나 데이터베이스에 비해 부족한 수준으로 지원


데이터베이스의 저장 단위와 트랜잭션

데이터베이스 학습을 시작하려면 데이터베이스에 무엇이 어떻게 저장되는지, 데이터베이스의 연산에는 어떤 성질이 있는지 이해해야함

데이터베이스의 저장 단위

데이터베이스에는 다양한 속성을 가진 독립적 객체들이 저장될 수 있음

엔티티(Entity): 독립적으로 존재할 수 있는 객체
DB에 저장되면 레코드(record) 또는 도큐먼트(document)라고 부름

'어떠한 특성을 가진 대상'이라고 할 수 있다면 모두 엔티티라고 볼 수 있음

이미지 속 하나 하나의 대상이 모두 데이터베이스에 저장 가능한 엔티티인 셈

속성: 엔티티의 특성을 의미
위 이미지에 구매자 ID, 구매자의 이름과 성별, 제품 번호와 이름이 바로 각 엔티티의 속성

각각의 엔티티는 속성을 강조하여 표기할 수 있음
1. 구매자 ID 속성 = 123, 구매자 이름 속성 = "김한빛", 구매자 성별 속성 = 남자
2. 구매자 ID 속성 = 321, 구매자 이름 속성 = "김빛한", 구매자 성별 속성 = 여자
3. 제품 번호 속성 = abc123, 제품 이름 속성 = "혼공 노트북"
4. 제품 번호 속성 = def321, 제품 이름 속성 = "이것이 키보드"

이때 같은 속성을 공유하는 개별 엔티티는 같은 엔티티 집함(Entity Set)에 속한다고 할 수 있음
12구매자라는 엔티티 집합으로 표현할 수 있고,
34제품이라는 엔티티 집합으로 표현할 수 있음


📌 DBMS 엔티티 집합 표현

구분RDBMS (예: MySQL, PostgreSQL)NoSQL - MongoDB
엔티티 집합테이블(Table) 또는 릴레이션(Relation)컬렉션(Collection)
개별 엔티티레코드(Record) = 테이블의 행(Row)도큐먼트(Document) = JSON 객체
속성필드(Field) = 열(Column)필드(Field) = JSON의 키(Key)

필드의 수는 차수(degree)라고도 부름. 그리고 한 필드에 대한 고유 값의 수는 카디날리티(cardinality)라고 부름. 즉 카디날리티가 낮을수록 중복된 속성이 많음을 의미함


스키마

RDBMS와 NoSQL을 구분하는 주요 기준 중 하나로 스키마의 유무를 꼽을 수 있음

스키마(schema): 데이터베이스에 저장되는 레코드의 구조와 제약 조건을 정의한 것으로, 레코드가 지켜야 할 틀이자 청사진이라고 볼 수 있음

RDBMS에서는 레코드를 테이블 내 행으로 저장하고, NoSQL의 일종인 MongoDB에서는 컬렉션 내 도큐먼트로 저장한다고 했음
따라서 RDBMS에서는 명확한 스키마가 정의되며, 레코드들은 이 스키마로 정해진 테이블의 구조, 필드의 데이터 타입 및 제약 조건을 따라야함

이 테이블의 구조와 각 필드의 데이터 타입, 제약 조건 등이 정의된 틀이 바로 스키마


반면 NoSQL에서는 명확한 스키마가 정의되지 않기 때문에 NoSQL 데이터베이스를 스키마-리스 데이터베이스라고도 부름
레코드들이 지켜야 할 구조와 제약 조건에 제한이 없어 RDBMS보다 자유로운 형태의 레코드를 저장할 수 있음


트랜잭션 / ACID

트랜잭션: 데이터베이스와의 논리적 상호작용의 단위를 의미
데이터베이스가 처리하는 작업의 단위를 나타내므로 초당 트랜잭션이라는 지표로 데이트베이스의 작업 성능을 나타내기도 함

데이터베이스는 한 명의 사용자나 하나의 프로그램만 데이터베이스를 사용하는 경우가 거의 없음
여러 사용자/프로그램이 동시다발적으로 사용하는 것이 일반적. 따라서 여러 작업을 내포하는 트랜잭션이 동시다발적으로 실행될 때는 안전한 트랜잭션을 보장하기 위해 지켜야 하는 성질이 있음
ACID: 원자성, 일관성, 격리성, 지속성의 줄임말.

1️⃣ 원자성
하나의 트랜잭션 결과가 모두 성공하거나 모두 실패하는 성질의 의미

  • 계좌의 잔액을 5000원 증가시키는 작업이 실행되는 도중 DBMS가 다운되었다면
  • 계좌의 잔액을 5000원 감소시켰던 작업도 취소되어야 함
  • 원자성은 이렇게 트랜잭션이 하나의 단위로 처리되는 것
  • 원자성을 상징하는 말로 All or Nothing을 들기도 함
    -주어진 작업을 모두 성공하거나 모두 실패할 뿐, 일부 성공이나 일부 실패는 허용하지 않는다는 의미

또 원자성을 트랜잭션이 반드시 커밋되거나 롤백되는 성질이라고도 표현

  • 커밋: 트랜잭션을 성공적으로 수행하여 트랜잭션을 종료하는 것을 의미
  • 롤백: 이전 트랜잭션을 취소하는 작업을 의미
    데이터베이스를 롤백하면 트랜잭션이 이루어지기 전으로 되돌릴 수 있음


2️⃣ 일관성
트랜잭션 전후로 데이터베이스가 일관된 상태를 유지하는 성질

일관된 상태: 데이터베이스가 지켜야 하는 일련의 규칙들을 지키는 상태를 의미

데이터베이스가 트랜잭션 이후 다음과 같이 새로운 일관된 상태로 전이될 수 있다는 것
이 경우에도 저장된 데이터들은 모두 일관된 상태를 유지해야 함


3️⃣ 격리성
동시에 수행되는 여러 트랜잭션이 서로 간섭하지 않도록 보장하는 성질(레이스 컨디션을 방지하는 성질)
즉, 한 트랜잭션이 어떤 데이터의 접근하여 조작 중일때는 다른 트랜잭션이 접근할 수 없음

  • 예를 들어 현재고가 하나뿐인 상품을 두 명의 사용자가 동시에 구매하려고 시도하는 상황을 가정
  • 격리성이 보장되지 않을 경우, 두 트랜잭션이 동시에 재고를 확인하고, 각자 재고 있다고 판단하여 결제를 시도
  • 최종적으로는 재고 부족 문제가 발생할 수 있음

하지만 격리성이 보장된다면 두 트랜잭션이 수행되지 않으므로 이러한 문제를 방지할 수 있음


4️⃣ 지속성
트랜잭션이 성공적으로 완료된 후에 그 결과가 영구적으로 반영되는 성질을 의미
특, 시스템 장애가 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않아야 함

예를 들어 은행에서 특정 계좌에 돈을 입금하는 트랜잭션이 성공적으로 완료되었다면 그 결과가 디스크에 기록되어 시스템 장애가 발생하더라도 입금 내역이 사라지지 않아야 함

현대 DBMS에는 대부분 이를 보장하기 위하 회복 매커니즘이 구현되어 있음


트랜잭션이라는 범용적 용어
트랜잭션이라는 용어나 TPS라는 지표는 주로 데이터베이스에서 언급되는 용어이기는 하나, 데이터베이스에서만 사용되는 용어가 아닌 다른 하드웨어 부품에서 사용되거나 전자상거래의 거래 단위로 사용되기 함


이 후 학습 예정 내용




참고: 북스터디 - 이것이 취업을 위한 컴퓨터 과학이다 (Chapter 6-1)

profile
dock 사이즈 다르잖아

0개의 댓글