[F-Lab 모각코 챌린지] 15일차 - Database 기본 개념과 설명
F-Lab 모각코 챌린지 15일차를 진행하며 Database 에 대해 정리한 내용입니다. Database 의 종류, RDBMS 의 용어와 개념 설명, 인덱스의 종류와 간단한 설명을 기록하였습니다
![[F-Lab 모각코 챌린지] 15일차 - Database 기본 개념과 설명](/content/images/size/w1200/2023/06/-------_--------_-------9.png)
Database
기본 개념
Database 는 구조화 된 데이터의 모음을 저장, 관리, 조작 하기 위한 시스템
여러 사용자나 응용 프로그램이 동시에 접근하고 데이터를 공유하며 데이터의 정확성과 일관성을 보장하기 위해 설계되어 있다
역할
- 데이터의 조작 및 검색
- 무결성 유지
- 백업 및 복구
- 동시 엑세스 제어
- 데이터 보안
- 관계 관리
종류
관계형 데이터베이스(RDBMS: Relational Database Management System)
- 테이블의 형태로 데이터를 생성, 조회, 수정, 관리할 수 있는 시스템
- 테이블은 행과 열로 구성, 각 테이블은 서로 연관될 수 있음
- SQL 을 사용하여 데이터를 쿼리하고 관리
- ex) Oracle, MySql, MSSQL, PostgreSQL
NoSQL 데이터베이스
- 비구조적인 데이터를 저장하고 관리하는데 적합한 데이터베이스
- 여러 하위 유형이 존재
- Document Store: JSON, BSON 과 같은 문서 형식으로 데이터를 저장.
(ex: MongoDB, Couchbase)
- Key-Value Store: 키와 값 쌍으로 데이터를 저장. 빠른 저장 및 검색이 가능.
(ex: Redis, Amazon DynamoDB)
- Column Family Store: 컬럼 기반으로 데이터를 저장. 대량의 데이터를 빠르게 쓰고 읽는데 적합
(ex: Apache Cassandra, HBase)
- Graph Database: 그래프 구조를 사용하여 데이터 간의 관계를 표현. 복잡한 관계를 가진 데이터를 다루는데 유용함
(ex: Neo4j, Amazon Neptune)
오브젝트 지향 데이터베이스(OODBMS, Object-Oriented Database Management System)
- 객체 지향 패러다임을 기반으로 데이터를 저장
- 데이터를 객체로 모델링하고 클래스와 상속 등의 개념을 사용함
- ex: db4o, ObjectDB
타임시리즈 데이터베이스 (Time-Series Database)
- 시간에 따라 변하는 데이터를 저장하고 관리하는데 특화되어있는 데이터베이스
- 로깅, 모니터링, IoT 데이터 분석에 사용됨
- ex: InfluxDB, TimescaleDB
XML 데이터베이스(XML Database)
- XML 형식의 데이터를 저장하고 관리
- XML 문서의 저장, 쿼리, 처리를 지원
- ex: eXist-db, BaseX
NewSQL 데이터베이스
- RDBMS 의 ACID 트랜잭션과 NoSQL 의 수평적 확장성을 결합한 데이터베이스
- ex: CockroachDB, NuoDB
관계형 데이터베이스 용어 설명
주로 웹 애플리케이션에서는 관계형 데이터베이스를 주로 사용하기 때문에 해당 데이터베이스 내의 개념과 키워드를 정리
스키마(Schema)
- 데이터베이스의 구조와 조직을 정의하는 데 사용
- 테이블, 뷰, 인덱스, 관계, 제약 조건등을 정의하는데 사용되는 로직 집합
- 데이터베이스의 틀이나 청사진으로 생각 할 수 있으며 데이터가 어떻게 저장될지에 대한 정보를 제공
- 스키마는 일반적으로 데이터베이스 설계 단계에서 정의된다
- 실제 데이터를 저장하지는 않는다
테이블(Table)
- 스키마에 정의된 대로 데이터베이스에 저장되는 실제 데이터의 집합
- 행(Row) 과 열(Column) 으로 구성되며 이를 통해 구조화된 데이터를 저장
- 테이블은 스키마 내에 존재하며, 스키마는 하나 이상의 테이블을 가질 수 있다
- 각 테이블은 고유한 이름을 가지고 있으며, 특정 주제나 카테고리에 대한 데이터를 그룹화 하는 데 사용
💡
스키마는 건물의 청사진이고 테이블은 청사진에 따라 지어진 건물 내의 각 방과 같음. 스키마는 구조를 정의하고, 테이블은 그 구조 안에 실제 데이터를 저장한다.
열(Column)
- 테이블에서 특정 속성 또는 필드
- 각 열에는 이름과 데이터 유형이 있음
행(Row) (같은 개념: 레코드)
- 테이블 내의 데이터를 행으로 묶은 개념
- 하나의 행은 해당 테이블의 열에 정의된 속성에 대한 값을 가진다
키(Key)
- 행을 고유하게 식별하거나 테이블 간의 관계를 설정하는 데 사용
- 기본 키(Primary Key): 테이블의 각 행을 고유하게 식별하는 열 또는 열 집합
- 외래 키(Foreign Key): 다른 테이블의 기본 키를 참조하는 열. 테이블간의 관계를 설정하는 데 사용
인덱스(Index)
- 데이터 검색 속도 향상을 위해 사용
- 테이블 하나 이상의 열에 대한 포인터를 유지하여 쿼리 성능을 향상
추가 키워드와 간단 설명
- 클러스터드 인덱스(Clustered Index)
테이블의 데이터를 특정한 순서로 저장하며, 데이터의 물리적인 정렬 방식을 결정. 테이블 당 하나의 클러스터드 인덱스만 생성 가능 - 논클러스터드 인덱스(Non-Clustered Index)
데이터를 별도의 공간에 정렬된 형태로 저장. 하나의 테이블에 여러 개의 논클러스터드 인덱스 생성 가능 - 유니크 인덱스(Unique Index)
중복 값을 허용하지 않는 인덱스. 무결성을 유지하는데 도움 - 복합 인덱스(Composite Index, Multi-Column Index)
두 개 이상의 열을 결합하여 하나의 인덱스로 만드는 방법. 단, 검색 시 두 개의 열을 순서에 맞게 사용하지 않으면 복합인덱스 적용 안될 수 있음 - 풀텍스트 인덱스(Full Text Index)
텍스트 기반의 데이터를 빠르게 검색하기 위해 사용. 큰 텍스트 필드에 효과적 - 비트맵 인덱스(Bitmap Index)
각 행에 대해 비트값을 가진 인덱스. 주로 낮은 카디널리티(고유한 값의 수가 적은 열) 에 사용됨 - 스페이셜 인덱스(Spatial Index)
공간 데이터(ex:지리적 위치) 를 처리하는데 최적화 된 인덱스 (일부 데이터베이스에서 지원. MySQL, PostgreSQL) - 해시 인덱스(Hash Index)
해시 함수를 사용하여 데이터를 빠르게 찾는 인덱스. 일부 데이터베이스에서 지원되며(PostgreSQL), 주로 메모리 기반 데이터베이스에서 흔히 사용됨
트랜잭션(Transaction)
- 하나 이상의 SQL 문의 그룹으로, 하나의 논리적 작업 단위를 나타냄
ACID
1983년 '안드레아스 로이테르' 와 '테오 헤르데르' 가 트랜잭션 개념을 정리하여 ACID 라는 용어를 만들며 이를 기재.
데이터의 정확성과 신뢰성을 보장하는 데 중요하며 대부분의 RDBMS 는 ACID 를 준수하도록 설계 되어 있음.
- Atomicity
모든 작업이 완전히 수행 되거나, 전혀 수행되지 않아야 함을 의미 - Consistency
트랜잭션 실행이 성공적으로 완료되면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미. 데이터의 무결성을 유지하거나 B-tree 인덱스 또는 이중 연결 목록 등 모든 내부적 데이터 구조를 일관적이게 변경을 수행하는 것을 포함. - Isolcation
트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미. 단, 성능 관련 이슈로 인해 해당 제약 조건은 가장 유연히 적용될 수 있다. - Durability
트랜잭션이 성공적으로 완료된 후, 그 결과가 영구적으로 데이터베이스에 저장된다는 것을 보장해야 함을 의미
시스템이 갑작스러운 장애를 겪더라도 완료된 트랜잭션의 결과는 손실되지 않아야 한다.
쿼리(Query)
- 데이터베이스 내의 정보를 검색, 삽입, 수정, 삭제 하는 데 사용되는 명령문
- 스키마를 구성하거나 데이터베이스를 일부 제어하는 데에도 사용 가능
정규화(Normalization)
- 데이터 중복을 최소화 하고 데이터 무결성을 향상시키기 위해 데이터베이스 구조를 조직화 하는 프로세스