본문 바로가기

Backend study/Backend theory

데이터베이스

데이터베이스(Database)는 데이터를 체계적으로 저장하고 관리하는 시스템이다. 데이터베이스는 여러 사용자나 애플리케이션이 데이터를 효율적으로 검색, 추가, 삭제, 갱신할 수 있도록 한다. 데이터베이스는 다양한 형식의 데이터를 처리하고, 이를 저장, 관리, 검색할 수 있는 다양한 기능을 제공한다.

 

1. 데이터베이스(Database)와 DBMS(Database Management System)

데이터베이스(Database)

데이터베이스는 특정 목적을 위해 조직된 데이터의 집합이다. 예를 들어, 회사의 직원 정보를 저장하는 데이터베이스, 도서관의 도서 목록을 관리하는 데이터베이스, 쇼핑몰의 상품 및 주문 정보를 관리하는 데이터베이스 등이 있다. 데이터베이스는 데이터를 구조화하여 중복을 최소화하고, 쉽게 접근할 수 있도록 설계된다.

DBMS (Database Management System)

DBMS는 데이터베이스를 관리하는 소프트웨어 시스템이다. DBMS는 데이터의 저장, 검색, 수정, 삭제 등의 작업을 수행하며, 데이터베이스와 사용자 또는 애플리케이션 간의 중재자 역할을 한다. DBMS는 데이터를 효율적으로 관리하기 위해 다양한 기능을 제공한다:

  • 데이터 정의(DDL, Data Definition Language): 데이터베이스 구조를 정의하는 명령어이다. 예를 들어, 테이블 생성, 수정, 삭제 등을 포함한다.
  • 데이터 조작(DML, Data Manipulation Language): 데이터를 추가, 수정, 삭제하는 명령어이다. 예를 들어, SELECT, INSERT, UPDATE, DELETE 등이 있다.
  • 데이터 제어(DCL, Data Control Language): 데이터베이스에 대한 접근 권한을 관리하는 명령어이다. 예를 들어, 사용자의 권한을 부여하거나 회수하는 명령어가 포함된다.

 

2. 데이터 저장 방식

데이터베이스는 데이터를 다양한 방식으로 저장할 수 있다. 주요한 데이터 저장 방식은 다음과 같다

관계형 데이터베이스(Relational Database)

관계형 데이터베이스는 데이터를 테이블(표) 형식으로 저장한다. 각 테이블은 행과 열로 구성되며, 행은 데이터의 레코드를, 열은 데이터의 속성을 나타낸다. 테이블 간의 관계는 외래 키(Foreign Key)를 통해 정의된다.

  • 예시: 학생(Student) 테이블과 수업(Course) 테이블이 있다고 가정하면, 학생이 어떤 수업을 듣고 있는지 표현하기 위해 학생 테이블과 수업 테이블 간의 관계를 외래 키를 통해 설정할 수 있다.

NoSQL 데이터베이스

NoSQL 데이터베이스는 비정형 데이터를 처리하기 위해 설계된 데이터베이스로, 문서(Document), 키-값(Key-Value), 그래프(Graph) 등 다양한 형식으로 데이터를 저장할 수 있다.

  • 문서형 데이터베이스: 데이터가 JSON, BSON 같은 문서 형식으로 저장된다. 예를 들어 MongoDB가 있다.
  • 키-값 저장소: 데이터가 키와 값의 쌍으로 저장된다. 예를 들어 Redis와 DynamoDB가 있다.
  • 그래프 데이터베이스: 데이터가 노드와 엣지로 표현되며, 객체 간의 관계를 나타내기 위해 사용된다. 예를 들어 Neo4j가 있다.

파일 시스템

간단한 데이터베이스 시스템에서는 데이터를 파일 시스템에 저장할 수 있다. 텍스트 파일, CSV 파일 등이 이에 해당한다. 그러나 파일 시스템 기반 저장 방식은 대규모 데이터 관리, 트랜잭션 처리, 동시성 제어 등에 한계가 있다.

 

3. 데이터베이스 설계

데이터베이스 설계는 효율적이고 유지보수 가능한 데이터베이스를 구축하기 위해 데이터를 구조화하는 과정입니다. 데이터베이스 설계의 주요 단계는 다음과 같다:

  • 요구 사항 분석: 데이터베이스에서 관리해야 할 데이터를 파악하고, 사용자의 요구 사항을 분석한다.
  • 개념적 설계: 엔터티(Entity)와 엔터티 간의 관계를 정의하는 ER(Entity-Relationship) 다이어그램을 작성한다. 이 단계에서는 데이터베이스의 논리적 구조를 설계한다.
  • 논리적 설계: ER 다이어그램을 관계형 모델로 변환하여 테이블을 설계한다. 테이블의 속성, 관계, 키 등을 정의한다.
  • 물리적 설계: 논리적 설계를 바탕으로 실제 데이터베이스 스키마를 생성한다. 인덱스 설정, 파티셔닝, 클러스터링 등을 고려하여 성능을 최적화한다.

 

