[DB] 데이터베이스의 개념과 발전

JIEUM KIM·2025년 3월 10일

Database

목록 보기
1/9
post-thumbnail

현대 사회에서 데이터는 가장 중요한 자산 중 하나로 자리 잡게되었다. 따라서 쇼핑몰, 은행, 소셜 미디어, 병원 등 다양한 분야에서 방대한 양의 데이터를 효율적으로 관리하는 것이 필수적이다. 이러한 방대한 양의 데이터를 효과적으로 저장하고 관리하기 위해 데이터베이스(Database)라는 개념이 등장하게 되었다.

기존에는 문서나 파일을 이용해 데이터를 기록하고 관리했지만, 이런 방법은 검색 속도가 느리고, 데이터의 중복이 많으며, 보안에도 취약한 문제가 발생했다. 하지만 컴퓨터 기술이 발전하면서 데이터베이스 시스템이 개발되었고, 이를 통해 데이터를 체계적으로 저장하고 빠르게 조회할 수 있는 환경이 마련됐다.

이번 포스팅에서는 데이터베이스의 개념과 필요성을 먼저 알아보고, 파일 시스템부터 최신 NoSQL까지 데이터베이스의 발전 과정을 살펴보도록 하자. 또한, 데이터를 관리하기 위한 핵심 언어인 SQL과 데이터의 일관성을 유지하는 트랜잭션 및 ACID 원칙에 대해서도 짚고 넘어가자.

📌 데이터베이스란?

✏️ 데이터베이스의 정의

데이터베이스(Database)란 정보를 체계적으로 저장하고 관리하는 시스템이다. 단순히 데이터를 보관하는 것이 아니라, 필요할 때 빠르게 검색하고 수정할 수 있도록 설계된 구조를 가지고 있다. 예를 들어, 쇼핑몰에서는 사용자 계정 정보, 주문 내역, 결제 정보 등을 데이터베이스에 저장하여 관리하게된다.

데이터베이스는 단순한 파일 저장 방식과 다르게 데이터의 중복을 줄이고, 일관성을 유지하며, 보안성을 강화하는 구조로 되어 있다. 이를 통해 데이터가 안정적으로 관리되고, 여러 사용자가 동시에 접근하여도 문제가 발생하지 않도록 해준다.

✏️ 데이터베이스가 필요한 이유

초기에는 데이터를 종이에 기록하거나 파일 시스템을 이요해서 저장해왔지만, 이런 방식은 여러가지 부분에서 한계를 가지고 있다.

  • 검색이 어렵다.
  • 중복 데이터가 발생한다.
  • 데이터 손실의 위험이 있다.
  • 여러 사용자의 동시 접근이 불가하다.

이러한 문제를 해결하기 위해 데이터를 효율적으로 저장하고 관리할 수 있는 데이터베이스 시스템이 개발되었고, 데이터베이스를 사용하면 데이터의 무결성을 유지하면서도 쉽고 빠르게 검색하고 수정 및 삭제까지 할 수 있는 환경을 제공할 수 있다.

✏️ 데이터베이스의 장점

앞서 언급한 초기에 사용한 데이터베이스의 단점을 극복한 최신의 데이터베이스를 사용할 경우의 이점은 다음과 같다.

1️⃣ 데이터를 빠르게 조회할 수 있다.

  • 데이터베이스는 인덱스(index) 등의 기술을 활용해 원하는 데이터를 빠르게 검색할 수 있다.
  • 예를들어, 쇼핑몰에서 특정 사용자의 주문 내역을 조회할 때, 몇 초 안에 결과를 얻을 수 있다.

2️⃣ 중복되는 데이터를 줄일 수 있다.

  • 데이터베이스는 **정규화(Normalization) 기법을 활용하여 동일한 데이터를 여러 번 저장하는 문제를 해결한다.
  • 예를들어, 사용자의 정보(이름, 이메일 등)을 한곳에서 관리하면, 다른 곳에서 동일한 정보를 여러번 입력할 필요가 없다.

3️⃣ 데이터를 안전하게 보호할 수 있다.

  • 데이터베이스는 접근 권한을 설정하여 특정 사용자만 데이터를 볼 수 있도록 제한할 수 있다.
  • 또한, 백업 및 복구 기능을 제공하여 데이터가 손실되었을때 쉽게 복구 할 수 있다.

✏️ 데이터베이스 관리 시스템 (DBMS)

