현재 포스트는 이후에 습득한 지식으로 인해 내용이 추가, 수정, 삭제될 수 있음
데이터베이스는 구조화된 데이터를 효율적으로 저장, 검색, 관리할 수 있도록 설계된 시스템이다.
데이터베이스 시스템(!=데이터베이스)
데이터베이스와 이를 관리하는 소프트웨어(데이터베이스 관리 시스템, DBMS)를 포함하는 전체 시스템을 데이터베이스 시스템이라고 한다.
사용자와 응용 프로그램이 데이터베이스와 상호작용할 수 있도록 하는 환경을 제공
데이터베이스와 파일 시스템은 정보를 저장, 검색, 관리하는 두 가지 기본적인 방법이다.
아래와 같은 차이가 있다.
- 구조화된 데이터 관리
데이터베이스는 구조화된 데이터 관리에 최적화되어 있다.
반면, 파일 시스템은 파일과 폴더의 형태로 데이터를 저장한다.- 검색 및 질의 처리
데이터베이스는 SQL(Structured Query Language)과 같은 질의 언어를 사용하여 복잡한 검색과 데이터 조작을 수행할 수 있다.
반면에 파일 시스템에서는 주로 파일 이름이나 파일 내용에 기반한 기본적인 검색 기능만 제공된다.- 동시성 및 트랜잭션 관리
데이터베이스는 동시에 여러 사용자가 데이터에 접근하고 수정할 수 있도록 지원한다.
이를 위해 트랜잭션 관리 및 락킹(Locking) 메커니즘을 제공하여 데이터의 일관성과 정확성을 보장한다. 파일 시스템은 이러한 복잡한 트랜잭션 관리 기능을 기본적으로 제공하지 않는다.
데이터를 행과 열로 구성된 테이블로 구성하며 SQL을 사용하여 데이터를 검색하고 관리
아래와 같은 특징이 있음
- 데이터의 분류, 정렬, 탐색 속도가 빠름
- 신뢰성이 높고, 어떠한 상황에서도 데이터의 무결성을 보장
- SQL이라는 표준 언어로 관리가 가능하기에 개발 언어, 데이터베이스 종류 등에 변화가 있어도 기존에 사용하던 애플리케이션은 그대로 사용이 가능
- 기존에 작성된 스키마를 수정하기가 어려움
- 데이터베이스의 부하를 분석하는 것이 어려움
테이블들 간의 논리적 연결(관계)을 통해 데이터를 조직화 하며 이 관계는 아래와 같음
연관 관계(1:1, 1:N, N:M)

일대일 = 나 : 내 핸드폰 = 유저 : 프로필
나는 1개의 핸드폰을 가지고, 유저는 1개의 프로필정보를 가짐
일대다 = 나 : 담임 선생님 = 유저 : 게시글
각 반에는 한 명의 담임선생님과 여러 명의 학생이 존재
다대다 = 나 : 동아리 = 게시글 : 해시테그
여러 동아리는 각자 여러 명의 회원을 가지고 있을 것이고, 같은 사람이 여러 개의 동아리에 가입할 수 있음
예: MySQL, PostgreSQL, Oracle, SQL Server 등
관계형 데이터베이스의 엄격한 구조에서 벗어나 다양한 데이터 모델을 지원
주로 대규모 분산 데이터 처리에 적합
유형: 문서(Document), 키-값(Key-Value), 와이드 컬럼(Wide-Column), 그래프(Graph) 등
예: MongoDB(문서), Redis(키-값), Cassandra(와이드 컬럼), Neo4j(그래프) 등
객체 지향 데이터베이스(Object-Oriented Database)
데이터를 객체로 저장하며, 객체 지향 프로그래밍 언어의 개념을 활용하여 데이터를 관리
데이터를 더 자연스럽게 모델링할 수 있으며, 복잡한 데이터 관계를 효과적으로 처리할 수 있음
예: ObjectDB, db4o 등
그래프 데이터베이스(Graph Database)
데이터를 노드, 관계, 속성의 그래프 구조로 표현
복잡한 네트워크 연결과 관계를 효율적으로 탐색하고 분석 가능
예: Neo4j, ArangoDB 등
인메모리 데이터베이스(In-Memory Database)
데이터를 디스크가 아닌 메모리(RAM)에 저장하여 빠른 데이터 처리 속도를 제공
실시간 처리와 빠른 응답 시간이 필요한 애플리케이션에 적합
예: Redis, SAP HANA 등
데이터를 네트워크 상의 여러 컴퓨터에 분산하여 저장
대규모 데이터 처리와 고가용성(Capacity)을 제공
예: Cassandra, Couchbase 등

