01. DB기초
Notion 무료로 사용하기

01. DB기초

데이터베이스(Database, DB)란?

(1) 데이터 저장소(DB)란?
효율적인 데이터 관리
데이터를 통합하여 관리
데이터 누락 및 중복 방지
DBMS 특징 (ACID)
데이터 독립성 : 물리적, 논리적 독립성
데이터 무결성 : 데이터의 유효성 검사를 통해 데이터 무결성을 구현
데이터 보안성 : 계정관리, 권한 설정
데이터 일관성 : 데이터의 불일치성을 배체
여러 사용자가 실시간으로 데이터 사용이 가능
DB라는 것이 있기 전에는 파일 형태로 데이터를 관리
파일 형태의 가장 큰 문제점은 데이터를 업데이트 하면 기존 버전의 데이터를 알 수 없다는 것.
(2) DB의 역사
1963년 SDC(Sysytem Development Corporation)에서 개최한 세미나에서 처음 등장.
(3) 데이터 모델: 데이터를 어떻게 저장하고 관리할지에 대한 방법의 차이
계층형 데이터 모델:
윈도우 파일 시스템의 디렉터리 구조를 연상하면 되겠다. 정보를 디렉터리 형태로 분류하기 때문에, 복잡한 구조를 묘사할 수 없다는 단점
구조: 데이터를 트리 구조로 표현하며, 각 레코드는 하나의 상위 레코드에 대한 하위 레코드를 가질 수 있습니다.
특징: 상위 레코드와 하위 레코드 간의 부모-자식 관계가 정의되어 있습니다. 주로 트리 구조로 표현되는 조직도나 파일 시스템과 같은 계층적인 데이터에 유용합니다.
네트워크형 데이터 모델:
계층형 데이터베이스의 단점을 보완하기 위해 자료간 연결(link)을 망(network) 형태로 자유롭게 연결할 수 있도록 개선했다. 그러나 자료구조 변경시 디스크에 저장된 데이터의 물리적 구조를 재구성해야하는 번거로움이 존재
구조: 계층형 데이터 모델과 유사하지만, 각 레코드는 여러 부모 레코드를 가질 수 있습니다. 부모와 자식 간의 관계가 복잡합니다.
특징: 각 레코드 간의 관계를 명시적으로 정의하며, 네트워크 형태의 그래프로 표현됩니다. 주로 복잡한 데이터 관계를 다루는데 사용됩니다.
관계형 데이터 모델:
구조: 테이블 형태로 데이터를 저장하며, 각 테이블은 레코드(행)과 필드(열)로 구성됩니다. 테이블 간에 관계를 정의하여 데이터를 관리합니다.
특징: 표 형태로 데이터를 저장하고 SQL(Structured Query Language)을 사용하여 데이터를 조작합니다. 가장 널리 사용되는 데이터 모델 중 하나이며, 관계형 데이터베이스 시스템(RDBMS)에서 지원됩니다.
객체 지향형 데이터 모델:
구조: 현실 세계의 개체(Entity)와 그들 간의 상호 작용을 모델링합니다. 클래스와 객체의 개념을 기반으로 합니다.
특징: 데이터와 해당 동작을 함께 캡슐화하며, 객체 간의 관계를 강조합니다. 소프트웨어 개발에서 객체 지향 프로그래밍 언어에서 주로 사용됩니다.
Ravi라는 고객 객체 데이터
해당 고객 데이터는 성(sName)이 'Ravi', 이름(fName)이 'Eluru' 데이터가 존재.
또한 해당 고객 데이터 객체는 두 개의 주소 객체(Pune, Delhi)와 하나의 은행 계좌 객체로 연결되어 있습니다.
위 모델은 객체 지향 데이터베이스에서 한 객체가 여러 관련 객체와 관계를 맺을 수 있음을 보여줍니다.
객체와 객체 간의 관계, 테이블과 테이블 간의 관계
(4) 정리
여러 형태의 데이터 베이스를 살펴보았는데요. 현재까지도 관계형 데이터 베이스가 중요하게 활용되는 이유는 사람들이 이해하기 쉬운 2차원 표 형태로 데이터를 저장하면서도, 매우 복잡한 자료의 데이터를 정교하게 조합할 수 있다는 특징에서 기인하는 것 같습니다. 그렇기 때문에 Back-end 영역에서의 RDBMS를 이해하는 것은 굉장히 중요하다고 할 수 있겠습니다.

DBMS란?

