CS - 5. DB 구조와 유형
Sparta 내일배움캠프 학습으로, CS강의에 대한 공부를 위한 필기입니다.
01. DB 구조와 유형
1-1. 데이터베이스
- 정보와 데이터는 서로 다름.
- 정보 : 여러 종류의 문서로 흩어져있어 조합하기 어려운 단위
- 데이터 : 정보를 체계적으로 분류하여 조합할 수 있는 단위
💡 DB(데이터베이스)
- 정의
DB는 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 것.
DB의 구조는 사용되는 데이터 모델에 의해 결정
- 특징
- 데이터의 대규모 저장소로서, 여러 사용자에 의해 동시에 사용됨
- 시스템 카탈로그(또는 데이터 사전)와 저장된 데이터베이스로 구분할 수 있음
시스템 카탈로그는 저장된 DB의 스키마 정보를 유지
- 모든 데이터가 중복을 최소화하면서 통합됨.
- DB는 운영 데이터뿐만 아니라 그 데이터에 관한 설명까지 포함
- 설명 : DB 스키마, 메타데이터
- 프로그램과 데이터 간의 독립성이 제공됨
- 프로그램 메모리가 아닌 개별적인 저장공간에 저장되기 때문
- 효율적으로 접근이 가능하고 질의를 할 수 있음.(ex.MAX(A1:A20))
- 데이터베이스 관리 시스템(DBMS:Database Management Sysytem)
- DB를 정의하고 질의어를 지원하고, 리포트를 생성하는 등 작업을 수행하는 SW
1-2. 데이터베이스 시스템 개요
- DB 스키마
전체적인 DB 구조를 뜻하며 자주 변경되지 않음
- DB의 모든 가능한 상태를 미리 정의
- ex) 사람 데이터는 이름, 키, 몸무게, MBTI 필드를 가짐
- ex) EMPLOYEE 데이터는 EMPNO, EMPNAME, TITLE, DNO,SALARY 필드를 가짐
데이터베이스 스키마 DEPARTMENT(DEPTNO, DEPTNAME,FLOOR) EMPLOYEE(EMPNO, EMPNAME, TITLE, DNO, SALARY)
- DB 상태
특정 시점의 DB의 내용을 의미하며 시간이 지남에 따라 계속해서 바뀜
DB의 수정이 일어날 때마다 상태는 바뀜
- 데이터베이스 시스템(DBS)
- DB, DBMS, USER를 포함한 가장 큰 범위
- DBMS
- 사용자가 새로운 DB를 생성
DB의 구조를 명시
- 사용자가 데이터를 효율적으로 질의하고 수정할 수 있도록 함
사용자
- 하드웨어
DB는 디스크와 같은 보조 기억 장치에 저장, DBMS에서 원하는 정보를 찾기 위해 디스크는 블록들을 주기억장치로 읽어들여야 함
- 계산이나 조합 및 비교 연산들을 수행하기 위해 중앙처리장치가 사용됨
- DBMS 자체도 주기억장치에 적재되어 실행되어야 함
- DB 시스템의 요구사항
데이터 독립성
- 효율적인 데이터 접근
- 백업과 회복
- 중복을 줄이거나 제어하며 일관성 유지
- 데이터 무결성
- 데이터 보완
- 쉬운 질의어
- 다양한 사용자 인터페이스
1-3. 파일 시스템 VS DBMS
- 파일 시스템
1960년대부터 사용, 파일을 접근하는 방식이 응용 프로그램 내에 상세하게 표현되므로 데이터에 대한 응용 프로그램의 의존도가 높음.
단점
데이터가 많은 파일에 중복해서 저장됨.
- 다수의 사용자들을 위한 동시성 제어가 제공되지 않음
- 검색하려는 데이터를 쉽게 명시하려는 질의어가 제공되지 않음
- 보안 조치 미흡
- 회복 기능 없음
- 프로그램-데이터 독립성이 없어 유지보수 비용이 많이 소요
- 파일을 검색하거나 갱신하는 절차가 상대적으로 복잡, 생산성 낮음.
- DBMS 장점
- 1️⃣ 스키마 정의를 통해
중복성과 불일치 감소
- 표준화를 시행하기 용이
- 조직체의 요구사항 식별 가능
- 2️⃣ 관리도구를 통해
- 시스템을 개발하고 유지하는 비용이 감소
보안 향상
- 무결성 향상(트랜잭션 관리로 인해)
- 다양한 유형의 고장으로부터 DB를 회복할 수 있음
- DB의 공유와 동시 접근이 가능
- 1️⃣ 스키마 정의를 통해
- DBMS 단점
추가적인 HW 구입 비용, DBMS 자체 구입 비용 비쌈
- 직원들의 관리도구 사용법 교육 비용 많이 소요
- 비밀과 프라이버시 노출
1-4. DBMS 발전 과정
- 1️⃣ 계층 DBMS 구조
1960년대 후반 최초의 계층 DBMS
- 트리 구조 기반으로 하는 계층 데이터 모델을 사용한 DBMS
- 계층 데이터 모델은 네트워크 데이터 모델의 특별한 사례
- 2️⃣ 네트워크 DBMS 구조
레코드들이 노드로 레코드들 사이의 관계가 간선으로 표현되는 그래프를 기반으로 하는 네트워크 데이터 모델을 사용
네트워크 DBMS에서도 레코드들이 링크로 연결되어 있으므로 레코드 구조를 변경하기 어려움
- 3️⃣ 관계 DBMS 구조
가장 많이 쓰이며 모델이 간단하여 이해하기 쉬움
사용자는 자신이 원하는 것만 명시하고 데이터가 어디있는지 어떻게 접근해야 하는지 DBMS가 결정 ex) MS SQL Server, Oracle, Sybase 등
- 4️⃣ 객체 지향 DBMS
- 객체 지향 프로그래밍 패러다임을 기반으로 하는 데이터 모델
- 5️⃣ 객체 관계 DBMS
- DBMS에 객체 지향 개념을 통합한 객체 관계 데이터 모델이 제안됨
1-5. DBMS 언어
- 데이터 정의어(DDL : Data Definition Language)
사용자는 데이터 정의어를 사용하여 DB 스키마를 정의
- 데이터 정의어로 명시된 문장이 입력되면 DBMS는 사용자가 정의한 스키마에 대한 명세를 시스템 카탈로그 또는 데이터 사전에 저장
- CREATE, ALTER, DROP,CREATE INDEX
- 데이터 조작어(DML : Data Manipulation Language)
사용자는 데이터 조작어를 사용하여 DB 내의 원하는 데이터를 검색, 수정, 삽입, 삭제
- 절차적 언어와 비절차적 언어
- 관계 DBMS에서 사용되는 DQL은 대표적인 비절차적 언어
- 대부분의 데이터 조작어는 SUM, COUNT, AVG 같은 내장 함수들을 갖고 있음.
- SELECT, INSERT, UPDATE, DELETE
- 데이터 제어어(DCL : Data Control Language)
- 사용자는 데이터 제어어를 사용하여 DB 트랜잭션을 명시하고 권한을 부여하거나 취소
1-6. DBMS 사용자
- 응용 프로그래머(우리)
DB 위에서 특정 응용이나 인터페이스를 구현하는 사람
- 프로그래밍 언어로 응용 프로그램을 개발하면서 DB를 접근하는 부분은 내포된 데이터 조작어를 사용
- 작성한 프로그램은 최종 사용자들이 반복해서 수행하므로 기작성 트랜잭션 또는 프로그램이라고 부름
- 데이터베이스 관리자(DBA)
DB 관리자는 ㅗ직의 여러 부분의 상이한 요구를 만족시키기 위해 일관성 있는 DB 스키마를 생성하고 유지하는 사람
- 리얼 DB 변경이 필요할 때 DBA님에게 요청함
- DB 스키마의 생성과 변경
무결성 제약조건을 명시
- 사용자의 권한을 허용하거나 취소하고 사용자의 역할을 관리
- 백업과 회복
- 표준화 시행
- 오퍼레이터(인프라팀)
- DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리하는 사람
- 최종 사용자 (User)
질의하거나 갱신하거나 보고서를 생성하기 위해 DB를 사용하는 사람
최종 사용자는 다시 DB 질의어를 사용하며 매번 다른 정보를 찾는 캐주얼 사용자와 기작성 트랜잭션을 주로 반복해서 수행하는 초보 사용자로 구분
02. DB 유형
2-1. 관계형 데이터베이스(SQL)
- 관계형 데이터베이스
동일한 구조의 관점에서 모든 데이터를 논리적으로 구성
- 선언적인 질의어를 통한 데이터 접근을 제공
- 응용 프로그램들은 DB 내의 레코드들의 어떠한 순서와도 무관하게 작성됨
- 사용자는 원하는 데이터만 명시하고 어떻게 이 데이터를 찾을 것인가는 명시할 필요 없음
관계 데이터 모델은 지금까지 제안된 데이터 모델들 중 가장 개념이 단순한 데이터 모델
- 특징
간단한 테이블(릴레이션) 사용
- 중첩된 복잡한 구조가 없음
- 집합 위주로 데이터를 처리
- 숙련되지 않은 사용자도 쉽게 이해할 수 있음
- 기본 용어
릴레이션 : 2차원의 테이블
- 레코드 : 릴레이션의 각 행
- 튜플 : 레코드를 좀 더 공식적으로 부르는 용어 : 행(row)
- 속성 : 릴레이션에서 이름을 가진 하나의 열 : 컬럼(column)
(이미지 출처 : Part 2 데이터베이스 : 네이버 블로그 (naver.com))
1
📌 파일 시스템에는 레코드만 가진 파일 형태로 존재하지만 관계형 데이터베이스는 속성, 튜플을 가진 릴레이션(테이블) 형태로 존재함.
- 도메인
- 한 속성에 나타날 수 있는 값들의 집합
- 차수(degree), 카디널리티(cardinality)
- 차수 : 한 릴레이션에 들어있는 속성들의 수
유요한 릴레이션의 최소 차수는 1
- 속성이 1개 이상 있어야 릴레이션이 됨
릴레이션의 차수는 자주 바뀌지 않음
- 보통 테이블 스키마는 자주 못바꿈
- 카디널리티 : 릴레이션 튜플 (row 수)
유효한 릴레이션은 카디널리티 0을 가질 수 있음
릴레이션의 카디널리티는 시간이 지남에 따라 계속 변함
- 차수 : 한 릴레이션에 들어있는 속성들의 수
2-2. 비관계형 데이터베이스(NoSQL)
비관계형 데이터베이스
NoSQL이라고 부르며, Not Only SQL(SQL 뿐만이 아닌이라는 뜻) 의 줄임말
- SQL뿐만 아니라 다른 여러 장점을 가지고 있다는 말
- 기존 관계형 DB의 한계를 뛰어넘기 위해 만들어진 새로운 형태의 DB
분산 환경에서 데이터 처리를 더욱 빠르게 하기 위해 개발
- 특징
거대한 Map으로 key-value 형식을 지원
- 관계형 DB와 달리 PK, FK JOIN 등 관계를 정의하지 않음
- 스키마에 대한 정의가 없음
- 종류
- 문서형(Document) 데이터베이스
데이터를 테이블이 아닌 문서처럼 저장하는 DB
- 많은 문서형 DB에서 JSON과 유사한 형식의 데이터를 문서화하여 저장함
- 대표적인 문서형 DB는 MongoDB
- 문서형(Document) 데이터베이스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
- 속성을 Key-Value의 쌍으로 나타내는 데이터를 배열의 형태로 저장 - Key는 속성 이름 Value는 속성에 연결된 데이터 값을 의미 - Redis, Dynamo 등이 대표적인 Key-Value 형식의 DB - **Wide-Column Store 데이터베이스** - DB의 Column에 대한 데이터를 집중적으로 관리하는 DB - 각 열에는 key-value 형식으로 데이터가 저장되고 column families라고 하는 열의 집합체 단위로 데이터를 처리할 수 있음 - 하나의 행에 많은 열을 포함할 수 있어 유연성이 높음 - 대표적인 wide-column DB에는 Cassavdra, Hbase가 있음 - **그래프 데이터베이스** - 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 DB - 노드에 속성별로 데이터를 저장함. 각 노드 간 관계는 선(edge)로 표현함 - 대표적인 그래프 DB에는 Neo4J, InfiniteGraph가 있음
- 장점
대용량 데이터를 처리하기 효율적
- 읽기 작업보다 쓰기 작업이 더 빠르고 관계형 DB에 비해 쓰기와 읽기 성능이 빠름
- 데이터 모델링 유연
- 뛰어난 확장성으로 검색에 유리
- 복잡한 데이터 구조를 표현할 수 있음
- 단점
- 쿼리 처리시 데이터를 파싱 후 연산을 해야해서 큰 크기의 document를 다룰 때는 성능이 저하됨
- 특징
2-3. SQL vs NoSQL
💡 SQL 사용이 적합한 경우
- DB의 ACID 성질을 준수해야 하는 경우
ACID : Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)
- 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
- DB의 ACID 성질을 준수해야 하는 경우
💡 NoSQL 사용이 적합한 경우
데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우