일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- json #typescript
- SW
- database
- DP
- designpatternn
- datamodel
- db
- storagemanger
- kafka
- entityrelational
- Implementation
- Today
- Total
i.am.developer
Database - Intro 본문
DB의 정의
- 데이터베이스(Database)
- 어떤 목적을 갖고 관련된 데이터를 잘 모아놓은 집합.
- A well organized collection of (relevant) data to an organization
- Database Management System(DBMS)
- 데이터베이스를 관리하고 저장하는 프로그램 모음.
- 사용자에게 DB에 효과적인 접근방법들을 제공해준다.
- Transactional, Secure, Reliable, etc.
DB를 사용하는 이유
사실 DB, DBMS가 없어도 File System(OS에서 제공하는 FS)으로도 충분히 Data를 저장하고 관리할 수 있다.
파일시스템으로 데이터를 관리한다는게 무엇일까? 우리는 급하게 어떤 메모를 해야할 때, MySQL, MSSQL 과 같은 DBMS를 설치하고 실행해서 그곳에 메모를 저장하지 않는다. 편하게 메모장을 키고 필요한 메모를 하고 저장한다. 이렇게 FS로도 충분히 데이터를 저장하고 수정도 가능하다.
그렇다면 굳이 DBMS를 쓰는 이유가 무엇일까? 답은 파일시스템의 여러 단점을 보완해주기 때문이다.
File System의 단점
- 데이터 중복와 불일치 가능성(Data Redundancy and Inconsistency)
- 데이터 접근의 어려움 (Difficulty in accessing data)
- 데이터 독립 (Data isolation)
- 무결성 문제 (Integrity problems)
- 갱신의 원자성 (Atomicity of update)
- 여러 사용자에 의한 동시접근 (Concurrent access by multiple users)
- 보안 문제 (Security problem)
위 문제들을 걱정할 필요없이 데이터를 관리할 수 있어서 편리하다! 단순한 "빠름"은 아니다. 오히려 파일시스템보다 더 느릴수도 있다. 관련글
Data를 보는 관점
데이터를 보는 관점은 추상의 단계와 연관되어있다.
- View Level:
- 애플리케이션 프로그램은 데이터를 그대로 보내주지 않는다. 보안과 관련된 여러가지 이유로 중요한 정보는 가리거나 필요한 정보만 선택적으로 보여준다. 그렇게 보여지는 계층을 View level이라 한다.
- Logical Level:
- 데이터베이스에 데이터가 저장된 형태와 그 데이터간의 관계를 보여주는 계층이다. 아래와 같이 프로그래밍적인 관점이다.
type customer = record
customer_id: string;
customer_name: string;
customer_city: integer;
end;
- Phiysical Level
- 레코드가 어떻게 저장될 것인가를 묘사한다. 이부분은 Compiler, OS, HW 등의 low level 영역이기 때문에 일반적인 프로그래머는 신경쓸 필요가 없다.
Data Model
Conceptual Level Model
개념적인 단계의 모델은 추상적이며 사람중심이다. 이런 모델의 예로는 Entity Relationship Model이 있다.
Logical Level Model
논리적인 단계의 모델은 컴퓨터중심이다. 이런 모델의 예로 Relational Model(RDB), OODB, ORDB 등이 있다.
DB 엔진
DB는 여러가지 책임을 갖고 있는 모듈들로 이루어져 있다. 그 중 중요한 몇가지만 설명한다.
Storage Manager
low-level 데이터와 애플리케이션 데이터와 쿼리 사이의 인터페이스를 제공해주는 모듈이다. 저장소 접근이나 파일 정렬, Indexing, Hashing 등을 담당한다.
Query Processor
사용자가 Query를 전송하면 해당 쿼리를 받아 Parsing, translation → Optimization → Evalution을 담당한다.
Transaction Management
하나의 로직을 수행하기 위한 일련의 동작들의 모음 단위를 Transaction이라 한다. 시스템 failure 에도 consistent한 상태를 유지하도록 도와준다.