데이터베이스란?
데이터베이스는 데이터들을 저장하고 조회하는 프로그램이다.
데이터베이스는 파일을 조직적으로 통합하여 자료 항목의 중복을 최대한 없애고 자료를 구조화하여 기억시켜놓은 자료의 집합체라고 할 수 있다.
데이터베이스의 필요성
데이터베이스는 단순한 데이터 저장소 개념을 넘어선 상위 호환 격이다.
데이터베이스는 프로그래밍과 같은 컴퓨터 언어(SQL)로 세밀히 제어가 가능하고, 어떻게 제어하느냐에 따라 성능이 천차 만별이다. 또한 데이터들끼리 중복된 정보가 있을 경우 이를 통합하여 구조적이며 효율적으로 데이터를 저장한다. 거기다 데이터베이스는 컴퓨터 언어로 제어가 가능하고 앱이나 웹을 통해 전세계로 공유가 가능하다.
파일 시스템 VS 데이터베이스
파일 시스템
- 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제를 뜻한다.
- 개별적인 파일들을 보관 및 정리
- 여러 폴더에 파일이 저장되고, 사용자가 직접 파일을 관리한다.
데이터베이스
- 데이터를 구조화하고 연결시키는 기능을 제공한다.
- 테이블, 레코드, 필드 등의 개념을 사용하여 데이터를 구성하고, 데이터를 효율적으로 관리하고 검색할 수 있다.
- 데이터의 일관성, 무결성, 안정성 유지하며 복잡한 데이터 조작 작업을 간편하게 수행할 수 있다.
- 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통함됨
- 데이터베이스의 구조는 사용되는 데이터 모델에 의해 결정됨
- 데이터의 대규모 저장소로서, 여러 사용자에 의해 동시에 사용
데이터베이스의 데이터 특징
데이터베이스는 데이터들을 구조적인 형태로 유지하기 위해 효율적인 데이터 저장 규칙이 존재한다.
통합된 데이터(Intergrated Data)
여러가지의 데이터를 통합하여 저장하는데 중복된 정보가 있다면 이를 그대로 저장하면 용량이 낭비되므로 데이터베이스는 이러한 중복된 정보에 대해 데이터를 통합하여 자료의 중복을 최소화한 데이터의 모임으로 구성한다.
저장된 데이터(Stored Data)
우리가 사진이나 동영상 파일을 HDD나 SDD에 저장하는 것처럼, 데이터베이스도 컴퓨터가 접근할 수 있는 매체에 데이터를 저장한다.
운영 데이터(Operational Data)
데이터베이스는 주로 조직의 목적을 위해 존재하고 활용되는 운영 데이터를 다루는데 주로 이용된다. 단순하거나 임시적으로 데이터 저장이 필요하다면 굳이 무거운 데이터베이스 소프트웨어를 사용할 필요가 없고 그냥 폴더에 저장해버리면 된다.
공유 데이터(Shared Data)
여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터를 말한다. 데이터베이스라는 소프트웨어를 사용하는 가장 근본적인 이유이기도 하다. 하나의 컴퓨터나 시스템을 위한 데이터가 아니라 여러 시스템들이 공용으로 엑세스하여 이용한다.
데이터베이스의 기능 특징
데이터베이스는 위에서 설명한 특징들을 가진 데이터들을 효율적으로 관리하기 위해 다음과 같은 기능을 제공한다.
실시간 접근성(Real-Time Accessibility)
데이터베이스는 사용자의 요규에 신속하고 정확하게 응답이 가능해야 한다.
계속적인 변화(Continuous Evolution)
데이터의 변화를 반영하기 위해 새로운 데이터 삽입(Insert), 삭제(Delete), 갱신(Update) 로 항상 최신의 데이터를 유지해야 한다.
동시 공유(Concurrent Sharing)
다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.
내용에 의한 참조(Content Reference)
데이터베이스에 있는 데이터를 참조할 때 사용자의 요구에 따른 데이터 내용으로 데이터의 위치나 주소로 데이터를 찾는다.
데이터베이스의 언어 종류
데이터베이스는 컴퓨터 언어로 통신하는데, 이러한 데이터베이스와 소통하기 위해 사용하는 언어를 데이터 베이스 언어라고 한다. 그리고 데이터베이스 언어 중에서 가장 많이 사용되는 것이 SQL(Structured Query Language)이다.
SQL은 관계형 데이터베이스에서 데이터를 정의하고 조작하고 제어할 수 있는 표준 언어로서, 대부분의 데이터베이스 시스템에서 지원한다. 그리고 데이터를 조회하느냐 삭제하느냐 생성하느냐에 따라 데이터베이스 언어는 크게 다음과 같이 4가지로 나뉘게 된다.
DDL (데이터 정의어)
테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할을 담당한다.
DDL은 명령어를 입력하는 순간 작업이 즉시 반영(Auto Commit)되기 때문에 사용할 때 주의해야 한다.
CREATE | 테이블을 생성하는 역할 |
ALTER | 테이블의 구조를 수정하는 역할 |
DROP | 테이블을 삭제하는 역할 |
RENAME | 테이블을 이름을 변경하는 역할 |
TRUNCATE | 테이블을 초기화하는 역 |
ADD COLUMN | 컬럼을 추가하는 역할 |
DROP COLUMN | 컬럼을 삭제하는 역할 |
MODIFY COLUMN | 컬럼을 수정하는 역할 |
RENAME COLUMN | 컬럼 이름을 변경하는 역할 |
DROP CONSTRAIN | 컬럼을 제약조건을 기반해서 삭제하는 역할 |
DML (데이터 조작어)
데이터베이스의 내부 데이터를 관리하기 위한 언어이다. 데이터를 조회, 추가, 변경, 삭제 등의 작업을 수행하기 위해 사용된다.
DDL과 달리 DML은 적는 즉시 반영(Auto Commit)이 되지 않기 때문에 DML에 의한 데이터 변동은 Rollback으로 다시 되돌릴 수 있다. 또한, DML은 Target Table을 메모리 버퍼 위에 올려두고 변경을 수행하기 때문에, 실시간으로 테이블에 반영되지 않는다. Commit 명령어를 통해 Transaction을 종료해야 해당 변경 사항이 테이블에 반영된다.
SELECT | 데이터베이스에서 데이터를 검색하는 역할 |
INSERT | 테이블에 데이터를 추가하는 역할 |
UPDATE | 테이블 내에 존재하는 데이터를 수정하는 역할 |
DELETE | 테이블에서 데이터를 삭제하는 역할 |
DCL (데이터 제어 언어)
데이터를 관리 목적으로 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용한다. DCL을 사용하면 데이터베이스에 접근하여 읽거나 쓰는 것을 제한할 수 있는 권한을 부여하거나 박탈할 수 있고 Transaction을 명시하거나 조작할 수 있다.
불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안의 역할을 수행하며, 데이터의 정확성을 위한 무결성을 유지하기도 한다. 마지막으로 시스템 장애에 대비한 회복과 병행수행을 제어한다.
GRANT | 권한을 정의할때 사용하는 명령어 |
REVOKE | 권한을 삭제할때 사용하는 명령어 |
TCL (트랜잭션 제어 언어)
DCL과 비슷한 맥락이지만 데이터를 제어하는 언어가 아닌 Transaction을 제어할 때 사용한다.
논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 Transaction 별로 제어한다.
COMMIT | 모든 작업을 정상적으로 처리하겠다는 명령어 |
ROLLBACK | 모든 작업을 다시 돌려 놓겠다는 명령어 |
SAVEPOINT | Commit 전에 특정 시점까지만 반영하거나 Rollback하겠다는 명령어 |
Transaction이란?
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위
즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미한다.
트랜잭션은 여러 개의 데이터베이스 작업을 하나의 논리적인 단위로 묶어서 처리함으로써 데이터 일관성과 무결성을 보장한다.
Transaction의 특징(ACID)
ACID는 트랜잭션을 정의하는 4가지 중대한 속성을 가리키는 약어이다.
데이터베이스 작업에 이러한 ACID 속성이 있다면 이를 ACID 트랜잭션이라 부르면 되고, 이런 작업을 적용하는 데이터 스토리지 시스템을 트랜잭션 시스템이라고 한다. ACID 트랜잭션은 한 테이블의 읽기, 쓰기, 수정 작업이 각각 다음과 같은 속성을 가지고 있다고 보장한다.
원자성(Atomicity)
트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다.
예를 들어 이 속성이 있으면 스트리밍 데이터 소스가 스트리밍 중에 갑자기 오류를 일으키더라고 데이터 손실과 손상이 방지된다.
일관성(Consistency)
트랜잭션의 작업처리 결과가 항상 일관성이 있어야 한다.
즉, 데이터 타입이 반환 후와 전이 항상 동일해야 한다.
격리성(Isolation)
여러 사용자가 같은 테이블에서 모두 동시에 읽고 쓰기 작업을 할 때, 각각의 트랜잭션은 격리되어야 한다.
동시 트랜잭션이 서로 방해하거나 영향을 미치지 않아야 한다. 하나의 특정 트랜잭션이 완료될때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
지속성(Dutability)
트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다. 이는 시스템 오류가 발생해도 지속되어야 한다. 보통 Commit이 완료되면 지속성은 자연스럽게 충족되는 특징이다.
Transaction의 상태
Active : 트랜잭션이 현재 실행 중인 상태
Failed : 트랜잭션이 실행되었으나 오류가 발생해서 중단된 상태
Aborted : 트랜잭션이 비정상 종료되어 Rollback이 수행된 상태
Partially Committed : 트랜잭션의 연산이 마지막 까지 실행되고 Commit이 되기 직전 상태
Committed : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
Transaction의 Commit과 Rollback
Commit
Commit은 모든 작업들을 정상 처리하겠다고 확정하는 명령어이다. 해당 처리 과정을 DB에 영구 저장하겠다는 의미로 Commit을 수행하면 하나의 트랜잭션 과정이 종료된다. Commit을 하기 전에는 다른 사용자가 트랜잭션 내용을 참조할 수 없다. 또한, 변경된 행은 잠금이 설정되어 있어서 다른 사용자가 변경할 수 없다.
Rollback
Rollback은 작업 중 문제가 발생되어 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어이다. 해당 명령을 트랜잭션에게 하달하면 트랜잭션은 Commit 되기 이전의 데이터로 돌아가 변경에 대한 내용을 취소한다. 관련된 행에 대한 잠금이 풀리고 데이터 변경 사항이 복구되는 것이다.
'TIL > CS' 카테고리의 다른 글
DBMS 발전 과정 (0) | 2024.03.21 |
---|---|
데이터베이스 시스템(DBMS) 개요 (0) | 2024.03.21 |
Process Management (0) | 2024.03.19 |
프로세스(Process), 스레드(Thread), 스케줄링(Scheduling) (0) | 2024.03.18 |
CPU, Memory (0) | 2024.03.18 |