4. 데이터베이스 정규화

데이터베이스 정규화(Normalization)는 데이터의 중복을 최소화하고, 데이터 무결성을 유지하기 위해 데이터베이스를 구조화하는 과정이다. 정규화는 여러 단계로 이루어지며, 각 단계는 특정한 정규형(Normal Form)을 만족하도록 테이블을 변환한다.

  • 제1정규형(1NF): 모든 속성이 원자값(더 이상 분해할 수 없는 값)을 가지도록 테이블을 구조화한다. 중복된 그룹 속성이 없는 상태를 만든다.
  • 제2정규형(2NF): 제1정규형을 만족하면서, 부분적 함수 종속을 제거한다. 기본 키가 아닌 속성이 기본 키의 부분 집합에 의존하지 않도록 한다.
  • 제3정규형(3NF): 제2정규형을 만족하면서, 이행적 함수 종속을 제거한다. 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 의존하지 않도록 한다.
  • BCNF(Boyce-Codd Normal Form): 제3정규형을 강화한 형태로, 모든 결정자가 후보 키가 되도록 테이블을 구조화한다.

정규화는 데이터베이스의 일관성을 유지하고, 중복 데이터를 최소화하는 데 도움이 된다. 그러나 과도한 정규화는 성능 문제를 일으킬 수 있으며, 이를 해결하기 위해 비정규화(Denormalization) 기법이 사용되기도 한다.

 

5. 트랜잭션 (Transaction)

트랜잭션은 데이터베이스에서 수행되는 하나의 논리적인 작업 단위이다. 트랜잭션은 일련의 데이터베이스 작업을 그룹화하여 원자성을 보장한다. 트랜잭션의 주요 특성은 ACID로 표현된다:

  • 원자성(Atomicity): 트랜잭션 내의 모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 한다. 즉, 트랜잭션이 성공하면 모든 작업이 완료되고, 실패하면 작업이 전혀 반영되지 않아야 한다.
  • 일관성(Consistency): 트랜잭션이 성공적으로 완료되면, 데이터베이스는 일관된 상태를 유지해야 한다. 트랜잭션이 시작되기 전과 완료된 후의 데이터베이스 상태는 모든 제약 조건을 만족해야 한다.
  • 격리성(Isolation): 트랜잭션이 동시에 실행될 때, 서로 간섭하지 않도록 격리되어야 한다. 격리 수준에 따라 다르게 설정될 수 있으며, 이는 동시성 제어 메커니즘에 의해 관리된다.
  • 내구성(Durability): 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 반영되어야 한다. 시스템 장애가 발생하더라도 결과는 보존된다.

트랜잭션 관리

트랜잭션 관리의 주요 목표는 데이터 무결성을 유지하면서도 동시성 제어와 회복 관리 기능을 제공하는 것이다.

  • 동시성 제어(Concurrency Control): 여러 트랜잭션이 동시에 실행될 때 발생할 수 있는 충돌을 방지하는 메커니즘이다. 이를 위해 잠금(Locking), 타임스탬프(Timestamping), 낙관적 동시성 제어(Optimistic Concurrency Control) 등이 사용된다.
  • 회복 관리(Recovery Management): 시스템 장애가 발생했을 때, 데이터베이스를 장애 이전의 일관된 상태로 복구하는 메커니즘이다. 트랜잭션 로그를 사용하여 트랜잭션의 상태를 기록하고, 필요할 경우 트랜잭션을 롤백(Undo)하거나 재시도(Redo)하여 데이터 무결성을 회복한다.

 

데이터베이스는 데이터를 효율적으로 저장, 관리, 검색하기 위한 시스템이다. DBMS는 데이터베이스를 관리하는 소프트웨어로, 다양한 데이터 저장 방식을 지원하며, 데이터베이스 설계와 정규화를 통해 효율성을 높인다. 트랜잭션은 데이터 무결성을 유지하기 위한 핵심 개념으로, 원자성, 일관성, 격리성, 내구성(ACID)을 보장한다. 데이터베이스 시스템을 잘 이해하고 설계하는 것은 안정적이고 효율적인 애플리케이션을 구축하는 데 매우 중요하다.

728x90

'Backend study > Backend theory' 카테고리의 다른 글

클라우드 컴퓨팅  (6) 2024.09.02
API (Application Programming Interface)  (1) 2024.09.02
운영체제  (0) 2024.09.01
네트워크  (3) 2024.08.31
웹 개발의 구조  (0) 2024.08.31