💻 데이터베이스: 기본 개념부터 시스템까지
데이터가 넘쳐나는 요즘, 이 데이터들을 어떻게 효율적으로 관리하고 활용할 수 있을까요? 그 해답은 바로 데이터베이스에 있습니다. 쇼핑몰의 상품 목록부터 은행의 고객 정보까지, 우리 주변의 수많은 서비스들이 데이터베이스를 기반으로 작동하고 있습니다.
오늘은 데이터베이스의 가장 기초적인 개념부터 시작해서, 데이터를 관리하는 시스템(DBMS), 그리고 전체 데이터베이스 시스템의 구조까지 차근차근 알아보는 시간을 갖겠습니다.
1️⃣ 데이터베이스 기본 개념: 데이터와 정보, 그리고 데이터베이스란?
1. 데이터(Data) vs 정보(Information)
- 데이터: 현실 세계에서 관찰하거나 측정해서 얻은 단순한 사실이나 값이다 예를 들어, 상점의 각 판매 기록 하나하나가 데이터에 해당한다.
- 정보: 데이터를 특정 목적에 맞게 처리하고 가공하여 의미를 부여한 결과물입니다. 의사 결정에 유용하게 사용될 수 있어요. 예를 들어, 판매 데이터를 분석해서 "이번 달 가장 많이 팔린 제품"을 알아내는 것은 정보에 해당합니다.
- 정보 처리: 데이터에서 정보를 추출하는 과정 또는 방법
2. 데이터베이스(DB)란 무엇일까요?
먼저 정보시스템에 대해 알아보자. 정보 시스템(information system)은 조직 운영에 필요한 데이터를 수집하여 저장해두었다가 유용한 정보를 만들어주는 수단이다.
데이터베이스는 특정 조직이나 목적에 필요한 데이터들을 체계적으로 모아둔 저장소. 다른 말로는 정보 시스템 안에 데이터를 저장하고 있다가 필요할 때 제공하는 역할을 담당한다. 좀 더 자세히 정의하면, **"여러 사용자가 공유하여 사용할 수 있도록 통합해서 저장한 운영 데이터의 집합"**입니다. 이 정의에는 중요한 4가지 의미가 있다.
- 통합된 데이터 (Integrated Data): 데이터의 중복을 최소화하고, 중복되더라도 통제 가능하게 관리하는 데이터입니다.
- 저장된 데이터 (Stored Data): 컴퓨터가 접근할 수 있는 저장 매체(하드 디스크 등)에 저장된 데이터를 의미다.
- 운영 데이터 (Operational Data): 조직의 주요 업무를 수행하는 데 꼭 필요한 데이터를 말합니다.
- 공유 데이터 (Shared Data): 여러 사용자가 함께 소유하고 이용할 수 있는 공용 데이터라는 뜻이다.
3. 데이터베이스의 주요 특징 ✨
데이터베이스는 다음과 같은 중요한 특징들을 가지고 있습니다.
- 실시간 접근성 (Real-time Accessibility): 사용자가 데이터를 요청하면 실시간으로 응답한다.
- 계속적인 변화 (Continuous Evolution): 새로운 데이터가 추가(삽입)되고, 기존 데이터가 수정되거나 삭제되면서 현재의 정확한 상태를 유지해야 합니다.
- 동시 공유 (Concurrent Sharing): 여러 사용자가 동시에 같은 데이터에 접근하고 이용할 수 있어야 한다.
- 내용 기반 참조 (Content Reference): 데이터가 저장된 물리적인 주소가 아니라, 데이터의 내용, 즉 값에 따라 원하는 데이터를 찾을 수 있어야 합니다. (예: "가격이 10,000원 이상인 책을 찾아줘!")
4. 데이터의 종류 📦
데이터는 구조화된 정도에 따라 크게 3가지로 나눌 수 있어요.
- 정형 데이터 (Structured Data): 미리 정해진 구조(테이블 형태 등)에 따라 딱딱 맞춰 저장된 데이터입니다. 엑셀 시트나 관계형 데이터베이스의 테이블이 대표적이다.
- 반정형 데이터 (Semi-structured Data): 데이터 자체에 구조에 대한 설명(메타데이터)이 포함된 형태입니다. 구조를 파악하기 위한 파싱 과정이 필요합니다. HTML, XML, JSON 문서 등이 여기에 해당합니다.(보통 파일 형태로 저장)
- 비정형 데이터 (Unstructured Data): 정해진 구조 없이 저장된 데이터입니다. 소셜 미디어 텍스트, 이미지, 동영상, PDF 문서 등이 대표적인 예시예요.
2️⃣ 데이터베이스 관리 시스템(DBMS)
* JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API
* ODBC(Open Database Connectivity)는 마이크로소프트가 만든, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격
1. 옛날 옛적 파일 시스템 시절엔... (DBMS 등장 배경) 📜
DBMS가 등장하기 전에는 **파일 시스템(File System)**을 이용해 데이터를 관리했다. 필요한 데이터마다 별도의 파일을 만들어 응용 프로그램별로 관리했다.
* 파일 시스템이란?
- 데이터를 파일로 관리하기 위해 파일을 생성, 삭제, 수정, 검색하는 기능을 제공하는 소프트웨어
- 응용 프로그램마다 필요한 데이터를 별도의 파일로 관리함
하지만 여기에는 몇 가지 심각한 문제점들이 있었습니다.
- 데이터 중복성: 같은 내용의 데이터가 여러 파일에 중복 저장되어 저장 공간 낭비는 물론, 데이터의 일관성과 무결성(데이터의 정확성을 보장할 수 없었음)을 해칠 수도 있다. (예: 고객 주소가 바뀌었는데, 한 파일만 수정하고 다른 파일은 그대로 두는 경우)
- 데이터 종속성: 데이터 파일의 구조가 바뀌면, 그 파일을 사용하는 응용 프로그램도 전부 수정해야 할 수도 있다. 유지보수가 매우 어렵기도 하다.
- 동시 공유, 보안, 회복 문제: 여러 사용자가 동시에 파일을 수정하기 어렵고, 세밀한 보안 설정이 불가능하며, 문제 발생 시 데이터 회복이 어려웠습니다. 또한 파일 단위로 읽기, 쓰기, 실행 권한을 부여하여 데이터 접근을 통제한다.
- 응용 프로그램 개발의 어려움: 새로운 응용 프로그램을 개발 하려면 파일에서 데이터 읽기, 삽입하기, 삭제 등의 데이터 관리 기능을 모두 포함시켜야 한다.
2. DBMS의 등장
이러한 파일 시스템의 문제점을 해결하기 위해 등장한 것이 바로 **데이터베이스 관리 시스템(DBMS, DataBase Management System)**입니다! DBMS는 데이터베이스를 생성하고, 사용자의 요청에 따라 데이터를 조작하며, 데이터베이스가 항상 최적의 상태를 유지하도록 관리하는 소프트웨어이다. DBMS가 설치되어 데이터를 가진 쪽을 서버(server), 외부에서 요청하는 쪽을 클라이언트(client)라고 한다.
DBMS는 파일 시스템의 문제점들을 해결합니다.
- 데이터 중복을 최소화하고 데이터 독립성을 높여줍니다.
- 데이터의 무결성, 보안, 회복 기능을 제공합니다.
- 여러 사용자의 동시 접근을 제어합니다.
구분 | 파일 시스템 | DBMS |
데이터 정의 및 저장 | 데이터 정의: 응용 프로그램 데이터 저장: 파일 시스템 |
데이터 정의 : DBMS 데이터 저장: 데이터베이스 |
데이터 접근 방법 | 응용 프로그램이 파일에 직접 접근 | 응용 프로그램이 DBMS에 파일 접근을 요청 |
사용 언어 | 자바, C++, C 등 | 자바, C++, C 등과 SQL |
CPU/주기억장치 사용 | 적음 | 많음 |
3. DBMS의 주요 기능 🛠️
DBMS는 다음과 같은 핵심 기능들을 수행해요.
- 데이터 정의 (Definition): 데이터의 구조(스키마)를 정의하고, 필요에 따라 수정하거나 삭제합니다. (DDL 관련)
- 데이터 조작 (Manipulation): 사용자의 요청에 따라 데이터를 삽입, 삭제, 수정, 검색(추출)하는 작업을 지원합니다. (DML 관련)
- 데이터 제어 (Control): 데이터의 무결성 유지, 보안 및 권한 관리, 시스템 장애 시 회복, 동시 접근 제어 등의 기능을 수행합니다. (DCL 관련)
데이터 정의(Definition) | 데이터의 구조를 정의하고 데이터 구조에 대한 삭제 및 변경 기능을 수행함 |
데이터 조작(manipulation) | 데이터를 조작하는 소프트웨어(응용 프로그램)가 요청하는 데이터의 삽입, 수정, 삭제 작업을 지원함 |
데이터 추출(Retrieval) | 사용자가 조회하는 데이터 혹은 응용 프로그램의 데이터를 추출함 |
데이터 제어(Control) | 데이터베이스 사용자를 생성하고 모니터링하며 접근을 제어함. 백업과 회복, 동시성 제어 등의 기능을 지원함 |
4. DBMS, 장점만 있을까? (장단점 비교) 🤔
장점:
- 데이터 중복 최소화
- 데이터 일관성 및 무결성 유지 용이
- 데이터 독립성 확보 (응용 프로그램과 데이터 간의 의존성 감소)
- 데이터 보안 향상
- 표준화 용이
- 장애 발생 시 회복 용이
- 응용 프로그램 개발 및 유지보수 비용 감소
단점:
- DBMS 자체 구매 및 유지보수 비용 발생 (고비용)
- 운영체제와 함께 설치
- 데이터베이스 관리시스템 설치로 인한 구매 비용 증가
- 동시 접속자 허용 수에 따라 제품 가격 증가 - 백업 및 회복 절차가 상대적으로 복잡
- 데이터 양이 많아 구조 복잡
- 여러 사용자의 동시 공유로 장애 발생시 원인파악 어려움
- 백업 요구 - 중앙 집중 관리로 인한 시스템 장애 시 취약점 존재 가능성
- 모든 데이터가 데이터베이스에 통합 -> 데이터베이스 관리 시스템에 집중
- 일반사용자
- 은행의 창구 혹은 관공서의 민원 접수처 등에서 데이터를 다루는 업무를 하는 사람
- 프로그래머가 개발한 프로그램을 이용하여 데이터베이스에 접근한 일반인 - 응용 프로그래머
- 일반 사용자가 사용할 수 있ㄷ록 프로그램을 만드는 사람
- 자바, C, JSP 등 프로그래밍 언어와 SQL을 사용하여 일반 사용자를 위한 사용자 인터페이스와 데이터르 관리하는 응용 로직을 개발 - SQL 사용자
- SQL을 사용하여 업무를 처리하는 IT 부서의 담당자
- 응용 프로그램으로 구현되어 있지 않은 업무를 SQL을 사용해서 처리 - 데이터베이스 관리자(DBA, Database Adminstrator)
- 데이터베이스 운영 조직의 데이터베이스 시스템을 총괄하는 사람
- 데이터 설계, 구현, 유지보수의 전 과정을 담당
- 데이터베이스 사용자 통제, 보안, 성능 모니터링, 데이터 전체 파악 및 관리, 데이터 이동 및 복사 등 제반 업무를 함 - 질의 처리기(query processor)
- 사용자의 데이터 처리 요구를 해석하여 처리
- DDL 컴파일러, DML 프리 컴파일러, DML 컴파일러, 런타임 데이터베이스 처리기, 트랜잭션 관리자 등을 포함 - 저장 데이터 관리자(stored data manager)
- 디스크에 저장된 데이터베이스와 데이터 사전을 관리하고 접근함
5. 데이터 모델
- 계층 데이터 모델(hierarchical data model)
- 포인터 사용 - 네트워크 데이터 모델(network data model)
- 포인터 사용 - 객체 데이터 모델(objec data model)
- 객체 식별자 사용 - 관계 데이터 모델(relational data model)
- 속성 값 사용 - 객체-관계 데이터 모델(object-relational data model)
6. DBMS는 어떻게 발전해왔을까? (발전 과정) 🚀
- 1세대 (1960년대): 계층형 DBMS (데이터를 트리 구조로 구성, IMS)와 네트워크형 DBMS (데이터를 그래프(네트워크) 구조로 구성, IDS)가 등장했습니다.
- 2세대 (1970년대): **관계형 DBMS (RDBMS)**가 등장하며 현재까지 가장 널리 사용되는 모델이 되었습니다. 데이터를 테이블 형태로 구성하며 SQL을 사용합니다. (Oracle, MySQL, MS SQL Server 등)
- 3세대 (1980년대~1990년대): 객체지향 개념을 도입한 **객체지향 DBMS (OODBMS)**와 관계형 모델에 객체지향 특징을 추가한 **객체관계 DBMS (ORDBMS)**가 등장했습니다.
- 4세대 (2000년대 이후): 빅데이터 시대를 맞아 비정형 데이터를 효율적으로 처리하기 위한 NoSQL DBMS (Not Only SQL)와 관계형 모델의 장점과 NoSQL의 확장성을 결합한 NewSQL DBMS가 주목받고 있습니다.
ex) 몽고디비(MongoDB), H베이스(Base), 카산드라(Cassandra), 레디스(Redis) 등
3️⃣ 데이터베이스 시스템: 전체 그림 보기 🖼️
1. 데이터베이스 시스템(DBS)이란?
데이터베이스 시스템(DBS, DataBase System)은 단순히 데이터베이스(DB)나 데이터베이스 관리 시스템(DBMS)만을 의미하는 것이 아니라, 데이터베이스, DBMS, 그리고 이들을 사용하는 사람과 데이터 언어, 컴퓨터 하드웨어/소프트웨어까지 모두 포함하는 전체 시스템을 말합니다.
쉽게 말해, 데이터베이스를 활용하기 위한 모든 구성 요소의 집합체라고 할 수 있다.
2. 데이터베이스의 3단계 구조 🏛️
먼저 스키마와 인스턴스의 정의에 대해서 알아보자.
💡 스키마(Schema) vs 인스턴스(Instance)
- 스키마: 데이터베이스의 구조와 제약 조건에 대한 명세 (설계도)
- 인스턴스: 스키마에 따라 데이터베이스에 실제로 저장된 값 (설계도에 따라 지어진 실제 건물)
데이터베이스는 사용자의 관점이나 접근 방식에 따라 3가지 단계로 나누어 볼 수 있습니다. 이를 ANSI/SPARC 3단계 스키마 구조라고 합니다.
- 외부 단계 (External Level): 개별 사용자나 응용 프로그램의 관점에서 보는 데이터베이스 모습입니다. 사용자마다 필요한 데이터만 볼 수 있도록 정의하며, 여러 개의 **외부 스키마(External Schema)**가 존재할 수 있습니다. (서브 스키마라고도 한다). 또한 데이터베이스 하나에 외부 스키마가 여러 개 존재할 수 있다.
- 개념 단계 (Conceptual Level): 조직 전체의 관점에서 보는 데이터베이스 모습입니다. 데이터베이스에 저장되는 모든 데이터와 그 관계, 제약 조건 등을 통합적으로 정의합니다. 단 하나의 **개념 스키마(Conceptual Schema)**만 존재합니다. 개념 단계는 데이터베이스 하나에 개념 스키마가 하나만 존재한다.
- 내부 단계 (Internal Level): 물리적인 저장 장치 관점에서 보는 데이터베이스 모습입니다. 데이터가 실제로 어떻게 저장되는지(파일 구조, 인덱스 등)를 정의합니다. 단 하나의 **내부 스키마(Internal Schema)**만 존재합니다.내부 스키마도 마찬가지로 내부 스키마가 하나만 존재한다.
* 각 단계별로 다른 추상화(abstraction)을 제공한다. (내부 단계에서 외부 단계로 갈수록 추상화 레벨이 높아짐)
* 데이터베이스 구조의 사상 또는 매핑
- 스키마 사이의 대응 관계
- 외부/개념 사상: 외부 스키마와 개념 스키마의 대응 관계
=> 응용 인터페이스(application interface)라고 함. - 개념/내부 사상: 개념 스키마와 내부 스키마의 대응 관계
=> 저장 인터페이스(storage interface)라고 함
3. 데이터 독립성: 유연함의 핵심! 🤸♀️
3단계 구조로 나누는 가장 큰 이유는 데이터 독립성을 확보하기 위해서입니다. 데이터 독립성은 하위 단계의 스키마가 변경되더라도 상위 단계의 스키마나 응용 프로그램에 영향을 주지 않는 것을 의미한다.
- 논리적 데이터 독립성: 개념 스키마가 변경되어도 외부 스키마(응용 프로그램)는 영향을 받지 않습니다. DBMS가 중간에서 외부/개념 사상(매핑) 정보를 조정해주기 때문이죠.
- 물리적 데이터 독립성: 내부 스키마가 변경(예: 저장 장치 변경)되어도 개념 스키마 및 외부 스키마(응용 프로그램)는 영향을 받지 않습니다. DBMS가 개념/내부 사상 정보를 조정해줍니다.
4. 여러가지 용어들
1. 데이터 사전(data dictionary)
- 시스템 카탈로그(system catalog)라고 한다.
- 데이터베이스에 저장되는 데이터에 관한 정보, 즉 메타 데이터를 유지하는 시스템 데이터베이스
- 메타 데이터(meta data) : 데이터에 대한 데이터 - 데이터를 정확하고 효율적으로 이해하기 위해 참고해야 하는 스키마, 사상 정보, 다양한 제약조건 등을 저장
- 데이터베이스 관리 시스템이 스스로 생성하고 유지
- 일반 사용자도 접근이 가능하지만 저장 내용을 검색만 할 수 있음.
2. 데이터 디렉터리(data directory)
- 데이터 사전에 있는 데이터에 접근하는 데 필요한 위치 정보를 저장하는 시스템 데이터베이스
- 일반 사용자의 접근은 허용되지 않음.
3. 사용자 인터페이스(user database)
=> 사용자가 실제로 이용하는 데이터가 저장되어 있는 일반 데이터베이스
5.. 데이터 언어: DBMS와 소통하는 방법 🗣️
사용자는 데이터 언어를 통해 DBMS와 상호작용합니다. 데이터 언어는 사용 목적에 따라 크게 3가지로 나뉩니다.
- 데이터 정의어 (DDL: Data Definition Language): 데이터베이스 스키마(구조)를 생성(CREATE), 수정(ALTER), 삭제(DROP)하는 데 사용됩니다.
- 데이터 조작어 (DML: Data Manipulation Language): 데이터를 삽입(INSERT), 조회(SELECT), 수정(UPDATE), 삭제(DELETE)하는 데 사용됩니다.
- 데이터 제어어 (DCL: Data Control Language): 데이터의 무결성 유지, 보안(권한 부여 GRANT/회수 REVOKE), 병행 제어, 회복 등을 위한 명령어를 포함합니다.
6. 데이터베이스 사용자들 👥
데이터베이스를 이용하는 목적에 따라 사용자를 구분할 수 있어요.
- 데이터베이스 관리자 (DBA: DataBase Administrator): 데이터베이스 시스템 전체를 운영하고 관리하는 총책임자입니다. 스키마 정의, 보안 정책 수립, 성능 관리, 백업 및 회복 등 막중한 임무를 수행합니다. 주로 DDL과 DCL을 사용한다.
추가적으로 구성 요소 선정, 물리적 저장 구조와 접근 방법 결정, 제약 조건 정의, 재구성의 역할을 한다. - 최종 사용자 (End User): 응용 프로그램이나 질의어를 통해 데이터베이스에 접근하여 데이터를 활용하는 일반 사용자입니다. 주로 DML(주로 SELECT)을 사용합니다.
- 응용 프로그래머 (Application Programmer): 데이터베이스에 접근하는 응용 프로그램(예: 웹사이트, 앱)을 개발하는 사람입니다. 프로그램 코드 내에 DML을 삽입하여 데이터베이스 기능을 구현합니다.
7. DBMS 내부 들여다보기 👀
DBMS는 크게 질의 처리기와 저장 데이터 관리자로 구성됩니다.
- 질의 처리기 (Query Processor): 사용자의 데이터 처리 요구(SQL 등)를 해석하고 분석하여 최적의 실행 계획을 수립하고 실행합니다. DDL 컴파일러, DML 컴파일러, 트랜잭션 관리자 등을 포함합니다.
- 저장 데이터 관리자 (Stored Data Manager): 디스크에 저장된 데이터베이스 및 데이터 사전(메타데이터)을 관리하고, 효율적인 접근 방법을 제공합니다. 버퍼 관리, 파일 관리, 트랜잭션 관리 등의 역할을 수행합니다.
🎉 마무리하며
오늘은 데이터베이스의 기본 개념부터 DBMS, 그리고 데이터베이스 시스템의 전체 구조까지 폭넓게 살펴보았습니다. 데이터와 정보의 차이, 데이터베이스의 정의와 특징, 파일 시스템의 한계와 DBMS의 등장 배경, DBMS의 기능과 장단점, 3단계 스키마 구조와 데이터 독립성, 데이터 언어와 사용자 유형까지 다뤘습니다.