junome

데이터베이스의 개념 및 특징

데이터베이스의 개념 및 특징

DB는 "공유되는 데이터의 집합"이며, 그 데이터는 "지속적으로 저장"되고 "의미와 제약을 포함"하며 효율적 질의와 안전한 동시 접근을 지원한다

이때의 핵심은 데이터가 아니라 공유,의미,제약,지속성,접근 메커니즘이 핵심입니다.

  • 공유: 여러 사용자/프로그램이 동시에 사용
  • 의미: 단순 문자열이 아니라 "주문, 고객, 재고" 같은 현실 세계 개념의 표현
  • 제약: "이 값은 음수가 될 수 없다", "주문은 반드시 고객을 가진다" 같은 규칙을 부여하는 것
  • 지속성: 메모리가 아니라 장애 이후에도 남아야 함
  • 접근 메커니즘: 임의 파일이 아니라 질의어(SQL) + 최적화 + 트랜잭션 같은 운영 체계가 붙음

DB는 데이터를 잘저장하기 위해서 있는게 아니라 데이터가 신뢰가 가능하도록 운영하는 것이 본질입니다. -> 지금까지 데이터가 보존을 목표로 쓰는 줄 알았는데 해당 데이터의 신뢰를 부여한다는 사실을 항상 명심하면서 쿼리를 짜는 개발자가 되어야겠다.

스키마 아키텍처(ANSI/SPARC)

스키마를 3층으로 분해야한다. 이게 데이터 독립성의 뼈대입니다.

외부 스키마 (View Level)

  • 사용자/애플리이션 관점의 데이터 모습
  • 보안/단순화/호환성을 위해 보이는 형태를 정의

개념 스키마 (Logical Level)

  • 조직 전체의 진짜 의미를 담고 있는 모델
  • 엔티티/관계/제약의 중심(고객-주문-제품 같은 ER 모델)
  • "현실 세계 규칙을 데이터로 번역하는 계층"

내부 스키마 (Physical Level)

  • 실제 디스크에 어떻게 저장하는가(인덱스, 페이지, 압축, 파티션)
  • 튜닝/운영/복구의 영역
  • DBA가 다루는 영역임

데이터 독립성

  • 물리적 독립성: 인덱스 추가/변경, 파티션 변경해도 앱이 안 깨짐
  • 논리적 독립성: 테이블 구조가 일부 바뀌어도 뷰/추상화로 앱 영향 최소화

DB의 가치는 데이터가 아니라 변경을 흡수하는 추상화 계층에서 나온다. 시스템은 변하지만, 앱은 덜 변하게 만드는 게 DB의 핵심 미덕입니다.

"데이터" VS "정보" VS "지식": DB는 어디까지 책임지나?

데이터: 관측값/기록 정보: 맥락을 가진 데이터 지식: 규칙/추론

DBMS는 어디까지 책임질까요?

  • 데이터의 저장/검색/정합성/동시성/복구를 책임
  • "정보/지식"은 보통 애플리케이션/분석 계층이 담당
  • 하지만 DB는 제약/트리거/뷰/권한으로 "일부 의미"를 직접 강제할 수 있음

즉 DB는 "의미를 완전히 이해"하진 않지만, 의미의 최소한을 제약으로 고정해서 "데이터가 정보로 기능할 바닥"을 만들어줍니다.

데이터베이스의 핵심 특징

(1) 구조화 + 스키마 기반

  • 관계형 DB는 스키마로 형태를 강제
  • 장점: 쿼리/검증/최적화 가능
  • 단점: 유연성은 NoSQL보다 낮을 수 있음

(2) 무결성 - "정합성은 선택이 아니라 계약"

무결성은 "좋으면 하는 것"이 아니라 데이터베이스가 제공하는 계약입니다.

  • 도메인 무결성: 타입/범위/형식
  • 엔티티 무결성: PK는 유일, NOT NULL
  • 참조 무결성: FK로 관계 강제 (고아 레코드 방지)

DBA 관점 포인트:

  • 무결성은 코드로도 가능하지만, DB 제약이 최후의 방어선 이다.
  • 애플리케이션 버그가 나도 DB가 막아줘야 운영에 문제가 없다.

(3) 최소 중복 & 정규화 기반 설계 중복은 성능을 위해 일부 허용될 수 있지만, 기본 설계 철학은 중복으로 인한 갱신 이상을 제거하는 방향입니다.

(4) 공유와 동시성

  • 동시에 여러 사용자가 읽고/쓰는 순간, 문제는 저장이 아니라 경쟁이됩니다.
    • DB는 경쟁을 일관성 있는 결과로 정하는 시스템입니다.

(5) 트랜잭션 - "업무 단위의 원자성"

  • 트랜잭션은 단순히 COMMIT/ROLLBACK이 아니라, "현실 업무 단위"가 부분 실패로 찢어지지 않게 하는 장치입니다.

(6) 격리 - "동시 실행을 순차 실행처럼 보이게"

  • 완벽한 격리는 성능 비용이 큽니다. 그래서 DB는 격리수준이라는 타협점을 제공합니다.
  • 격리수준은 "정확성 vs 처리량"의 스펙트럼
  • DBA는 업무 특성에 맞춰 균형을 잡습니다.

(7) 영속성 + 복구

  • DB는 디스크에 "쓰기"만 하면 끝이 아니라, 장애 이후에도 커밋이 보존되어야 합니다. 여기서 등장한 개념이 로그 기반 복구
  • WAL(로그 기반 복구)는 데이터 페이지보다 로그가 먼저 안전하게 기록되어야 한다는 원칙입니다.
  • 이때 커밋했다는 말은 사실상 로그가 안전하게 기록되었다는 뜻에 가깝습니다.

