1. 최근 데이터 트렌드
- 데이터가 기하급수적으로 늘고 있다.
인간에 의해서 생성된 데이터 (소셜 미디어, 카메라, 전화기, 스마트 워치 등등)
기계에 의해서 생성된 데이터 (자율주행 자동차, 스마트 홈, 소프트웨어 로그 등등)
- 데이터 수요가 늘고 있다.
위와같은 통계가 보여주듯이, 데이터는 모든 것의 중심이 되었음.
2. 데이터 베이스에 대하여
- 데이터 베이스란 무엇인가?
핵심은 데이터를 모은다는 것. 그냥 모으는게 아니라, 많은 데이터를 통합시켜서 모은다.
공유의 목적도 있다. ( A large, integrated collection of data )
- 우리는 관계형 데이터베이스에 집중한다.
관계형 데이터베이스란 테이블 형태의 데이터베이스를 말한다.
즉, 현실 세계에 있는 모든 것을 테이블 형태로 하겠다는 것.
3. 현실 세계에서 데이터베이스들
- 알게 모르게 다 쓰이고 있는데, 예시로는
아마존의 온라인 서점, 각 대학교 수강신청 시스템, 은행 시스템, 항공 예약 시스템 등등.
- 여기서 2가지 질문이 나온다.
1) 우리가 필요한 데이터는 무엇인가?
아마존같은 경우, 책에대한 주문, 배송, 환불, 결제 데이터가 복잡하게 얽혀있다.
그리고 여러가지 검색이나 클릭, 페이지 이동등 세션에서 발생하는 동적인 데이터.
2) 어떤 시스템을 구축하길 원하는가?
책 검색 시스템, 책 추천 시스템, 결제 시스템, 주문 시스템 등.
4. DBMS (Database Management Systems)
- DBMS란 무엇인가?
데이터베이스를 관리하고 저장하도록 설계된 소프트웨어.
(특히, 우리가 기본적으로 다루는 테이블 형태의 DBMS를 RDBMS라고 한다.)
- Examples
Commercial : Oracle, IBM DB2, Microsoft SQL Server, Altibase, Cubrid
Open Source : MySQL (Sun/Oracle), PostgreSQL, MariaDB
Open Source Library : SQLite (DB는 아니지만, 스마트폰의 작은 용량때문에 만들어진 라이브러리의 일종.)
5. DBMS없이 데이터 저장하는 경우
- 필요한 데이터가 생기면, 많은 파일로 저장하고, 많은 Application Program에 의해서, 사용되었다.
- 이경우의 문제점은?
데이터베이스가 대학생에 관련된 데이터베이스라고 가정하면,
새로운 학생이 올 때마다 추가해야하거나, 휴학 혹은 편입이나 개명을 했을 경우에는
그 학생에 대한 정보를 application에서 일일이 다찾아야 하고, 한가지를 바꾸려면, 코드 전체를 수정해야 했다.
- 근본적인 2가지 문제점이 있다.
1) Dependency (파일과 어플리케이션이 종속되어 있다.)
2) Redundancy (중복 문제)
- 다음과 같은 상황을 생각해보자.
몇몇 프로그램이 같은 시간에 같은 기록을 변경 혹은 접근하고자 한다면?
파일중 하나에 다른 속성이 추가된다면?
빠른시간내에 한가지 기록을 반복적으로 접근할 필요가 있는 경우
다수의 파일에 저장되어 있는 데이터를 검색할 필요가 있는 경우
어플리케이션 중 하나가 작동 중에 시스템이 나간다면?
DBMS가 없는 경우 위 상황에서 문제가 발생할 수 있다.
6. DBMS를 이용하여, 데이터 저장하는 경우
- DB도 파일로 저장한다. (물리적으로는 파일이지만, 논리적으로는 케이블 형태이다.)
- 파일 접근이 필요하면, DBMS를 거친다.
- 종속성과 중복성 문제를 없애고, 보안 문제도 해결 가능하다. (누가 파일을 요청했는지 로그에 다 남기 때문에,
불법적인 행위도 다 남는다.)
7. DBMS Functions
- 모든 데이터에대한 접근이 DBMS에 의해서 중앙집권화되고, 관리된다.
- 사용 이점
1) 효율적인 접근이 가능
2) 데이터 통합과 보안
3) 동시적인 접근과 실행을 제어할 수 있다.
4) Crash에 대한 Recovery가 가능하다.
- 디자인과 실행 이점
1) 논리 데이터 독립성
2) 물리 데이터 독립성
3) Application development time의 감소
- 단점
1) 비싸다
2) DB 자체가 너무 크다. (Heavy하다.)
8. Current Market
- 여전히 관계형 데이터베이스에 기반을 두고 있다.
Elephants: Oracle, IBM, Microsoft, Teradata, EMC, …
Open source: MySQL, PostgreSQL
Emerging variants: In-memory, Column-oriented
- Open Source "NoSQL"의 성장
Analytics: Hadoop MapReduce, Spark
Key-value Stores: Mongo, Cassandra, Couch
- 클라우드 서비스의 빠른 성장
Amazon Redshift/Aurora, Microsoft Cosmos DB
- 소셜 네트워크 (페이스북, 트위터 등)이 뜨면서, 기존에 저장했던 데이터 패턴이 달라졌다.
그래서, 테이블로 구현이 어려워짐.
9. 데이터를 어떻게 저장할 것인가?
- 테이블 형태로 저장.
- 경험이 많은 경우 현실 세계를 테이블로 바꿀 수 있는데, 현실은 쉽지가 않음.
따라서, 중간에 모델링이 하나 더 나옴. (CMS, Course Management System, 개체 관계 모델링)
- 2가지로 나뉜다.
1) Entities (개체) : 여러가지 명사들
Students, Courses, Professors
2) Relationships (관계) : 명사로 엮어지는 것들
누가 어떤 과목을 수강하는지, 누가 어떤 과목을 가르치는지. 누가 휴학을 하고 등록을 하는지 등의 관계
10. 데이터 모델
- 데이터 모델이란, 데이터를 표현하는 콘셉트의 모음 ( 관계형 모델 데이터가 가장 널리 쓰인다.)
- 스키마란, 주어진 데이터 모델을 사용하여, 특정한 데이터의 모음을 표현하는 것.
e.g.) 모든 관계형 데이터 모델에서 관계는 유형을 표현하는 스키마를 가진다.
11. CMS 모델링
- 논리 스키마
Students(sid: string, name: string, gpa: float)
Courses(cid: string, cname: string, credits: int)
Enrolled(sid: string, cid: string, grade: string)
- 다른 스키마들??
1) 물리 스키마 : 데이터 layout을 묘사
정돈되지않은 파일 같은 관계, 정돈된 몇몇 데이터들
2) 외부 스키마 : Course_info, 다른 테이블로 부터 파생된.
12. Data independence
- 로지컬, 피지컬 데이터가 독립성을 가지기 때문에, 어플리케이션 구조와는 상관이 없다.
- SQL은 원하는걸 가져오라고 하지, 어떻게 가져오던지 신경쓰지 않는다. DB가 알아서 잘해준다.
13. Overview of DBMS topics
- DB는 혼자 쓰는게 아니라, 여러 사람들이 병렬로 써서, 문제가 생긴다.
- Transactions (처리) : atomic하게 , Concurrency & locking, Atomicity & logging
14. Summary
- DB를 쓰면, 독립성을 제공해준다.
- 최소한의 중복 제공