이번 시리즈는 인하대학교 정보통신공학과에 개설된 강의인 "데이터베이스설계"라는 과목에 대한 포스팅입니다. 꼭 이 강의를 수강하는 학생이 아니더라도 알아두면 도움이 될만한 내용이 많은 것 같아 포스팅을 시작하게 되었습니다. 특히, DB와 관련된 내용은 백엔드 개발에 너무나도 중요한 내용이기 때문에 참고하시면 좋을 거 같습니다.
참고로 이 시리즈의 포스팅은 강의 내용을 그대로 옮겨 적거나 단순히 정리한 포스팅이 아니며, 강의 내용을 기반으로 제가 조사한 내용을 추가하거나 불필요한 내용을 제거하는 등 재구성을 거쳐 작성하였습니다.
데이터베이스 내의 데이터 저장 구조가 변경되어도 데이터베이스에 대한 응용 프로그램은 영향을 받지 않는 성질로써, 프로그램과 데이터의 독립성을 의미한다. 다른 말로는 Database의 투명성(Transparency)이라고도 한다.
Data Model을 사용함으로써 저장 구조의 자세한 내용은 은닉시키고, 각 요구에 맞는 conceptual view만을 제공한다. 다른 말로, Feature Extraction이라고도 한다.
사용자가 데이터베이스 전체가 아닌, 관심이 있는 데이터베이스의 일부분을 뷰로 정의할 수 있어야 한다.
여러 사용자가 동시에 동일한 데이터베이스를 사용할 수 있도록 지원해야 한다. 이 때, 동시에 사용하더라도 일관성(consistency)을 보장하기 위해 동시성 제어(concurrency control) 기능을 제공해야 한다.
※ 동시성제어
동시성 제어는 동시에 여러 작업 또는 프로세스가 실행되는 환경에서 작업 간의 실행 순서와 접근을 효과적으로 관리하는 것을 의미한다. 다수의 작업 또는 프로세스가 동시에 실행될 때, 아래와 같은 문제가 발생할 수 있기 때문에 이러한 문제를 해결하기 위해 동시성 메커니즘을 사용한다.
- 경쟁 조건(Race Condition): 여러 작업이 공유 자원에 동시에 접근하려고 할 때 예상하지 못한 결과가 발생하는 것
- 교착(Deadlock): 두 개 이상의 작업이 서로가 가지고 있는 자원을 대기하며 블록 상태에 빠지는 상황
- 병렬성 오류(Concurrency Bugs): 동시 실행으로 인해 발생하는 버그나 예기치 않은 동작
또한 데이터베이스 작업의 단위인 트랜잭션은 Jim Gray가 제안한 ACID를 만족해야 한다.
① Atomicity(원자성)
② Consistency(일관성)
③ Isolation(독립성)
④ Durability(지속성)
데이터베이스의 다양한 특징들 중에서 가장 중요한 개념은 Transaction과 Concurrent sharing이다.
① 데이터 중복의 최소화(Minimal Redundancy) 및 통제(Controlled Redundancy)
② 동시성 제어
③ 보안
④ 사용자 인터페이스 제공
⑤ 데이터 사이의 관련성을 표현
⑥ 데이터베이스의 무결성 보장
⑦ 백업 및 복구 기능
현재 널리 사용되고 있는 RDBMS는 1980년대에 Codd라는 사람에 의해 최초로 정립되었으며, Data Structure(데이터 구조), Data Manipulation(데이터 조작), Data Integrity(데이터 무결성)에 대한 개념이 포함되었다.