728x90
CS
이것이 컴퓨터 과학이다.
CHAPTER 06. 데이터베이스
- 데이터베이스란 원하는 기능을 동작시키기 위해 마땅히 저장해야 하는 정보의 집합을 말한다.
- 데이터베이스를 관리하는 수단이 데이터베이스 관리 시스템(DBMS)이다. DBMS는 크게 두 유형으로 구분 가능하다. 관계형 데이터베이스 시스템(RDBMS), NoSQL 데이터베이스 관리 시스템(NoSQL DBMS)이다. 대표적인 RDBMS로는 MySQL, Oracle, PostgreSQL, SQLite, MariaDB, Microsoft SQL Server 등이 있으며, NoSQL에는 MongoDB, Redis 등이 있다.
- 서버로서의 DBMS
- DBMS는 여느 응용 프로그램과 다를 바 없는 응용 프로그램이다. DBMS는 사용자와 직접적으로 상호작용하기보다는 사용자가 만든 프로그램과 상호작용하며 실행된다. 응용 프로그램 입장에서 바라본 DBMS는 마치 서버와 같다. 네트워크에서 클라이언트가 서버에게 요청을 보내듯, DBMS 클라이언트는 DBMS에 쿼리(query)를 보낸다. 이를 위해 DBMS는 데이터베이스를 다루기 위한 언어를 제공한다. 대표적인 데이터베이스 언어인 SQL(Structed Query Language)은 RDBMS에서 데이터를 조작하고 관리하기 위한 언어이다.
- SQL은 크게 네 종류로 분류된다.
- 데이터 정의를 위한 DDL(Data Definition Language)
- 데이터 조작을 위한 DML(Data Manipulation Language)
- 데이터 제어를 위한 DCL(Data Control Language)
- 트랜잭션을 제어하기 위한 TCL(Transaction Control Language)
- 데이터베이스의 저장 단위와 트랜잭션
- 데이터베이스의 저장 단위
- 데이터베이스에는 다양한 속성을 가진 독립적 객체들이 저장될 수 있다. 이때 독립적으로 존재 할 수 있는 객체를 엔티티(entity)라고 한다. 어떠한 특성을 가진 대상이라고 할 수 있으면 모두 엔티티라고 볼 수 있다.
- 속성(attribute)은 엔티티의 특성을 의미한다. 이때 같은 속성을 공유하는 개별 엔티티는 같은 엔티티 집합에 속한다고 할 수 있다.
- RDBMS는 엔티티 집합을 테이블(표)의 형태로 표현한다. RDBMS에서 표현되는 이차원 테이블 형태의 엔티티 집합은 릴레이션(Relation)이라고도 부른다. 또 NoSQL의 일종인 MongoDB에서는 엔티티 집합을 컬렉션(Collection)이라는 단위로 표현한다.
- 엔티티를 데이터베이스에 저장 가능한 대상이라고 한다면, 레코드는 데이터베이스에 저장된 대상이라고 할 수 있다. 데이터베이스에 기록된 각각의 엔티티를 레코드(record)라고 부른다. 데이터베이스에 저장된 엔티티 속성은 필드(field)라고 한다. 즉 다양한 속성을 지닌 엔티티들이 다양한 필드를 지닌 레코드로써 데이터베이스에 저장된다.
- RDBMS에서는 개별 레코드를 테이블의 행으로 표현하고, 필드를 테이블의 열로 표현한다. 또한 NoSQL인 MongoDB에서는 개별 레코드를 Json 형태의 데이터인 도큐먼트(document)라는 단위로 표현하고, 필드를 Json 형태로 표현한다.
- 스키마
- RDBMS와 NoSQL을 구분하는 주요 기준 중하나로 스키마의 유무를 꼽을 수 있다. 스키마(Schema)는 데이터베이스에 저장되는 레코드의 구조와 제약 조건을 정의한 것으로, 레코드가 지켜야 할 틀이자 청사진이라고 볼 수 있다. RDBMS에서는 명확한 스키마가 정의되며, 레코드들은 이 스키마로 정해진 테이블의 구조, 필드의 데이터 타입 및 제약 조건에 따라야 한다. 반면 NoSQL에서는 명확한 스키마가 정의되지 않기 때문에 NoSQL 데이터베이스를 스키마 리스 데이터베이스라고도 부른다. 레코드들이 지켜야 할 구조와 제약 조건에 제한이 없어 RDBMS보다 자유로운 형태의 레코드를 저장할 수 있다.
- 트랜잭션과 ACID
- 트랜잭션(transaction)은 데이터베이스와의 논리적 상호작용의 단위를 의미한다. 데이터베이스가 처리하는 작업의 단위를 나타내므로 초당 트랜잭션(TPS)이라는 지표로 데이터베이스의 작업 성능을 나타내기도 한다. 여러 작업을 내포하는 트랜잭션이 동시다발적으로 실행될 때는 안전한 트랜잭션을 보장하기 위해 지켜야하는 성질이 크게 4가지 있다.
- 원자성(Atomicity)
- 하나의 트랜잭션 결과가 모두 성공하거나 모두 실패하는 성질을 의미한다. 트랜잭션이 하나의 단위로 처리되는 것을 원자성 이라고 한다.
- 일관성(Consistency)
- 트랜잭션 전후로 데이터베이스가 일관된 상태를 유지하는 성질을 의미한다. 여기서 일관된 상태란 데이터베이스가 지켜야하는 일련의 규칙들을 지키는 상태를 의미한다. 이러한 규칙을 깨뜨리지 않는 데이터를 유지하는 성질이 바로 데이터베이스의 일관성이다.
- 데이터베이스가 트랜잭션 이후 새로운 일관된 상태로 전이될 수 있다. 다만, 이 경우에도 저장된 데이터들은 모두 일관된 상태를 유지해야 한다.
- 격리성(Isolation)
- 동시에 수행되는 여러 트랜잭션이 서로 간섭하지 않도록 보장되는 성질을 의미한다. 레이스 컨디션을 방지하기 위한 성질이다. 한 트랜잭션이 어떤 데이터에 접근하여 조작 중일 때는 다른 트랜잭션이 접근할 수 없다.
- 지속성(Durability)
- 트랜잭션이 성공적으로 완료된 후에 그 결과가 영구적으로 반영되는 성질을 의미한다. 즉, 시스템 장애가 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않아야 한다.
- 데이터베이스의 저장 단위
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
25.01.20 DB, SSMS (0) | 2025.01.20 |
---|---|
24.12.08 CS (2) | 2024.12.08 |
24.12.05 CS (0) | 2024.12.06 |
24.11.29 C++ (0) | 2024.11.29 |
24.11.28 면접 후기 (1) | 2024.11.28 |