🗄️ 데이터베이스
전자적으로 저장되고 접근되는 데이터의 조직화된 모음
* In memory database 라는 것도 있음 (ssd에 저장하지 않고 캐시같은 곳에 넣어두는 듯)
데이터를 한 곳에 모아둔 것
DB(DatatBase) → 관리하는 시스템 : DBMS(DataBase Management System)
구조
- 테이블 : 데이터 저장
- 레코드(행) : 단일 항목 (개별 데이터)
- 필드(열) : 테이블의 항목 (컬럼)
- 기본 키 : 고유 식별 키 (PK)
- 외래 키 : 두 테이블 연결할 때 사용하는 고유 식별 필드 (FK)
- 정규화 : 중복 줄이고 데이터 무결성 개선
- 트랜잭션 : 논리적으로 하나의 작업 단위로 수행되는 일련의 작업
- 인덱스 : 검색x, 데이터를 빠르게 찾기 위해서 구조를 생성하여 데이터 검색 속도를 높이기 위해 사용 → NoSQL에서 더 많이 사용한다
- 쿼리 : SQL(구조화된 질의 언어)
🗃️ 데이터베이스 유형
- 관계형 : MySQL, PostgreSQL → 구조화된 데이터, 복잡한 쿼리, ACID
- 키-값 : Redis, DynamoDB → 초고속, 간단한 데이터 조회
- 문서형 : MongoDB, CouchDB → JSON과 유사한 형식의 반구조화된 데이터
- 그래프 : Neo4j, ArangoDB → 복잡한 데이터 관계
- 와이드 칼럼 : Cassandra, HBase → 대규모, 고속 쓰기 처리 시나리오
- 인메모리 : Redis, Memcached → 마이크로초 응답
- 시간 시리즈 : InfluxDB, TimescaleDB → 효율적인 시간 기반
- 객체 지향 : db4o, ObjuectDB
- 텍스트 검색 : ElasticSearch, Solr
- 공간 데이터 : PostGIS, SptiaLite
등... 이 있다. 걍 필요할 때 찾아서 공부하고 써야겠다... 너무 많다.
관계형 데이터베이스
열과 행을 갖는 2차원 테이블 중심으로 설계된 db
- 각 행은 하나의 레코드, 각 열은 데이터 속성을 나타냄
- MySQL, PostgreSQL, Oracle, Microsoft SQL Server
- 구조화된 데이터에 적합, 고객 정보, 금융 데이터 및 전자상거래 응용 프로그램에 자주 사용
NoSQL 데이터베이스
관계형 X, 비정형 또는 반정형 데이터(문서, 그래프, 키-값 쌍)를 처리하기 위해 설계
유형
- 문서지향 : JSON과 유사한 문서 형태로 저장 ex. MongoDB
- 키-값 데이터베이스 : 키-값 쌍으로 저장 ex. Redis
- 그래프 데이터베이스 : 데이터를 노드와의 관계로 저장 ex. Neo4j
- 컬럼 패밀리 데이터베이스 : 데이터를 행이 아닌 열로 저장 ex. Cassandra
수평 확장성, 유연한 스키마가 필요한 응용 프로그램 또는 빅데이터 및 실시간 웹 앱에 사용
인메모리 데이터베이스
데이터를 디스크가 아닌 시스템의 주 메모리에 저장하여 빠르게 데이터에 액세스
- 속도가 중요한 응용 프로그램에 저장
- 캐싱, 게임 리더보드, 금융 거래 시스템과 같이 실시간 응용 프로그램에서 빠른 응답 시간이 요구될 때
- ex. Redis, Memcached, SAP HANA
조회가 자주 일어나는 데이터베이스를 바로 사용할 수 있게 하기 위해서 사용 (대용량 x)
분산 데이터베이스
여러 위치에 걸쳐 데이터를 저장하는 데이터베이스, 여러 서버나 지리적으로 분산된 위치에 저장
가용성, 장애 내성 향상, 높은 가용성이 중요한 글로벌 응용 프로그램에 사용
- ex. Google Spanner, Apache Cassandra
객체 지향 데이터베이스(OODB)
객체 지향 프로그래밍(OOP) 언어와 유사하게 데이터를 객체로 저장
일부 영역에서만 사용
그래프 데이터베이스
데이터 포인트 간의 관계를 저장하고 쿼리하는데 특화된 데이터베이스
관계가 데이터만큼 중요한 사용 사례에 적합
데이터는 노트(엔터티)와 엣지(관계)로 저장
📤 SQL 개념
관계형 데이터베이스를 조작하기 위해 만들어진 표준 언어, 데이터베이스 관리 시스템(DBMS)과 통신하기 위한 언어
📨 SQL 명령어
-
데이터 정의 언어 (DDL)
- 데이터베이스 구조 정의, 수정
- 객체 생성, 변경, 삭제 작업
CREATE, ALTER, DROP, TRUNCATE
-
데이터 조작 언어 (DML)
- 테이블 내의 데이터 조작
- 데이터 검색, 삽입, 수정, 삭제
SELECT, INSERT, UPDATE, DELETE
-
트랜잭션 제어 언어 (TCL)
- 데이터베이스에서 트랜잭션 관리하는데 사용
- 여러 DML 작업을 트랜잭션 단위로 관리, 커밋 또는 롤백 제어
COMMIT, ROLLBACK, SAVEPOINT
-
데이터 제어 언어 (DCL)
- 데이터베이스 시스템에 대한 접근 권한 제한
- 사용자 권한 설정/제거, 리소스에 대한 접근 제어
GRANT, REVOKE
🐬 MySQL
주요 기능
(1) 데이터베이스 관리
(2) SQL 쿼리 언어 지원
(3) 트랜잭션 관리
- ACID (Atomicity, Consistency, Isolation, Durability) 속성을 지원하여 데이터 무결성 보장
- Atomicity(원자성) : 모든 작업은 모두 성공하거나 모두 실패
- Consistency(일관성) : 데이터가 일관된 상태로 유지
- Isolation(독립성): 독립적으로 실행
- Durability : 영구적으로 기록
(4) 인덱스 (Index)
- 테이블에서 데이터를 더 빠르게 검색 (검색 성능 향상)
(5) 저장 프로시저 (Stored Procedure)
- 반복적으로 수해외는 복잡한 작업을 자동화 (쿼리 성능 최적화)
(6) 복제
(7) 보안
특징
- 오픈 소스
- 다중 사용자 및 다중 스레드
- 플랫폼 독립성 - 여러 운영체제에서 동작, 다양한 프로그래밍 언어와의 통합 지원
- 높은 성능과 확장성
- 다양한 저장 엔진 - InnoDB(트랜잭션 세이프 스토리지 엔진...이라고 함)
본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다