(8) 보안 + 감사

  • DB는 조직의 핵심 자산으로 인증/인가와 감사 로그(누가 무엇을 조회/변경했는가)가 매우 중요합니다.

DBMS는 "무슨 기계"인가?

  • DB를 이해하려면 DBMS를 구성요소의 협업으로 봐야 합니다.

질의 처리기라고 영어로는 Query Processor의 순서를 설명드리면

SQL 파싱 -> 의미 분석 -> 실행계획 생성(Optimizer) -> 실행(Executor)

이때 가장 중요한 개념은 Optimizer입니다.

  • 같은 SQL도 실행계획이 다르면 성능이 100배 차이 나기도하기 때문입니다.
  • 통계/인덱스/분포를 바탕으로 비용 기반 최적화

Storage Manager (저장 관리자)

  • 페이지/버퍼캐시 관리
  • 인덱스
  • 파일/테이블스페이스
  • 압축, 파티셔닝이 있습니다.

Transaction Manager

  • 락/MVCC
  • 격리수준
  • 데드락 감지/해결

Recovery Manager

  • 로그(WAL)
  • 체크포인트
  • 장애 복구(REDO/UNDO 계열 메커니즘)

결론: DB는 "테이블 모음"이 아니라 SQL을 받아서 가장 빠른 실행계획으로, 동시성과 복구를 보장하며, 디스크/메모리를 관리하는 엔진입니다.

번외

데이터 베이스의 철학?

SQL의 가장 큰 특징은 선언적이라는 것이다. 사용자는 **"무엇을 원한다(What)"**를 말하고 DBMS는 "어떻게(How)" 할지를 결정합니다. 이게 중요한 이유는 앱개발자는 비지니스 로직에 집중하고 DBA는 How를 인덱스/통계/스키마로 통제합니다. 결과적으로 이는 시스템의 장기 유지보수성이 증가합니다.

결과적으로 쉽게 생각하면 FE 개발자는 DBA에게 나 리스트를 가져오는 쿼리가 필요해라고 하면 DBA는 어떻게 하면 해당 데이터를 가장 빨리 가져오는 법을 고민하고 데이터를 가장 빠른 속도로 가져가는 방법을 구현한다는 뜻입니다.

내가 오해했던 DB


Q: DB는 그냥 데이터 저장소다
A: 아니요. 동시성/복구/최적화/제약이 본질입니다.

Q: 제약은 호출하는 서버에서만 걸어 놓으면 된다.
A: 운영에서는 서버만을 믿기에는 항상 완벽하지 않습니다. 때문에 DB 제약은 최후의 방어선이여야합니다.

Q:인덱스만 잘 만들면 성능은 끝인가요?
A: 실행계획/통계/데이터 분포/조인 전략도 같이 움직여야합니다.

Q: 정규화는 무조건 좋은 것이다.
A: 정합성엔 좋지만, 조회 패턴/업무 요구에 따라 반정규화가 필요할 수 있습니다.

요약


[데이터베이스 개념 및 특징 요약]

데이터베이스(DB)는 공유되는 데이터의 집합이며, 단순히 데이터를 저장하는 공간이 아니라
데이터를 신뢰 가능하게 관리하고 운영하기 위한 시스템이다.

데이터베이스의 핵심 목적은 데이터를 안전하게 저장하고,
여러 사용자가 동시에 데이터를 사용하더라도 데이터의 정합성과 일관성을 유지하며,
필요한 정보를 빠르게 조회할 수 있도록 하는 것이다.

데이터베이스는 다음과 같은 핵심 요소를 가진다.

1. 공유
- 여러 사용자와 시스템이 동일한 데이터를 동시에 사용할 수 있다.
- 이를 통해 부서 간 동일한 기준 데이터 사용이 가능하다.

2. 의미
- 데이터는 단순 문자열이 아니라 고객, 주문, 생산, 검사 등
  현실 세계의 개념을 표현한다.

3. 제약
- 데이터 무결성을 유지하기 위해 다양한 규칙이 적용된다.
- 예: 음수 수량 금지, 주문은 반드시 고객을 참조해야 함.

4. 지속성
- 데이터는 메모리가 아니라 영구 저장소에 보관되며
  시스템 장애가 발생해도 데이터는 보존됩니다.

5. 접근 메커니즘
- SQL과 같은 질의 언어를 통해 데이터를 조회하며
  트랜잭션과 최적화 기능을 통해 안정성과 성능을 보장한다.

데이터베이스는 3계층 스키마 구조를 통해 데이터 독립성을 제공한다.

- 외부 스키마(View Level)
  → 사용자나 애플리케이션이 보는 데이터 구조

- 개념 스키마(Logical Level)
  → 조직 전체의 데이터 구조와 관계 정의

- 내부 스키마(Physical Level)
  → 실제 저장 방식과 성능 최적화 구조

데이터베이스의 주요 특징은 다음과 같다.

- 실시간 접근성
  → 필요한 정보를 즉시 조회 가능

- 계속적인 변화
  → 데이터는 지속적으로 삽입, 수정, 삭제됨

- 동시 공유
  → 여러 사용자가 동시에 데이터 사용 가능

- 내용 기반 참조
  → 데이터 저장 위치와 관계없이 조건으로 검색 가능

또한 데이터베이스는 트랜잭션과 동시성 제어를 통해
업무 단위의 안정성을 보장하며,
로그 기반 복구(WAL)를 통해 장애 발생 시에도 데이터를 보호한다.

결론적으로 데이터베이스는 단순한 저장 시스템이 아니라
데이터의 정합성, 안정성, 신뢰성을 보장하는 핵심 정보 관리 시스템이다.