DBMS(Database Management System)는 데이터베이스를 생성하고 관리하는 소프트웨어이다. 단순히 데이터를 저장하는 것뿐만 아니라, 데이터를 효율적으로 관리하고 보안성을 높이는 역할을 한다.

쉽게 말해, 데이터베이스는 단순한 데이터 저장소이고, DBMS는 그 데이터베이스를 관리하고 운영하는 프로그램이라고 생각하면 된다.

아래 그림을 보며 좀더 직관적으로 이해해보자.
쇼핑몰의 상품 정보는 수많은 고객과 관리자가 동시에 접근합니다. 상품, 고객, 주문, 재고 정보를 체계적으로 모아놓은 것이 데이터베이스이다. 쇼핑몰이 운영하는 이 데이터베이스에는 여러 사람이 동시에 접근할 수 있다. 고객 A는 PC에서 상품을 검색하고, 고객 B는 모바일로 장바구니에 물건을 담으며, 고객 C는 태블릿으로 결제를 진행하는 동시에, 관리자는 재고를 확인하고, 재고 담당자는 입고 정보를 업데이트하며, 배송 담당자는 주문 상태를 변경하는 등 다양한 접근이 동시에 이루어진다. 이처럼 수많은 사용자와 시스템이 동시에 데이터에 접근하면서도 정보의 일관성과 안전성이 유지될 수 있도록 DBMS의 역할이 중요하다.


📌 DBMS의 발전 과정 및 종류

DBMS는 데이터를 효율적으로 저장하고 관리하기 위해 꾸준히 발전해왔어. 처음에는 단순한 파일 시스템에서 시작해서, 점점 더 데이터의 무결성과 효율성을 보장하는 구조로 발전해왔다. 이번 챕터에서는 파일 시스템부터 NoSQL까지 DBMS의 주요 발전 과정과 특징을 살펴보자

✏️ 파일 시스템(File System)

파일시스템은 가장 원시적인 데이터 저장 방식이다. 데이터를 개별 파일로 저장하고, 운영체제(OS)의 디렉토리를 이용해 관리하는 방식이다.
예를들어 메모장에 데이터를 저장하는 경우가 있다.

🔧 특징

  • 데이터를 텍스트파일, CSV, JSON등의 형식으로 저장한다.
  • 운영체제의 파일 시스템을 이용하여 데이터를 관리한다.

파일시스템의 방식은 데이터 중복, 검색 속도 저하, 데이터 무결성 부족 등의 이유로 잘 사용하지 않는 방식이다.

✏️ 계층형 DBMS

계층형 데이터베이스는 파일시스템의 문제를 해결하기 위해 개발된 구조이다. 데이터를 트리(tree) 형태로 저장하는 방식이다.

🔧 특징

  • 데이터가 부모-자식관계 (1:N구조)로 저장된다.
  • 빠른 데이터 검색이 가능하지만, 데이터 구조가 복잡할 경우 수정이 어렵다.
  • 복잡한 데이터 모델링에 한계가 있다.

예를들어, 다음과 같은 다이어그램에서 공급업체를 추가하고자 할때 현재의 계층 구조에서 통합되기 어렵다. 또한, 노드간의 관계를 표현하기 어렵다. 예를들어, 창고와 고객Y 사이의 직접적인 연관 관계를 설정하려면 제품 → 창고 → 대구창고에서 제품 → 주문 → 주문B → 고객Y로 우회해야하는 번거로움이 발생한다.

이러한 한계로 인해 계층형 DBMS는 복잡한 비즈니스 관계를 모델링 하는데 적합하지 않으며, 현대의 데이터베이스 시스템에서는 사용되지 않는다.

✏️ 네트워크형 DBMS

네트워크형 데이터베이스는 계층형 데이터베이스의 단점을 보완하기 위해 개발되었다. 데이터를 네트워크 형식으로 링크하여 저장하는 방식이다.

🔧 특징

  • 데이터가 N:M(다대다)구조로 저장될 수 있어 데이터간의 유연한 연결이 가능하다.
  • 데이터의 관계가 미리 정의되어있어서 검색시 속도가 빠르다.
  • 하나의 데이터가 여러 부모를 가질수 있기 때문에 구조가 유연하다.

