CS 공부/데이터베이스
데이터베이스의 큰 그림
학습하는 청년
2025. 4. 19. 01:16
최종 수정 : 2025.04.19
데이터베이스
■ 데이터베이스와 DBMS
데이터베이스(database)
- 사전적 정의 : 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합
- 원하는 기능을 동작시키기 위해 마땅히 저장해야 하는 정보의 집합
- 사용자에게 제공되는 프로그램, 특히 웹 서비스에 있어 심장과도 같다.
- 어떤 데이터가 저장되는지에 따라 웹 서비스의 정체성이 달라진다.
- 데이터가 저장되는 방식에 따라 웹 서비스의 성능이 달라진다.
데이터베이스 관리 시스템(DBMS ; Database Management System)
- 관계형 데이터베이스 관리 시스템(RDBMS ; Relational DataBase Management System)
ex) MySQL, Oracle, PostgreSQL, SQLite, MariaDB, Microsoft SQL Server 등 - NoSQL 데이터베이스 관리 시스템(NoSQL DBMS)
ex) MongoDB, Redis 등
서버로서의 DBMS
- DBMS는 여느 응용 프로그램과 다를 바 없는 응용 프로그램이다.
- 다만, '사용자'보다는 프로그램과 상호작용하며 실행된다.
- 따라서, 응용 프로그램의 입장에서는 마치 서버와 같다.
- 주로 TCP 연결을 맺으며, 때로는 데이터베이스에 접속하기 위한 인증이 필요하기도 하다.
SQL (Structured Query Language)
- RDBMS에서 데이터를 조작하고 관리하기 위한 언어
- DBMS 클라이언트는 DBMS에 쿼리(query)를 보낸다.
- 이름 그대로 데이터베이스에 질의(Query)하기 위한 구조화된(Structured) 언어(Language)이다.
DDL : Data Definition Language, 데이터 정의
DML : Data Manipulation Language, 데이터 조작
DCL : Data Control Language, 데이터 제어
TCL : Transaction Control Language, 트랜잭션 제어
종류 | 명령 | 설명 |
DDL | CREATE | 데이터베이스 혹은 테이블, 뷰, 인덱스 등의 데이터베이스 객체 생성 |
ALTER | 데이터베이스 객체 갱신 | |
DROP | 데이터베이스 객체 삭제 | |
TRUNCATE | 테이블 구조를 유지한 채 모든 레코드 삭제 | |
DML | SELECT | 테이블의 레코드 조회 |
INSERT | 테이블의 레코드 삽입 | |
UPDATE | 테이블의 레코드 갱신 | |
DELETE | 테이블의 레코드 삭제 | |
DCL | COMMIT | 데이터베이스에 작업 반영 |
ROLLBACK | 작업 이전의 상태로 되돌림 | |
SAVEPOINT | 롤백의 기준점 설정 | |
TCL | GRANT | 사용자에게 권한 부여 |
REVOKE | 사용자로부터 권한 회수 |
Q. 파일 시스템 대신 데이터베이스를 이용하는 이유는 무엇인가?
- 데이터 일관성 및 무결성
보통 여러 명의 사용자, 프로그램이 동시다발적으로 데이터베이스를 이용한다. 레이스 컨디션 문제가 발생할 여지가 있고, 이로 인해 데이터의 일관성이 훼손되기 쉽다. 물론 동기화 도구를 이용하면 되지만, 모든 접근에 일일하 사용하기에는 번거롭다. 또한 개발자가 파일에 명시된 데이터에 결함이 없음을 일일히 검사하기도 번거롭다. - 불필요한 중복 저장
다량의 데이터 관리에 있어 불필요한 중복 저장은 큰 저장 공간 낭비로 이어질 수 있다. - 데이터 변경 시 연관 데이터 변경
- 정교한 검색
- 백업 및 복구
데이터베이스는 보통 여러 명의 사용자 및 프로그램이 동시다발적으로 이용하기에 많은 데이터베이스에서는 백업과 복구 기능을 제공한다. 하지만 단순 파일 입출력에서는 이러한 기능에 애초에 제공하지 않거나 부족한 수준으로 지원한다.
■ 데이터베이스의 저장 단위와 트랜잭션
데이터베이스의 저장 단위
- 엔티티 : entity, 다양한 속성을 가진 독립적으로 존재할 수 있는 객체
속성(attribute) : 엔티티의 특성
-> 같은 속성을 공유하는 개별 엔티티는 같은 엔티티 집합에 속한다고 할 수 있다.
도메인(domain) : 엔티티의 속성이 가질 수 있는 값의 집합을 이라고 한다.
RDBMS에서는 엔티티 집합을 테이블(표)의 형태로 표현한다. 이차원 테이블 형태로 표현된 엔티티 집합을 릴레이션(relation)이라 한다. 반면, MongoDB에서는 엔티티 집합을 컬렉션(collection)이라는 단위로 표현한다.
엔티티를 데이터에이스에 '저장 가능한 대상'이라 한다면, 레코드는 데이터베이스에 '저장된 대상'이라 할 수 있다. 데이터베이스에 '기록'된 각각의 엔티티를 레코드(record)라 한다. 데이터베이스에 저장된 엔티티 속성은 필드(field)라 한다.
RDBMS에서는 개별 레코드를 행, 필드를 열로 표현한다. 반변, MongoDB에서는 개별 레코드를 Json 형태의 데이터인 도큐먼트(document)라는 단위로 표현하고, 필드를 Json 키의 형태로 표현한다.
필드의 수는 차수(degree)라고 부르며, 한 필드에 대한 고유 값의 수는 카디날리티(cardinality)라고 부른다. 즉, 카딘날리티가 낮을수록 중복된 속성이 많음을 시사한다.
스키마(schema)
- RDBMS와 NoSQL을 구분하는 주요 기준 중 하나
- 데이터베이스에 저장되는 레코드의 구조와 제약 조건을 정의한 것
- 레코드가 지켜야 할 틀이자 청사진
RDBMS
- 명확한 스키마가 정의되며, 레코드들은 이 스키마로 정해진 테이블의 구조, 필드의 데이터 타입 및 제약 조건을 따라야 한다.
NoSQL
- 스키마가 정의되지 않기에 스키마-리스 데이터베이스라고도 불린다. 따라서 RDBMS보다 자유로운 형태의 레코드를 저장할 수 있다.
트랜잭션과 ACID
- 트랜잭션(transaction) : 데이터베이스와의 논리적 상호작용의 단위
데이터베이스가 처리하는 작업의 단위를 나타내므로 초당 트랜잭션(TPS, Transaction Per Second)이라는 지표로 데이터베이스의 작업 성능을 나타내기도 한다.
유의할 점은 트랜잭션이 하나의 쿼리만 포함하는 것은 아니다.
데이터베이스는 여러 사용자/프로그램이 동시다발적으로 사용하는 것이 일반적이다. 따라서 여러 작업을 내포하는 트랜잭션이 동시다발적으로 실행될 때는 안전한 트랜잭션을 보장하기 위해 지켜야 하는 성질이 있다. 크게 4가지 인데, 앞글자만 따서 ACID라고 한다. 특히 관계형 데이터베이스 트랜잭션의 상징과도 같은 단어이다.
- 원자성(Atomicity)
- 하나의 트랜잭션 결과가 모두 성공하거나 모두 실패하는 성질
- 트랜잭션이 하나의 단위로 처리되는 것
- 트랜잭션이 반드시 커밋되거나 롤백되는 성질이라고도 표현한다.
* 커밋(commit) : 트랜잭션을 성공적으로 수행하여 트랜잭션을 종료하는 것
* 롤백(rollback) : 이전 트랜잭션을 취소하는 작업 - 일관성(Consistency)
- 트랜잭션 전후로 데이터베이스가 일관된 상태를 유지하는 성질
* 일관된 상태 : 데이터베이스가 지켜야 하는 일련의 규칙들을 지키는 상태 - 격리성(Isolation)
- 동시에 수행되는 여러 트랜잭션이 서로 간섭하지 않도록 보장하는 성질
- 레이스 컨디션을 방지하기 위한 성질
- 즉, 트랜잭션이 어떤 데이터에 접근하여 조작 중일 때는 다른 트랜잭션이 접근할 수 없다. - 지속성(Durability)
- 트랜잭션이 성공적으로 완료된 후에도 그 결과가 영구적으로 반영되는 성질
- 즉, 시스템 장애가 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않아야 한다.
* 이를 위해 DBMS에는 대부분 회복 메커니즘이 구현되어 있다.
■ 데이터베이스 지도 그리기
- RDBMS에서는 데이터가 테이블의 형태로 저장되고 관리된다. 때로는 각기 다른 테이블 내의 데이터를 서로 연관시킬 수도 있다.
RDBMS를 온전히 이해하기 위해서는 SQL을 반드시 알아야 한다. - SQL에는 주요 RDBMS 관련 지식이 담겨 있기도 하고, 효율적 쿼리를 위한 서브 쿼리, 조인, 뷰, 인덱스 등의 개념 또한 SQL을 알아야 이해하기 수월하다.
- 데이터베이스에는 다양한 데이터가 다량으로 저장되므로 때로는 데이터 간 복잡한 관계가 존재할 수 있다. 그렇기에 데이터베이스 설계가 필요하다.
참고 도서
이것이 컴퓨터 과학이다