데이터베이스 Day 1
DBMS (Database Management System, 데이터베이스 관리 시스템)
데이터 저장, 검색, 업데이트, 관리를 위한 소프트웨어 '데이터베이스 관리 시스템'
- 대용량 데이터의 효율적인 처리와 접근을 가능하게 함.
- 데이터의 무결성, 보안, 백업 및 복구 기능 제공.
DB-Engines Ranking
회사마다 서비스 특징에 따라 쓰는 DB가 달라지니 하나만 고집하는 건 금물.
Oracle Database
- 대형 기업이나 복잡한 애플리케이션에 적합 (예. 은행, 금융권 등 해킹되면 x되는 곳)
- 비싼 라이선스 비용 - 단, 신뢰성과 서은ㅇ 매우 높음
MySQL
- 주로 웹 애플리케이션 및 소규모~중간 규모 프로젝트에서 사용
- 오픈소스에 사용이 쉬워서 소규모 앱에 인기 많음 (그래도 다 사용하려면 지불해야)
- Php와 통합 용이해 웹 개발에 자주 쓰임(LEMP Stack)
- 비교적 가벼우면서 성능 좋음, 다양한 운영 체제 지원
- 대규모 DB와 고급 기능이 필요한 환경에는 다소 제한적
Microsoft SQL Server
- 주로 중대형 기업에서 사용
- .NET과 같은 Microsoft 기술과 잘 통합
- Windows 기반 시스템에 최적화 (특히 마소 환경에서 뛰어난 성능)
- 사용자 친화적 관리도구, 강력한 보안 기능 제공
- 데이터 웨어하우징, 비즈니스 인텔리저스, 데이터 분석에 유용한 기능 포함
PostgreSQL
- 복잡한 쿼리와 대규모 데이터베이스 관리가 필요한 경우에 적합
- 객체-관계형 DBMS => 확장 가능한 고급 기능 제공
- 오픈 소스
- SQL 표준을 잘 준수함
- 복잡한 데이터 타입과 사용자 정의 함수 지원
- 거대한 데이터 세트와 복잡한 쿼리에 적합 => 높은 확장성과 성능 자랑
MySQL 쓰면서 PostgreSQL도 써보기를 강력 추천
MongoDB
- 빅데이터를 겨냥하고 나온 DB: 실시간 분석, 대규모 데이터 처리가 필요한 애플리케이션에 적합
- NoSQL 데이터베이스 중 하나: 문서 지향적 구조
- 스키마(Schema)가 없어 데이터 구조가 유연. 개발&확장이 쉬움
- JSON 형식의 문서 사용하여 데이터 저장, 데이터 샤딩(분산시키는 기술)을 기본적으로 지원
- 대용량 데이터 처리와 실시간 분석에 최적화
(= 로그데이터가 쌓이면 쌓일수록 실시간으로 빠르게 대응)
Redis (Remote Dictionary Server)
- NoSQL에 속함
- 고성능 key-value(키-값) 저장소: 주로 캐싱, 세션 관리, 게임 리더보드, 실시간 애플리케이션 등에서 사용 (실시간은 아님, 푸시로 지속 요청 보내는 것)
- 인메모리 데이터 스토어: 매우 빠른 읽기와 쓰기 속도 제공 (데이터 유실이 조금 높을 수 있음)
- 간단한 키-값 구조부터 리스트, 세트, 해시, 정렬된 세트 등 다양한 데이터 타입 지원
- 데이터 지속성을 위해 디스크에 스냅샷을 저장하거나, 변경 사항을 기록
- 마스터-슬레이브 복제, 자동 파티셔닝 기능 지원 => 뛰어난 확장성
Elasticsearch
- 분산 검색 엔진 : 복잡한 검색, 데이터 분석, 로그 및 데이터 집계에 사용
- RESTful API 통해 데이터 인덱싱, 검색, 분석 기능 제공
- JSON 형식 문서 인덱싱, 강력한 풀 텍스트 검색 기능
- ELK (Elasticsearch, Logstash, Kibana) 스택으로 널리 사용: 엘라스틱서치의 데이터를 저장하고, 로그스태쉬로 불러와서, 키바나로 시각화한다. => 대용량 데이터에 적합
- 높은 확장성과 실시간 분석능력
트래픽을 관리해야 하는 게 관건이라
SQLite
가볍다 ㅇㅇ
Snowflake
- 데이터 덩어리를 굉장히 빠르게 저장
- Saas 클라우드 기반 데이터 웨어하우스 : 대규모 데이터 저장, 분석, 공유 ㅔ사용
- 별도 하드웨어/소프트웨어 설치 없이 사용
Cassandra
- 대규모 분산 데이터베이스 -> 빅데이터
- 대규모 온라인서비스, IoT, 시계열 데이터 등 처리에 적합
MariaDB
- 모든 걸 다 유료로 서비스해버리는 오라클에 대항해서 나옴
- MySQL의 포크 => 웹 기반 애플리케이션, 데이터 웨어하우징, 개인 및 소규모 기업용 데이터베이스로 사용
- 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)
- MySQL과 높은 호환성.. 근데 결국 MySQL 쓰게 됨
Apache Hive
- 데이터를 처리, 관리하는 데 받는 DB의 부담을 줄여주기 위한
분산을 Hadoop이 되게 잘해줌 => 그 하둡 안에서 돌아가는 데이터 웨어하우스 시스템: 대규모 데이터 세트 저장, 쿼리 및 분석에 사용
- 데이터가 큰 회사인지 알 수 있는 척도일 정도?
Google BigQuery
- Google Cloud Platform의 완전 관리형 엔터프라이즈 데이터 웨어하우스
- 대용량 데이터 분석 및 SQL 쿼리 실행에 사용
- 서버리스 (인프라 걱정 ㄴ)
- BigQuery ML => SQL 붜리 내 머신러닝 모델 생성, 실행 가능
- 완전 관리형서비스 => 복잡한 인프라 관리 없이 즉각 분석 가능
BE 개발자는 전체 서비스를 설계하는 아키텍처를 지향해야 함. 그 아키텍처가 되기 위해서는 프레임워크도 잘 알아야 하지만, 데이터베이스 시스템, 특징들에 대해 이해해야 한다. 그리고 그 각각의 DB의 특징에 맞는 RDBMS를 사용해야 한다. 서비스, 기업에 따라 자기 데이터베이스를 직접 만들기도 한다(예. 배달의민족).