[F-Lab 모각코 챌린지] 15일차 - Database 기본 개념과 설명

F-Lab 모각코 챌린지 15일차를 진행하며 Database 에 대해 정리한 내용입니다. Database 의 종류, RDBMS 의 용어와 개념 설명, 인덱스의 종류와 간단한 설명을 기록하였습니다

[F-Lab 모각코 챌린지] 15일차 - Database 기본 개념과 설명

Database

기본 개념

Database 는 구조화 된 데이터의 모음을 저장, 관리, 조작 하기 위한 시스템

여러 사용자나 응용 프로그램이 동시에 접근하고 데이터를 공유하며 데이터의 정확성과 일관성을 보장하기 위해 설계되어 있다

역할

  • 데이터의 조작 및 검색
  • 무결성 유지
  • 백업 및 복구
  • 동시 엑세스 제어
  • 데이터 보안
  • 관계 관리

종류

관계형 데이터베이스(RDBMS: Relational Database Management System)

  • 테이블의 형태로 데이터를 생성, 조회, 수정, 관리할 수 있는 시스템
  • 테이블은 행과 열로 구성, 각 테이블은 서로 연관될 수 있음
  • SQL 을 사용하여 데이터를 쿼리하고 관리
  • ex) Oracle, MySql, MSSQL, PostgreSQL

NoSQL 데이터베이스

  • 비구조적인 데이터를 저장하고 관리하는데 적합한 데이터베이스
  • 여러 하위 유형이 존재
    - Document Store: JSON, BSON 과 같은 문서 형식으로 데이터를 저장.
    (ex: MongoDB, Couchbase)
    - Key-Value Store: 키와 값 쌍으로 데이터를 저장. 빠른 저장 및 검색이 가능.
    (ex: Redis, Amazon DynamoDB)
    - Column Family Store: 컬럼 기반으로 데이터를 저장. 대량의 데이터를 빠르게 쓰고 읽는데 적합
    (ex: Apache Cassandra, HBase)
    - Graph Database: 그래프 구조를 사용하여 데이터 간의 관계를 표현. 복잡한 관계를 가진 데이터를 다루는데 유용함
    (ex: Neo4j, Amazon Neptune)

오브젝트 지향 데이터베이스(OODBMS, Object-Oriented Database Management System)

  • 객체 지향 패러다임을 기반으로 데이터를 저장
  • 데이터를 객체로 모델링하고 클래스와 상속 등의 개념을 사용함
  • ex: db4o, ObjectDB

타임시리즈 데이터베이스 (Time-Series Database)

  • 시간에 따라 변하는 데이터를 저장하고 관리하는데 특화되어있는 데이터베이스
  • 로깅, 모니터링, IoT 데이터 분석에 사용됨
  • ex: InfluxDB, TimescaleDB

XML 데이터베이스(XML Database)

  • XML 형식의 데이터를 저장하고 관리
  • XML 문서의 저장, 쿼리, 처리를 지원
  • ex: eXist-db, BaseX

NewSQL 데이터베이스

  • RDBMS 의 ACID 트랜잭션과 NoSQL 의 수평적 확장성을 결합한 데이터베이스
  • ex: CockroachDB, NuoDB

관계형 데이터베이스 용어 설명

주로 웹 애플리케이션에서는 관계형 데이터베이스를 주로 사용하기 때문에 해당 데이터베이스 내의 개념과 키워드를 정리

스키마(Schema)

  • 데이터베이스의 구조와 조직을 정의하는 데 사용
  • 테이블, 뷰, 인덱스, 관계, 제약 조건등을 정의하는데 사용되는 로직 집합
  • 데이터베이스의 틀이나 청사진으로 생각 할 수 있으며 데이터가 어떻게 저장될지에 대한 정보를 제공
  • 스키마는 일반적으로 데이터베이스 설계 단계에서 정의된다
  • 실제 데이터를 저장하지는 않는다

테이블(Table)

  • 스키마에 정의된 대로 데이터베이스에 저장되는 실제 데이터의 집합
  • 행(Row) 과 열(Column) 으로 구성되며 이를 통해 구조화된 데이터를 저장
  • 테이블은 스키마 내에 존재하며, 스키마는 하나 이상의 테이블을 가질 수 있다
  • 각 테이블은 고유한 이름을 가지고 있으며, 특정 주제나 카테고리에 대한 데이터를 그룹화 하는 데 사용
💡
스키마는 건물의 청사진이고 테이블은 청사진에 따라 지어진 건물 내의 각 방과 같음. 스키마는 구조를 정의하고, 테이블은 그 구조 안에 실제 데이터를 저장한다.