DBMS (Database Management System)란?
DBMS는 데이터베이스 관리 시스템으로, 데이터의 저장, 검색, 업데이트, 관리를 위한 소프트웨어입니다. DBMS는 대용량 데이터의 효율적인 처리와 접근을 가능하게 하며, 데이터의 무결성, 보안, 백업 및 복구 기능을 제공합니다.
주요 DBMS 종류 및 특징
1. Oracle Database
용도: 대형 기업이나 복잡한 애플리케이션에 적합하며, 고성능, 대규모의 트랜잭션 처리와 데이터 웨어하우징에 자주 사용됩니다.
특징:
강력한 트랜잭션 관리, 높은 데이터 무결성 및 보안 기능을 제공합니다.
확장성이 뛰어나며, 다양한 운영 체제에서 실행됩니다.
PL/SQL이라는 Oracle 전용 프로그래밍 언어를 사용합니다.
비싼 라이선스 비용이 있지만, 대규모 엔터프라이즈 환경에서의 신뢰성과 성능은 매우 높습니다.
2. MySQL
용도: 주로 웹 애플리케이션 및 소규모에서 중간 규모의 프로젝트에 사용됩니다.
특징:
오픈 소스이며, 사용이 쉬워 소규모 애플리케이션에 인기가 많습니다.
PHP와의 통합이 용이하여 웹 개발에 자주 쓰입니다. (LEMP Stack)
비교적 가벼우면서도 성능이 좋으며, 다양한 운영 체제를 지원합니다.
대규모 데이터베이스와 고급 기능이 필요한 환경에는 다소 제한적일 수 있습니다.
3. Microsoft SQL Server
용도: 주로 중대형 기업에서 사용되며, .NET과 같은 Microsoft 기술과 잘 통합됩니다.
특징:
Windows 기반 시스템에 최적화되어 있어, Microsoft 환경에서 뛰어난 성능을 발휘합니다.
사용자 친화적인 관리 도구와 강력한 보안 기능을 제공합니다.
데이터 웨어하우징, 비즈니스 인텔리전스, 데이터 분석에 유용한 기능을 포함하고 있습니다.
4. PostgreSQL
용도: 복잡한 쿼리와 대규모 데이터베이스 관리가 필요한 경우에 적합합니다.
특징:
객체-관계형 DBMS로, 확장 가능한 고급 기능을 제공합니다.
오픈 소스이며, SQL 표준을 잘 준수합니다.
복잡한 데이터 타입과 사용자 정의 함수를 지원합니다.
거대한 데이터 세트와 복잡한 쿼리에 적합하며, 높은 확장성과 성능을 자랑합니다.
5. MongoDB
용도: 실시간 분석, 대규모 데이터 처리가 필요한 애플리케이션에 적합합니다.
특징:
NoSQL 데이터베이스 중 하나로, 문서 지향적 구조를 갖고 있습니다.
스키마가 없어 데이터 구조가 유연하고, 개발과 확장이 쉽습니다.
JSON 형식의 문서를 사용하여 데이터를 저장하며, 데이터 샤딩을 지원합니다.
대용량 데이터 처리와 실시간 분석에 최적화되어 있습니다.
6. Redis (Remote Dictionary Server)
용도: 고성능 키-값 저장소로, 주로 캐싱, 세션 관리, 게임 리더보드, 실시간 애플리케이션 등에서 사용됩니다.
특징:
인메모리 데이터 스토어로, 매우 빠른 읽기와 쓰기 속도를 제공합니다.
간단한 키-값 구조부터 리스트, 세트, 해시, 정렬된 세트 등 다양한 데이터 타입을 지원합니다.
데이터 지속성을 위해 디스크에 스냅샷을 저장하거나 변경 사항을 기록합니다.
마스터-슬레이브 복제, 자동 파티셔닝 기능을 지원하여 확장성이 뛰어납니다.
7. Elasticsearch
용도: 분산 검색 엔진으로, 복잡한 검색, 데이터 분석, 로그 및 데이터 집계에 사용됩니다.
특징:
RESTful API를 통해 데이터 인덱싱, 검색, 분석 기능을 제공합니다.
JSON 형식의 문서를 인덱싱하며, 풀 텍스트 검색 기능이 강력합니다.
높은 확장성과 실시간 분석 능력을 갖고 있습니다.
ELK(Elasticsearch, Logstash, Kibana) 스택으로 널리 사용되며, 대용량 데이터에 적합합니다.
8. SQLite
용도: 경량, 자체 포함, 서버리스, 제로-구성 데이터베이스로, 임베디드 시스템 및 모바일 애플리케이션에 주로 사용됩니다.
특징:
파일 기반의 데이터베이스로, 별도의 서버 설정이 필요 없습니다.
작고 가볍지만, SQL 표준을 상당 부분 지원합니다.
ACID(Atomicity, Consistency, Isolation, Durability) 트랜잭션을 지원합니다.
설치가 필요 없으며, 매우 적은 리소스를 사용합니다.
9. Snowflake
용도: 클라우드 기반의 데이터 웨어하우스로, 대규모의 데이터 저장, 분석 및 공유에 사용됩니다.
특징:
클라우드에서 완전 관리되는 서비스로, 유연한 확장성을 제공합니다.
데이터 웨어하우징 및 빅데이터 분석에 최적화되어 있습니다.
별도의 하드웨어나 소프트웨어 설치 없이 사용할 수 있습니다.
고유한 아키텍처를 사용하여, 저장, 컴퓨팅, 서비스 계층을 분리합니다.
10. Cassandra
용도: 대규모 분산 데이터베이스로, 큰 규모의 데이터를 관리하고, 높은 가용성과 확장성이 필요한 환경에서 사용됩니다.
특징:
NoSQL 데이터베이스로, 분산 환경에서 뛰어난 확장성과 성능을 제공합니다.
데이터는 여러 노드에 걸쳐 분산 저장되며, 하나의 노드가 실패해도 데이터 손실 없이 운영됩니다.
컬럼 기반의 데이터 스토리지 모델을 사용하며, 행의 각 열은 독립적으로 저장됩니다.
높은 쓰기 및 읽기 처리량을 지원하며, 데이터 복제를 통해 고가용성을 보장합니다.
특히, 대규모 온라인 서비스, IoT, 시계열 데이터 등의 처리에 적합합니다.
11. MariaDB
용도: MySQL의 포크로, 웹 기반 애플리케이션, 데이터 웨어하우징, 개인 및 소규모 기업용 데이터베이스로 사용됩니다.
특징:
오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
MySQL과의 높은 호환성을 유지하면서도, 여러 가지 새로운 기능과 최적화가 추가되었습니다.
스토리지 엔진의 다양성을 지원하며, 성능과 보안 면에서 개선되었습니다.
강력한 쿼리 최적화, 복제 및 샤딩 기능을 제공합니다.
커뮤니티 중심의 개발 모델을 따르며, MySQL 대비 개방적이고 확장성 있는 대안으로 자리잡고 있습니다.
12. Apache Hive
용도: Hive는 Hadoop 위에 구축된 데이터 웨어하우스 시스템으로, 대규모 데이터 세트의 저장, 쿼리 및 분석에 사용됩니다.
특징:
Hadoop의 저장 시스템인 HDFS(Hadoop Distributed File System) 위에서 작동합니다.
SQL과 유사한 HiveQL 쿼리 언어를 제공하여, SQL 사용자가 Hadoop 데이터를 쉽게 쿼리할 수 있게 해줍니다.
Hive는 대량의 데이터를 처리할 수 있으나, 실시간 쿼리 처리에는 최적화되어 있지 않습니다.
배치 처리와 데이터 분석, 보고서 생성에 적합합니다.
데이터는 빅 데이터 환경에서의 병렬 처리를 위해 여러 노드에 분산 저장됩니다.
Hadoop 생태계의 일부로서 복잡한 배치 처리 작업에 적합하며, 자체 인프라 관리가 필요합니다.
13. Google BigQuery
용도: BigQuery는 Google Cloud Platform의 완전 관리형 엔터프라이즈 데이터 웨어하우스로, 대용량 데이터 분석 및 SQL 쿼리 실행에 사용됩니다.
특징:
서버리스이며, 사용자는 인프라 관리에 대해 걱정할 필요가 없습니다.
빠른 속도로 대규모 데이터 세트에 대한 SQL 쿼리를 실행할 수 있습니다.
데이터 샤딩 및 복제를 자동으로 관리하며, 고가용성을 제공합니다.
대용량 데이터 세트에 대한 실시간 분석 및 인터랙티브한 데이터 탐색이 가능합니다.
BigQuery ML을 통해 SQL 쿼리 내에서 머신러닝 모델을 생성하고 실행할 수 있습니다.
BigQuery는 완전 관리형 서비스로서 복잡한 인프라 관리 없이 즉각적인 분석을 가능하게 합니다.