예를들어 아래와 같은 다이어그램을 보자. 상품을 중심으로 공급업체, 고객, 창고, 주문, 카테고리 등 다양한 엔터티가 서로 직접 연결되어 있어 계층형보다 더 유연한 데이터 접근이 가능한걸 볼 수 있다. 예를 들어, 공급업체는 제품을 공급하면서 동시에 창고에 직접 입고할 수 있고, 고객은 제품을 구매하면서 바로 주문 정보와 연결된다.

하지만, 데이터의 관계가 많아질수록 구조가 복집하기 때문에 관리가 어려워질 수 있고 성능저하로 이어질 수 있다는 단점이 존대하여 현재는 관계형 DBMS로 대부분이 대체되었다.

✏️ 관계형 DBMS

계층형 데이터베이스의 문제점을 해결하기 위해 개발된 방식이다. 데디터를 표(table)형태로 저장하고 SQL(Structured Query Language)을 사용하여 데이터를 조회하고 조작하는 방식이다.

🔧 특징

  • 데이터를 행(Row)과 열(Colum)로 구성된 테이블에 저장한다.
  • 각 테이블은 고유한 기본키(PK)를 가지고 테이블 간의 관계는 외래키(FK)를 통해 연결된다.
  • 테이블간의 관계를 설정하여 중복을 최소화한다.
  • SQL을 사용하여 데이터 CRUD가 가능하다.
  • 데이터의 무결성을 유지할 수 있도록 다양한 제약조건을 제공한다.
  • MySQL, PostgreSQL, Oracle, SQL Server 등의 데이터베이스가 사용된다.

예를들어 아래와 같은 다이어그램을 보자.
제품, 고객, 주문, 주문상세 테이블이 있을경우, 주문 테이블의 고객ID는 고객 테이블의 고객ID를 참조하고, 주문상세 테이블은 주문ID와 제품ID를 각각 주문 테이블과 제품 테이블의 기본키와 연결함으로써 복잡한 데이터 관계를 표현할 수 있다.

이러한 구조는 데이터 중복을 최소화하고 데이터 무결성을 보장하며, 계층형이나 네트워크형 DBMS의 한계였던 구조 변경의 어려움과 복잡한 관계 표현의 문제를 해결하여 현재 가장 널리 사용되는 데이터베이스 모델이다.

✏️ NoSQL DBMS

NoSQL 데이터베이스는 "Not Only SQL"의 약자로, 방대한 데이터를 저장하는데에 한계가 존재하는 관계형 데이터베이스의 제약에서 벗어나 다양한 형태로 데이터를 저장하는 방식이다.

🔧 특징

  • 데이터를 테이블 형태가 아닌 Key-Value, 문서, 그래프 등의 형태로 저장한다.
  • 서버를 추가하여 데이터를 효율적으로 분산 처리가 가능하기 때문에 수평적 확장에 용이하다.
  • MongoDB, Redis, Cassandra, DynamoDB 등의 데이터베이스가 사용된다.


📌 SQL(Structured Query Language) 개요

앞선 챕터에서 SQL이라는 용어가 자주 등장했지만 설명이 없어서 당황했을 수 있다. 이번 챕터에서 SQL에 대해 다양한 유형을 살펴보며 용어정리를 해보도록 하자.

SQL은 관계형 데이터베이스에서 데이터를 관리하고 조작하는 언어이다. SQL을 사용하면 데이터베이스에서 데이터를 추가, 수정, 삭제, 조회를 할 수 있고, 접근 권한을 제어할 수 있다.

데이터 유형은 크게 다음과 같은 네가지고 구분된다.

  • DDL (데이터 정의어) : 데이터베이스의 구조(스키마)를 정의
  • DML (데이터 조작어) : 데이터를 삽입, 수정, 삭제
  • DQL (데이터 조회어) : 데이터를 조회
  • DCL (데이터 제어어) : 데이터의 접근 권한을 관리한다.

각 유형의 자세한 내용 및 사용 예시는 다음 포스팅에서 MySQL을 사용해서 해보도록 하자.


📌 트랜잭션과 ACID 원칙

트랜잭션은 데이터베이스에서 하나의 논리적인 작업 단위를 의미한다.

예를들어, 쇼핑몰에서 결제 과정을 생각해보자.

1️⃣ 사용자가 상품을 선택하고 결제 버튼을 누름
2️⃣ 결제 금액이 사용자 계좌에서 차감됨
3️⃣ 상품의 재고가 감소됨
4️⃣ 결제 완료 메시지가 사용자에게 전달됨

