데이터베이스
00. 데이터베이스
saniii
2022. 12. 29. 21:18
데이터베이스
: 컴퓨터의 기억 능력을 통해 자료를 가공 및 저장, 활용하는 일체의 기술
자료는 아무리 많아도 재료일 뿐 그 자체로 유용하지 않다. 자료를 활용하려면 합산, 집계등의 알고리즘을 통해 정보를 가공해야 한다. 데이터베이스는 방대한 자료를 집약하여 저장할 뿐만 아니라 모아 놓은 자료를 가공하여 유용한 정보를 뽑아내는 기술이다.
# 데이터베이스가 갖춰야할 요건
- 대용량 : 대규모의 데이터를 무리없이 저장해야 한다. 은행의 고객은 수천만명이고 고객당 거래 정보도 수천건이어서 정보량이 조 단위에 이른다. 원활한 업무를 위해 모든 데이터를 완벽하게 저장해야한다.
- 효율성 : 대용량의 데이터를 유지하려면 고성능 서버와 막대한 비용이 필요하다. 고가의 장비를 최대한 활용하려면 저장 구조를 정교하게 설계하여 불필요한 중복을 제거하고 치밀하게 관리해야 한다.
- 무결성 : 데이터를 오류없이 관리하려면 이중, 삼중의 안전장치가 필요하다. 특히 돈을 다루는 작업을 조금의 오차도 허용하지 않는다. 고객의 잔고가 유실되는 사고가 터진다면 은행은 문을 닫아야 하기 때문이다.
- 활용성 : 정보를 저장하는 목적은 필요할 때 사용하기 위해서이다. 고객이 요청하면 실시간 잔액을 알려주고 예금을 인출하면 잔고는 즉시 감소해야 한다.
- 공유성 (일관성) : 정보는 공유할 때 가치가 더 높아진다. 은행의 계좌 정보는 전국 어느 지점에서나 온라인 조회 및 거래가 가능하며 이를 위해 네트워크 연결이 필수적이다. 연관된 정보를 논리적으론 구조로 관리하여 어떤 하나의 데이터만 변경했을 경우 발생할 수 있는 데이터의 불일치성을 배제할 수 있다. 또한 작업 중 일부 데이터만 변경되어 나머지 데이터와 일치하지 않는 경우의 수를 배제할 수 있다.
- 보안성 : 인증받지 않은 외부의 침입자로부터 데이터를 철저히 보호해야 한다. 타인의 계좌를 해킹하여 돈을 빼가도록 해서는 안되며 내부 직원의 비리까지 막아야 한다.
- 거대한 데이터를 저겸하고 완변하게 저장하며 언제든 누구나 활용할 수 있으면서도 안전해야 한다. 이외에도 필요할 때 증설할 수 있는 확장성과 이기종으로 전환할 수 있는 이식성, 같은 성능이면 가급적 싸게 운영할 수 있는 경제성까지 겸비하면 더 좋다.
데이터베이스의 성능 (github 내용 https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4)
데이터베이스의 성능 이슈는 디스크 I/O 를 어떻게 줄이느냐에서 시작된다. 디스크 I/O 란 디스크 드라이브의 플래터(원판)을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미한다. 이 때 데이터를 읽는데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 단계에서 결정된다. 즉 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 따라 결정된다고 볼 수 있다.
그렇기 때문에 순차 I/O 가 랜덤 I/O 보다 빠를 수 밖에 없다. 하지만 현실에서는 대부분의 I/O 작업이 랜덤 I/O 이다. 랜덤 I/O 를 순차 I/O 로 바꿔서 실행할 수는 없을까? 이러한 생각에서부터 시작되는 데이터베이스 쿼리 튜닝은 랜덤 I/O 자체를 줄여주는 것이 목적이라고 할 수 있다.
DBMS, database management System
: 정보의 저장과 관리를 전담하는 특수한 소프트웨어
- DBMS는 사람이 직접 사용하는 소프트웨어는 아니고 백그라운드에서 데이터 관리를 전담하여 응용 프로그램에게 서비스를 하는 프로그램이다.
- 논리적인 명령을 해석하여 원하는 정보를 찾아준다. 데이터 관리를 DBMS가 전담하면 프로그램과 데이터가 분리되고 종속성이 제거되어 다른 프로그램들도 DBMS를 경유하여 데이터를 사용할 수 있다.
- 재사용성 확보와 이기종끼리 데이터 교환 가능하다. 또한 데이터가 응용 프로그램에게 투명해지는 효과가 있어 물리적인 위치나 구조에 영향을 받지 않는다.
- 생산성 : 데이터베이스 시스템(검색, 추가, 삭제, 갱신)을 제공하여 생산성을 향상한다.
- 기능성 : 데이터베이스를 다루는 기능을 많이 제공한다.
- 신뢰성 : export, import 등의 기능을 통해 신뢰성을 높인다.
- 현재의 DBMS는 효율적인 검색을 위해 인덱스를 관리하고 동시 사용자의 보안 검사와 충돌방지를 수행하며 자동화된 백업, 복제로 데이터를 보호한다.
DB 구조
- 테이블 : 정보를 표 형태로 정리해 놓은 것 테이블은 현실 세계에 존재하는 사물의 속성을 저장
- 엔터티 : 테이블이 표현하는 대상 세상 모든 것이 엔터티가 될 수 있다.
- 레코드 : 테이블에 저장된 엔터티 하나, 도표의 가로줄
- 필드 : 레코드의 세부 속성, 테이블의 세로줄
- 필드 여러 개가 모여 레코드 하나가 되고 레코드 여러개가 모여 테이블이 된다.
- DB 오브젝트 현실의 데이터는 이보다 복잡해 여러 개의 테이블이 모여야 정보로서의 가치를 발휘한다.
- 업무상 관련 있는 테이블과 이를 지원하는 장치가 모두 구비되어야 완전한 데이터베이스가 되어 현실 세계를 제대로 반영할 수 있다. 데이터베이스에 저장되는 모든 것을 통칭하여 DB 오브젝트라고 하며 간단하게 개체, Object라고 부른다. DBMS가 관리하는 모든 것이 다 DB 오브젝트이다.
쿼리문의 분류
- DDL, Data Definition Language
- DB 오브젝트를 생성, 삭제, 변경한다. , 데이터 정의
- CREATE, DROP, ALTER 등
- DB를 관리하는 관리자가 이 부류의 명령을 주로 사용
- DML, Data Manipulation Language
- DB 조회, 삽입, 삭제, 변경, 데이터 조작
- SELECT, DELETE, INSERT, UPDATE 등
- 응용 프로그램 개발자들이 주로 사용한다.
- DCL, Data Control Language
- 사용자 권한을 관리한다. 데이터베이스 제어
- GRANT, DENY, REVOKE,
- DBA가 주로 사용, 일반 개발자는 사용할 일이 드물다.
데이터베이스 역사
- 1세대 : 계층형, 네트워크형
- 정보를 수직적인 트리 형태로 저장하는 계층형 데이터베이스 + 정보끼리 망을 이룸 (지리, 사회관계망)
- 2세대 : 관계형 데이터베이스, RDB하지만 자원 소모가 많다.(하드웨어 개발로 극복)
- 테이블은 직관적이며 관련 정보를 구하기 쉽고 제약 조건으로 무결성을 보장한다. | 여러개의 테이블을 만들고 관계를 정의하면 복잡한 정보를 간결하게 저장할 수 있다. RDB는 성능보다 유연성에 중점을 두어 비즈니스 로직의 변화에 신속히 대처할 수 있다.
- 3세대 : 객체지향형 | OODB
- 모든 것을 객체로 저장하여 멀티미디어나 비정형 데이터도 효율적으로 다룰 수 있다. 하지만 너무 복잡해 성능상의 열세를 극복하지 못했고 실용적으로 활용할 분야가 드물어 아직 연구 단계, 순수한 OODB보다는 관계형을 기본으로 사용자 정의형, 중첩테이블, 타입 상속 등 객체형의 장점을 취한 객체 관계형 | ORDB가 시도되고 있다.