DB 개요
Data
- 컴퓨터에 저장된 의미 있는 정보들
- 행정 데이터, 의료 데이터, 성적 데이터, 실험 데이터, ...
컴퓨터에서 데이터는 어떻게 존재하나?
- 메모리에 저장되는 형태
- 변수 : numbers, strings
- 구조체 : lists, dictionaries, objects, ...
- 지속적인 형태
- Disk : text, XML, JSON, ...
- Database
- key-value store
- 객체(Ojbect) DB
- 관계형(Relational) DB
text file에 data를 저장할 때의 문제점?
1. 검색이 어렵다
2. 동시접근이 어렵다
➡️ 그래서 DB를 사용한다
DB
DB(Database)
: 검색과 동시접근이 효과적이도록 조직화된 데이터들의 집합
- 데이터를 조직화하는 방법에 따라 여러 종류로 분류된다
(Key-value DB, 관계형 DB, 객체 DB)
DB 예제
- Amazon의 2000만개 이상의 품목을 2TB DB에 저장한다고 가정.
2 TB를 하나의 Computer에 모두 저장하면 안되는 이유?
➡️ 동시접속자가 많기 때문에 computer가 down될 수 있음.
그래서 2TB를 복사하여 여러 Computer에 저장한다.
이렇게 여러 Computer에 복사하여 부하가 적은 곳으로 할당 한다.(Load Balancing)
그런데 이렇게 복사하면 문제가 없을까?
➡️ 동기화 문제
➡️ 그래서 read only의 특성을 가진 상품 정보와 수시로 update가 필요한 결제, 등의 여러 DB들을 따로 만들어서 관리한다.
DB Management System
DBMS(Database Management System)
: DB의 생성, 검색, 관리를 도와주는 SW
- 대표적 DBMS : Oracle DBMS, MySQL, SQLite, Mongo DB, ...
- OS와 하는 일이 거의 비슷하다.
OS는 사용자에게 HW 자원들을 추상화시켜 사용하기 편하도록 한다.
DBMS는 detail한 HW(Low level)몰라도 쓸 수 있도록 Table 형태로 추상화시켜 보여준다.
- SQL(표준 발음 : 시퀄)을 이용하여 DBMS를 통해 DB에 query(질의), update(갱신) 등의 연산을 수행한다.
DB System
- DB 자체와 이를 관리하는 SW(DBMS + 응용 프로그램)을 모두 총칭하는 용어
DB의 특징
1. 자기 기술성 (self-describing)
- 자기 기술성 : 자기가 자기 자신에 대해서 어떤 data를 어떤 형태로 갖고 있는지 말해줄 수 있다.
DB catalog
에는 meta-data
가 저장되어 있다.
meta-data
란?
➡️ Table 구조, Table이 저장된 위치, 인덱스 형성 체계 등 DB 자체에 대한 내부적 정보 관리
➡️ 실제 data들이 어떤 형태로 있는지 한 차원 위에서 내려다보는 것
위 그림에서 catalog라고 가리키고 있는 DB는 catalog DB이다.
catalog DB : meta-data를 담고 있는 DB이다.
2. Program-Data 독립성
- 위 사진에서 볼 수 있듯이,
DBMS가 User Program과 DB 사이에서 DB를 추상화시켜준다 = program과 data가 독립되어 있다
3. Data에 대한 다양한 View 제공 & 추상화
-
Data 추상화
: 2.(Program-Data 독립성)과 같은 내용으로,
Database에 대한 복잡한 구조를 몰라도 Table 형태로 추상화해준다.
-
View
: 가상의 Table.
Table을 모든 사용자에게 똑같이 보여줄 필요 없으니, Database에 대한 정보를 조합하여 가상의 Table을 만들어서 보여줄 수 있다.
4. Data 공유와 다수 사용자 트랜잭션 처리
- 여러 사용자가 동시에 동일한 DB를 공유하도록 지원
- 동시에 사용하더라고 일관성을 보장하기 위한 동시성 제어 기능 제공
- 트랜잭션 : DB 작업을 수행하는 단위 process(예 : 좌석예약)
➡️ 여러명이 한꺼번에 접속했을 때, 순차적으로 처리하지 않은 듯 보이면서도 순차적으로 처리한 것과 같은 효과를 줄 수 있도록 하는 것
ex) 비행기 좌석 예약시, 한 좌석은 한 사람에게만 배정되어야 함.
➡️ How?
여러 명이 완전히 똑같은 data에 대해 동시에 update할 것 같으면
즉, 충돌이 될 것 같으면 미리 감지하여 순차적으로 처리시킨다.
만약 충돌이 안될 것 같으면 동시에 처리시킨다.
DB 사용자의 분류
1. DB 설계자
- 요구 분석 과정을 거쳐서 관리할 데이터를 선정하고, 저장할 구조를 결정.
- 실세계 현상을 모델링하는 기술이 요구됨 (ERD, FD, 관계형 데이터베이스 이해)
2. DB 응용 개발자
- 사용자를 위하여 잘 정의된 기능의 응용을 분석/설계하고 구현하는 사람
- SQL과 programming 능력이 중요.
SQL을 통해 DBMS와 소통하여 app에 있는 data들을 update
3. DB 관리자
- DBA(DB Administrator) :
DB system 관리 총괄.
DB 성능 모니터링 ➡️ 튜닝, 사용자 권리(접근 권한)
➡️ system에 대한 전체적 이해 필요(지식, 경험 중요)
python, go, bash(shell script : 자동화 능력) 등 script 개발 경험
4. DB 사용자
- DB에 대하여 query, update, 보고서를 작성하는 사람
DBMS의 장점
-
데이터 중복성 제어 및 중복 최소화
-
보안 기능 :
권한 설정 가능 (DBA의 역할)
-
지속성 기억 공간 제공
-
효율적 질의처리를 위한 저장 구조 제공
-
백업과 회복 기능 제공
: 정전되었을 때, DBMS는 1) 완전히 처음으로, 2) 중단지점에서 자동으로 완료해줌 중 하나
-
다수의 사용자 인터페이스 제공
-
데이터 간 복잡한 체계적 표현
-
DB의 무결성(integrity) 제약 조건의 시행 :
각 속성 값이 가져야 하는 제약 조건 (ex. 나이는 0~120세)
테이블간의 가져야 하는 제약 조건
-
동시성 제어 기능 제공(트랜잭션 개념)
-
데이터 독립성 제공 (데이터와 프로그램의 분리)
DB를 사용하지 않아도 좋은 경우