열(Column)

  • 테이블에서 특정 속성 또는 필드
  • 각 열에는 이름과 데이터 유형이 있음

행(Row) (같은 개념: 레코드)

  • 테이블 내의 데이터를 행으로 묶은 개념
  • 하나의 행은 해당 테이블의 열에 정의된 속성에 대한 값을 가진다

키(Key)

  • 행을 고유하게 식별하거나 테이블 간의 관계를 설정하는 데 사용
  • 기본 키(Primary Key): 테이블의 각 행을 고유하게 식별하는 열 또는 열 집합
  • 외래 키(Foreign Key): 다른 테이블의 기본 키를 참조하는 열. 테이블간의 관계를 설정하는 데 사용

인덱스(Index)

  • 데이터 검색 속도 향상을 위해 사용
  • 테이블 하나 이상의 열에 대한 포인터를 유지하여 쿼리 성능을 향상

추가 키워드와 간단 설명

  • 클러스터드 인덱스(Clustered Index)
    테이블의 데이터를 특정한 순서로 저장하며, 데이터의 물리적인 정렬 방식을 결정. 테이블 당 하나의 클러스터드 인덱스만 생성 가능
  • 논클러스터드 인덱스(Non-Clustered Index)
    데이터를 별도의 공간에 정렬된 형태로 저장. 하나의 테이블에 여러 개의 논클러스터드 인덱스 생성 가능
  • 유니크 인덱스(Unique Index)
    중복 값을 허용하지 않는 인덱스. 무결성을 유지하는데 도움
  • 복합 인덱스(Composite Index, Multi-Column Index)
    두 개 이상의 열을 결합하여 하나의 인덱스로 만드는 방법. 단, 검색 시 두 개의 열을 순서에 맞게 사용하지 않으면 복합인덱스 적용 안될 수 있음
  • 풀텍스트 인덱스(Full Text Index)
    텍스트 기반의 데이터를 빠르게 검색하기 위해 사용. 큰 텍스트 필드에 효과적
  • 비트맵 인덱스(Bitmap Index)
    각 행에 대해 비트값을 가진 인덱스. 주로 낮은 카디널리티(고유한 값의 수가 적은 열) 에 사용됨
  • 스페이셜 인덱스(Spatial Index)
    공간 데이터(ex:지리적 위치) 를 처리하는데 최적화 된 인덱스 (일부 데이터베이스에서 지원. MySQL, PostgreSQL)
  • 해시 인덱스(Hash Index)
    해시 함수를 사용하여 데이터를 빠르게 찾는 인덱스. 일부 데이터베이스에서 지원되며(PostgreSQL), 주로 메모리 기반 데이터베이스에서 흔히 사용됨

트랜잭션(Transaction)

  • 하나 이상의 SQL 문의 그룹으로, 하나의 논리적 작업 단위를 나타냄
ACID

1983년 '안드레아스 로이테르' 와 '테오 헤르데르' 가 트랜잭션 개념을 정리하여 ACID 라는 용어를 만들며 이를 기재.

데이터의 정확성과 신뢰성을 보장하는 데 중요하며 대부분의 RDBMS 는 ACID 를 준수하도록 설계 되어 있음.

  • Atomicity
    모든 작업이 완전히 수행 되거나, 전혀 수행되지 않아야 함을 의미
  • Consistency
    트랜잭션 실행이 성공적으로 완료되면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미. 데이터의 무결성을 유지하거나 B-tree 인덱스 또는 이중 연결 목록 등 모든 내부적 데이터 구조를 일관적이게 변경을 수행하는 것을 포함.
  • Isolcation
    트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미. 단, 성능 관련 이슈로 인해 해당 제약 조건은 가장 유연히 적용될 수 있다.
  • Durability
    트랜잭션이 성공적으로 완료된 후, 그 결과가 영구적으로 데이터베이스에 저장된다는 것을 보장해야 함을 의미
    시스템이 갑작스러운 장애를 겪더라도 완료된 트랜잭션의 결과는 손실되지 않아야 한다.

쿼리(Query)

  • 데이터베이스 내의 정보를 검색, 삽입, 수정, 삭제 하는 데 사용되는 명령문
  • 스키마를 구성하거나 데이터베이스를 일부 제어하는 데에도 사용 가능

정규화(Normalization)

  • 데이터 중복을 최소화 하고 데이터 무결성을 향상시키기 위해 데이터베이스 구조를 조직화 하는 프로세스