해당 글은 SQLite3로 가볍게 배우는 데이터베이스와 TCPSchool을 기반을 작성됐음을 밝힙니다. 추가적으로 개발자 인터뷰 대비 Github을 바탕으로 내용을 보완했습니다.
- 데이터베이스: 컴퓨터에 체계적으로 저장한 데이터
- DBMS: 데이터베이스를 관리하는 시스템, 데이터베이스를 관리하는 별도의 미들웨어(응용 프로그램 X)
=> 2개의 용어는 크게 구분하지 않습니다.
파일 시스템 < 데이터베이스의 특징
- 파일 시스템의 단점 보완 = 데이터베이스를 사용하는 이유
- 파일 시스템의 단점: 중복 데이터가 많이 발생하고, 데이터의 일관성이 떨어지며 보안, 백업/복구가 불편한 문제가 있습니다. 즉, 데이터 종속성, 중복성, 무결성의 이슈가 있습니다.
- 데이터의 모델링, 무결성, 다수 사용자를 위한 동시성 제어 등을 제공합니다. (간략한 설명)
- 사용자의 질의에 대해 즉각적인 처리와 응답이 이루어집니다.
- 생성, 수정, 삭제를 통해 항상 최신의 데이터를 유지합니다.
- 사용자들이 원하는 데이터를 동시에 공유할 수 있습니다.
- 사용자가 원하는 데이터를 주소가 아닌 내용에 따라 참조할 수 있습니다.
- 응용 프로그램과 데이터베이스는 독립되어 있으므로, 데이터의 논리적 구조와 응용 프로그램은 별개로 동작됩니다. => 물리적 독립성
- 데이터의 독립성, 무결성, 보안성, 일관성, 중복 최소화
데이터베이스의 종류
관계형 데이터베이스(RDBS)
- 데이터의 종속성을 관계로 표현합니다.
- relation(관계) = table(테이블): key와 value의 relation을 나타냅니다.
- primary key(기본키): candidate key 중에 DB 설계자가 지정한 속성, row의 식별자로 이용되는 column
- candidate key(후보키): table에 저장된 record를 고유하게 식별하는 key
- foreign key(외래키): 한 table의 key 중에서 다른 table의 row를 식별할 수 있는 key
- 관계의 종류: one-to-one, one-to-many, many-to-many
- tuple = row = record: 관계된 데이터의 묶음을 의미합니다.
- attribute(속성) = column = field: 자신만의 type을 가집니다.
- schema(스키마): 데이터의 구조적 특성을 의미하는 것으로 데이터 논리적 단위 사이의 관계성을 표현한 것입니다. 사용자의 관점에 따라 외부/개념/내부 스키마로 구분됩니다.
- 사용자의 관점에 따른 스키마의 종류 - https://121202.tistory.com/19
- 특징
- 데이터의 분류, 정렬, 탐색 속도가 빠릅니다.
- 신뢰성이 높고, 어떤 상황에서도 데이터의 무결성을 보장해줍니다. (?)
- 기존에 작성된 schema를 수정하기 어렵습니다.
- 데이터베이스의 부하를 분석하는 것이 어렵습니다. (?)
- Oracle, MySQL, MariaDB, PostgreSQL, SQLite
- SQLite의 장점: 작은 규모의 웹사이트에 사용하기 적합합니다.
- MySQL vs. PostgreSQL vs. SQLite
- SQLite vs. MySQL - https://www.ciokorea.com/tags/77388/SQLite/117231
- MySQL vs. PostgreSQL vs. SQLite - https://smoh.tistory.com/369
계층형 데이터베이스
- 데이터를 계층적인 tree로 표현합니다. 데이터는 record로서 저장되며 record들은 link를 통해 연결됩니다.
- record: field들의 모음입니다.
- field: 단일한 값을 가집니다.
그래프 데이터베이스
- Neo4J, Amazon Neptune, TigerGraph, Oracle Graph Database, Azure Cosmos DB
NoSQL?
- 관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화되어있습니다.
- 스키마 없이 사용 가능하거나, 느슨한 스키마를 제공하는 저장소를 말합니다.
- 동적인 스케일 아웃, 가용성(내고장성, 모든 클라이언트의 읽기와 쓰기 요청에 대해 항상 응답이 가능함을 보증하는 것)을 위한 데이터 복제 등의 방법으로 관계형 데이터베이스가 제공하지 못 하는 성능과 특징을 제공합니다.
- 저장 방식에 따라 key-value, document, column, graph model로 분류할 수 있습니다.
- Redis, MongoDB, Cassandra, Neo4J
SQL
RDBS의 데이터를 정의, 조작, 제어하기 위해 사용하는 언어입니다.
DDL(Definition)
- 생성, 변경, 제거
- CREATE, ALTER, DROP, TRUNCATE
- SQLite에는 TRUNCATE문이 없습니다.
DML(Manipulation)
- 추가, 삭제, 갱신, 조회
- INSERT, DELETE, UPDATE, SELECT
DCL(Control)
- 데이터의 보안성, 무결성 등을 제어
- GRANT, REVOKE