CS/DataBase

데이터베이스만 할 수 있는 일

reko_ 2022. 3. 19. 04:07

데이터베이스는 데이터를 저장하는 하나의 시스템(구조)입니다.

 

데이터베이스를 사용하기 이전에는 파일 시스템으로 데이터를 저장해왔습니다.

 

 

 

데이터베이스 - 위키백과

 


 

파일 시스템의 한계

 

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의 조작은 데이터베이스 내부에서 알아서 처리하기 때문에 개발자가 신경쓰지 않아도 됩니다.