데이터베이스는 데이터를 저장하는 하나의 시스템(구조)입니다.
데이터베이스를 사용하기 이전에는 파일 시스템으로 데이터를 저장해왔습니다.
파일 시스템의 한계
Redundancy(중복성)
파일 시스템에서 특정 데이터가 한 폴더가 아니라 다른 폴더에서 참조하고, 사용하고 싶다면 한 개의 파일이 다른 폴더에서 동시에 중복으로 존재해야 합니다. 같은 데이터를 가지고 있는 폴더가 늘어나는 만큼 저장 용량의 낭비가 일어납니다.
Inconsystency(불일치)
위와 같은 중복성 때문에 하나의 데이터가 여러 폴더에 동시에 존재한다면 그 데이터를 수정할 때 모든 폴더에서 똑같은 작업을 수행해야 하고, 각 데이터가 업데이트되는 정보량만큼 낭비도 늘어나게 됩니다. 그 데이터를 삭제하고 싶을 때도 마찬가지입니다.
Accessing data
데이터를 불러오는 작업이 새로 생겼을 때 특정 데이터를 불러오려면 해당 파일 시스템의 구조를 파악하고 있어야 하고, 그 데이터에 접근하는 코드를 새로 작성해야 합니다.
Integrity problems
특정 조건을 만족하는 데이터들을 관리하고 싶다면(ex. account balance > 0) 코드 레벨로 프로그램을 작성해 관리를 해야 합니다. 파일 시스템은 지원하지 않는 기능입니다.
Atomicity of updates (원자성 : 쪼개질 수 없는)
파일 시스템은 트랜잭션(거래) 같은 두 데이터에서 동시에 실행해야하는 작업을 할 수 없습니다. 예를 들어, A가 B에게 50원을 입금하고 싶다면 A의 계좌에서 50원을 뺌과 동시에 B의 계좌에 50원을 더해야 합니다. 이 작업은 동시에 이루어져야 하며, 한쪽이 수행되지 않는다면 나머지 한쪽도 수행되지 않아야 합니다.
Concurrent access by multiple users
만약 여러 사용자가 동시에 하나의 데이터를 수정해야 할 때 에러가 발생할 수 있습니다. 예를 들어, A와 B가 100원이 있는 하나의 계좌에서 50원을 동시에 인출한다고 할 때 두 작업 다 100-50으로 되어 계좌에는 0원이 아니라 50원이 그대로 남아 있을 수 있습니다.
Security problems
데이터를 조회할 때 각 사용자마다 접근 가능한 부분을 다르게 하거나, 특정 사용자에게 권한을 부여하기 어렵습니다.
데이터 베이스는 위의 모든 문제점들을 해결할 수 있습니다.
데이터베이스 추상화
데이터베이스를 쉽게 이해하기 위해서 다음과 같이 데이터베이스가 사용되는 단계를 나눌 수 있습니다.
view level - 유저나 개발자 들이 데이터베이스에서 조회된 데이터를 사용하거나 볼 수 있습니다. application 사용이나 개발에 쓰이는 조회된 데이터입니다.
logical level - 데이터베이스에 데이터의 조작을 요청하는 코드 작성 단계를 말합니다. SQL문으로 데이터를 생성, 제거, 수정, 생성하는 등 개발자가 코드 레벨에서 데이터베이스를 조작하는 모든 작업이라고 할 수 있습니다.
physical level - 데이터베이스가 개발자의 요청대로 데이터를 처리하는 단계를 말합니다. 실제로 데이터가 어떻게 디스크에 기록되고 저장되는지 등에 대한 단계입니다.
데이터베이스의 구성
Schema - instance로 logical level에서 데이터베이스의 구조를 설명할 수 있습니다.
Schema는 데이터베이스가 가지고 있는 데이터의 타입입니다.
int a라는 C 코드에서 int가 변수의 자료형을 뜻하듯이 하나의 데이터베이스도 여러 타입(속성)을 값을 가지는 Schema가 존재하고, 각 속성에 따른 instance가 존재합니다. int a에서 a의 역할을 맡는 게 instance라고 할 수 있습니다.
또한 schema는 logical level과 physical level에서 동시에 존재하는데 physical 레벨에서 동작하는 schema의 조작은 데이터베이스 내부에서 알아서 처리하기 때문에 개발자가 신경쓰지 않아도 됩니다.
'CS > DataBase' 카테고리의 다른 글
SQL(2) - Null value, Aggregate Function, Nested Sebqueries (0) | 2022.03.31 |
---|---|
SQL - join, rename, string, set (0) | 2022.03.31 |
Relational algebra (0) | 2022.03.31 |
Relation과 key (0) | 2022.03.28 |
데이터베이스 기본? (0) | 2022.03.28 |