이 모든 과정이 하나의 트랜잭션이라고 생각하면 된다. 이 단계를 거치며 어느 한 단계라도 실패하면 전체 작업이 취소되어야 데이터의 무결성이 유지 될 수 있다.
즉, 트랜잭션은 반드시 "완벽하게 완료"되거나 "아예 실행되지 않아야"하는 원칙을 가진다. 때문에 데이터베이스에서 트랜잭션을 관리할때, 다음과 같은 ACID 원칙을 따라야한다.

✏️ 원자성 (Atomicity)

트랜잭션이 실행될 때, 모든 작업이 성공해야 데이터가 반영된다. 만약 실행 중 오류가 발생하면, 트랜잭션의 모든 작업이 취소(Rollback)된다.

우선 아래의 예제는 주석을 보며 대충 이렇게 흘러가는구나~ 하면서 보자.

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;  -- 돈을 인출
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;  -- 돈을 입금

COMMIT;  -- 모든 작업이 성공하면 반영

✏️ 일관성 (Consistency)

트랜잭션이 실행되기 전과 후의 데이터 무결성이 유지되어야 한다.
예를들어, 은행 계좌에서 입출금이 정확하게 반영되지 않으면 데이터가 불일치하게 된다.

  • 예: 은행 계좌 이체 후 모든 계좌의 총액 합계는 변함이 없어야 함

✏️ 고립성 (Isolation)

여러 트랜잭션이 동시에 실행될때, 서로 간섭을 받지 않도록 보장해야한다. 즉, 트랜잭션이 진행되는 동안 다른 트랜잭션이 같은 데이터를 변경하면 안된다.

✏️ 지속성 (Durability)

트랜잭션이 완료된 후 데이터가 영구적으로 저장되어야한다.

✏️ 트랜잭션 제어 명령어

  • BEGIN 또는 START TRANSACTION: 트랜잭션 시작
  • COMMIT: 트랜잭션 완료 및 모든 변경사항 확정
  • ROLLBACK: 트랜잭션 취소 및 모든 변경사항 원상복구
  • SAVEPOINT: 트랜잭션 내에 복구 지점 생성
  • ROLLBACK TO SAVEPOINT: 특정 저장점까지만 롤백

✏️ 정리

ACID 원칙설명예시
원자성 (Atomicity)트랜잭션은 모두 성공하거나, 실패 시 모든 작업이 취소됨돈을 보냈는데 한쪽 계좌만 차감되는 오류 방지
일관성 (Consistency)데이터 무결성이 보장되어야 함입출금 시 잔액이 정확하게 반영되어야 함
고립성 (Isolation)동시에 실행되는 트랜잭션이 서로 영향을 주지 않음두 사용자가 같은 계좌에서 동시에 출금 방지
지속성 (Durability)트랜잭션 완료 후 데이터는 영구적으로 저장됨전원이 나가도 주문 기록이 유지됨

📌 정리

이번 포스팅에서는 데이터베이스의 개념과 발전 과정, DBMS의 역할, SQL의 주요 개념, 그리고 트랜잭션과 ACID 원칙에 대해 알아봤다.

데이터베이스(Database)는 데이터를 체계적으로 저장하고 관리하는 시스템이며, 빠른 검색, 데이터 중복 최소화, 보안 강화를 위해 사용된다.
DBMS(Database Management System)는 데이터베이스를 효과적으로 관리하는 소프트웨어로, 데이터 저장, 검색, 수정, 삭제 및 보안 관리 기능을 제공한다.
✔ DBMS는 파일 시스템 → 계층형 → 망형 → 관계형 → NoSQL 순으로 발전했으며, 현재는 관계형 데이터베이스(RDBMS)와 NoSQL이 널리 사용된다.
SQL(Structured Query Language)은 관계형 데이터베이스를 조작하는 언어로, DDL(데이터 정의어), DML(데이터 조작어), DQL(데이터 조회어), DCL(데이터 제어어)로 구성된다.
트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위이며, ACID 원칙(원자성, 일관성, 고립성, 지속성)을 준수해야 데이터의 무결성이 유지된다.


📌 다음 포스팅 예고 🚀

이어지는 포스팅에서는 MySQL을 활용한 SQL 예제를 다루며, 직접 데이터를 다루는 기본적인 방법을 익혀볼 예정이다!


Reference

0개의 댓글