데이터베이스를 계속 사용해왔지만 왜 사용하는지에 대해서는 잘 모르고 있었던 것 같다. 이번에 알아보자
데이터베이스가 존재하기 이전에는 파일 시스템을 이용하여 데이터를 관리하였다고 한다(현재도 부분적으로 사용되고 있다고 한다)
데이터를 각각의 파일 단위로 저장하며 이러한 일들을 처리하기 위한 독립적인 애플리케이션과 상호 연동이 되어야하는데,
파일 시스템에서는 파일에 접근하는 방식이 응용 프로그램 내에 표현되므로 응용 프로그램과 데이터 간의 의존관계가 존재하게 되어 데이터의 구조, 접근 방법이 변경되면 기존의 프로그램과 데이터를 함께 변경해야 한다.
(파일 시스템을 이용해봤는데 확실히 DB에 비해 구조를 변경해야할 때 불편한점을 많이 느꼈다)
따라서, 파일 단위로 저장할때, 데이터 종속성 문제와 중복성, 데이터 무결성 문제 등이 존재하기 때문에 데이터베이스로 관리하기 시작했다.
여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임이다.
데이터베이스 관리 시스템이란 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어를 의미한다.
데이터베이스 관리 시스템은 파일 시스템의 문제점을 해결하기 위해 만들어졌기 때문에 데이터베이스 시스템의 특징은 곧 파일 시스템의 단접을 의미한다.
데이터의 무결성
여러 경로를 통해 잘못된 데이터가 발생하는 경우의 수를 방지하는 기능으로 데이터의 유효성 검사를 통해 무결성을 구현하게 된다.
데이터의 보안성
인가된 사용자들만 데이터베이스나 데이터베이스 내의 자원에 접근할 수 있도록 계정 관리 또는 접근 권한을 설정함으로써 모든 데이터에 보안을 구현할 수 있다.
데이터의 일관성
연관된 정보를 논리적인 구조로 관리함으로써 어떤 데이터만 변경했을 경우 발생할 수 있는 데이터의 불일치성을 배제할 수 있다. 또한 작업 중 일부 데이터만 변경되어 나머지 데이터와 일치하지 않는 경우의 수를 배제할 수 있다.
데이터 중복 최소화
데이터베이스는 데이터를 통합해서 관리함으로써 파일 시스템의 단점 중 하나인 자료의 중복과 데이터의 중복성 문제를 해결할 수 있다.
데이터베이스의 성능 이슈는 디스크 I/O 를 어떻게 줄이느냐에서 시작된다. 디스크 I/O 란 디스크 드라이브의 플래터(원판)을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미한다. 이 때 데이터를 읽는데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 단계에서 결정된다. 즉 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 따라 결정된다고 볼 수 있다.
I/O는 입력(Input)/출력(Output)의 약자, 줄여서 입출력
그렇기 때문에 순차 I/O 가 랜덤 I/O 보다 빠를 수 밖에 없다. 하지만 현실에서는 대부분의 I/O 작업이 랜덤 I/O 이다. 랜덤 I/O 를 순차 I/O 로 바꿔서 실행할 수는 없을까? 이러한 생각에서부터 시작되는 데이터베이스 쿼리 튜닝은 랜덤 I/O 자체를 줄여주는 것이 목적이라고 할 수 있다.
참고
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#index