[CS스터디] DB(데이터베이스) 구조와 유형
0. 컴퓨터와 데이터베이스
파일 시스템 VS 데이터베이스
- 파일 시스템
- 개별적인 파일들을 보관, 정리
- 여러 폴더에 파일이 저장되고, 사용자가 직접 파일을 관리.
- 데이터베이스
- 데이터를 구조화하고 연결시키는 기능 제공.
- 테이블, 레코드, 필드 등의 개념을 사용하여 데이터를 구성, 데이터를 효율적으로 관리하고 검색.
- 데이터의 일관성, 무결성, 안정성 유지, 복잡한 데이터 조작 작업 간편하게 수행.
1. 데이터베이스
1-1. 데이터베이스 시스템 개요
데이터베이스 스키마
- 전체적인 데이터베이스 구조를 의미. 자주 변경되지 않음.
- 데이터베이스의 모든 가능한 상태를 미리 정의.
데이터베이스 상태
- 특정 시점의 데이터베이스의 내용을 의미.
- 데이터베이스에 수정이 일어날 때마다 상태가 바뀜.
데이터베이스 시스템(DBS)
- DB, DBMS, USER(개발자, 사용자 등)를 포함한 가장 큰 범위
데이터베이스
- 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임.
DBMS
- 기능
- 사용자가 새로운 데이터베이스 생성
- 데이터베이스의 구조를 명시
- 사용자가 데이터를 질의하고 수정할 수 있도록
- 데이터를 안전하게 보호
- 동시에 여러 사용자 접근하는 것 제어
1-2. 파일 시스템 vs DBMS
DBMS 단점
- 추가적인 하드웨어 구입 비용이 들고, DBMS 자체의 구입 비용도 상당히 비쌈.
- 직원들의 관리도구 사용법 교육 비용 많이 소요됨.
- 비밀과 프라이버시 노출 등의 단점이 존재할 수 있음.
1-3. DBMS 발전 과정
1-4. DBMS 언어
1) 데이터 정의어 (DDL : Data Definition Language)
- 데이터 모델에서 지원하는 데이터 구조를 생성 (예, SQL에서 CREATE TABLE)
- 데이터 구조의 변경 (예, SQL에서 ALTER TABLE)
- 데이터 구조의 삭제 (예, SQL에서 DROP TABLE)
- 데이터 접근을 위해 특정 애트리뷰트 위에 인덱스를 정의 (예, SQL에서 CREATE INDEX)
2) 데이터 조작어 (DML : Data Manipulation Language)
- 데이터의 검색 (예, SQL에서 SELECT)
- 데이터의 수정 (예, SQL에서 UPDATE)
- 데이터의 삭제 (예, SQL에서 DELETE)
- 데이터의 삽입 (예, SQL에서 INSERT)
3) 데이터 제어어 (DCL : Data Control Language)
- 사용자는 데이터 제어어를 사용하여 데이터베이스 트랜잭션을 명시하고 권한을 부여하거나 취소
1-5. DBMS 사용자
응용 프로그래머(개발자)
- 프로그래밍 언어로 응용 프로그램을 개발하면서 데이터베이스를 접근하는 부분은 내포된 데이터 조작어를 사용
데이터베이스 관리자(DBA : Database Administrator)
- 데이터베이스 관리자는 조직의 여러 부분의 상이한 요구를 만족시키기 위해서 일관성 있는 데이터베이스 스키마를 생성하고 유지하는 사람(팀)
오퍼레이터 (인프라팀)
- DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리하는 사람
최종 사용자 (유저)
- 질의하거나 갱신하거나 보고서를 생성하기 위해서 데이터베이스를 사용하는 사람
2. 데이터베이스 유형
2-1. 관계형 데이터 베이스 (SQL)
- 바탕이 되는 데이터 구조로서 간단한 테이블(릴레이션)을 사용
- 중첩된 복잡한 구조가 없음
- 집합 위주로 데이터를 처리
- 숙련되지 않은 사용자도 쉽게 이해할 수 있음
- 표준 데이터베이스 응용에 대해 좋은 성능을 보임
2-2. 비관계형 데이터 베이스 (NoSQL)
- 분산 환경에서의 데이터 처리를 더욱 빠르게 하기 위해 개발됨.
- 관계형 db와 달리 PK,FK JOIN등 관계를 정의하지 않음.
- 스키마에 대한 정의가 없음.
2-3. SQL vs NoSQL
1) SQL 사용이 적합한 경우
- 데이터베이스의 ACID 성질을 준수해야 하는 경우
- 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
2) NoSQL 사용이 적합한 경우
- 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
- 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
- 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우