DBMS란 Database Management system의 준말로 데이터베이스에 여러 사용자가 접근하여 데이터를 저장 및 관리 등의 기능을 수행하며 공유할 수 있는 환경을 제공하는 응용 소프트웨어 프로그램을 말한다.
ORACLE, My SQL 등이 대표적인 DBMS 제품이다.
트랜젝션은 데이터베이스의 상태를 변화시시키 위해 수행하는 작업의 단위로 하나 이상의 SQL 명령문을 포함한다.
DBMS는 트랜젝션을 처리할 때 아래와 같이 ACID를 만족해야 한다.
원자성(Atomicity)
트랜잭션 내의 모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 함을 의미
일관성(Consistency)
트랜젝션 전과 후의 데이터베이스가 일관된 상태를 유지하는 것을 의미
즉 DB의 요구사항인 무결성이 트랜젝션 전과 후에도 만족해야하는 것을 의미
트랜잭션은 여러 작업을 하나의 단위로 묶어서, 작업이 하나라도 실패할 경우 전체 작업을 취소(롤백)하여 데이터의 일관성을 유지
고립성(Isolation)
트랜잭션이 처리되는 동안, 하나의 트랜잭션이 다른 트랜잭션에 의해 변경되거나 접근되지 않도록 보장하는 속성
고립성은 동시에 실행되는 트랜잭션들이 서로 간섭하지 않도록 함
지속성(Durability)
성공적으로 완료된 트랜잭션에 의해 변경된 데이터는 시스템이 고장 나더라도 유지되어야 하는 특성
즉, 트랜잭션이 커밋되면, 그 결과는 영구적으로 데이터베이스에 반영되어야 하는 특성
SQL은 관계형 데이터베이스에서 사용되는 문법이다.
ORACLE, My SQL과 같은 DBMS는 표준 SQL을 준수하면서 각 DBMS의 특성이 반영된 SQL을 사용한다.
따라서 표준 SQL을 익히면 대부분의 DBMS에 공통적으로 적용할 수 있다.
SQL 언어 분류
DDL(Data Definition Language)
데이터 정의어, 관계형 데이터베이스의 구조를 정의하는 언어
(CREATE, ALTER, DROP, RENAME 등)
DML(Data Manipulation Language)
데이터 조작어, 테이블에서 데이터를 입력, 수정, 삭제, 조회
(INSERT, UPDATE, DELETE, SELECT 등)
DCL(Data Control Language)
데이터 제어어, 데이터베이스 사용자에게 권한을 부여하거나 회수
(GRANT, REVOKE, TRUNCATE 등)
TCL(Transaction Control Language)
트랜잭션을 제어하는 명령어
(COMMIT, ROLLBACK, SAVEPOINT 등)
표준 SQL 문법을 따르는 DBMS 종류
Oracle, MySQL, PostgreSQL, MariaDB, SQLite
Not Only SQL(SQL 뿐만이 아닌. 이라는 뜻)의 줄임말로 전통적인 관계형 데이터베이스 관리 시스템(RDBMS)의 구조를 따르지 않는 데이터베이스의 총칭
기존의 관계형 데이터베이스의 한계를 뛰어넘기 위해 만들어진 새로운 형태의 데이터베이스라서, 관계형 데이터베이스보다 더 융통성 있는 데이터 모델을 사용하며, 데이터의 저장 및 검색에 특화된 메커니즘을 제공
대부분 분산 환경에서의 데이터 처리를 더욱 빠르게 하기 위해 개발
NoSQL DB를 사용한 DBMS 종류
MongoDB, Redis, DynamoDB, HBase, Neo4j