공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지/데이터베이스

빠르게 정리하는 데이터베이스 (1) 기본개념, DB Structure

inspirit941 2021. 7. 5. 13:38
반응형

introduction

What is SQL? (DB Management)

스크린샷 2021-05-31 오후 2 03 24

SQL : 데이터베이스 서버가 Constructing Statements을 실행할 수 있도록 지원하는 데이터베이스용 언어.

스크린샷 2021-05-31 오후 2 06 27

Database - 저장하고 싶은 데이터를 저장할 수 있는 공간. 정확한 정의는 "DBMS의 관리하에 놓여 있는 Persistent Data의 집합."

  • Persistent Data : 일반적으로 컴퓨터 램에 올라간 데이터는 애플리케이션이 종료되면 사라짐. 애플리케이션이 종료되거나 컴퓨터가 꺼져도 계속 보존되는 데이터를 말함.

스크린샷 2021-06-01 오전 11 56 53

DBMS : persistent Data가 저장된 데이터베이스를 관리하기 위한 서버. ex) MySQL.

  • SQL을 실제로 데이터베이스에서 작동할 수 있도록 실행하며, 쿼리 최적화도 담당한다.

스크린샷 2021-06-01 오후 12 00 18

따라서 보통은 Application에서 특정 목적에 활용하기 위한 데이터를 생성하고 (User 같은),


SQL 같은 DB 언어를 사용해서 DBMS가 필요한 데이터를 저장하는 게 일반적인 흐름이다.

Relational Databases

스크린샷 2021-06-02 오전 11 12 23

기본적으로는 Table 형태로 정의할 수 있는 데이터베이스 구조.

  • Primary Key : Table 내에서 각 row가 고유한 구분값을 갖도록 하는 key.

스크린샷 2021-06-03 오전 11 33 40

  • Integrity Constraint : 데이터를 추가할 때, 지정된 로직 / 제한조건을 충족하는 데이터만 DB에 추가할 수 있음.

스크린샷 2021-06-03 오전 11 52 15

장점

  • Redundant Data (중복된 데이터)를 효율적으로 관리할 수 있음.
  • Normalization.

Data Structure behind DB.

스크린샷 2021-06-03 오후 12 45 33

(Balanced) Binary Search Tree 등의 자료구조는

  • 검색 시 LogN의 시간복잡도를 보장할 수 있지만
  • Main Memory에 저장되기 때문에 GB 이상의 데이터를 한번에 다루긴 어렵다.

따라서 큰 데이터를 다루려면 External Memory가 필요함 -> File System / Database.

스크린샷 2021-06-03 오후 12 49 06

External Memory는 상대적으로 느리다. 대신 전력이 없어도 저장된 데이터가 유지될 수 있게끔 되어 있다. HDD의 경우 내부적으로는 block이라는 단위로 데이터를 저장한다. (512MB)

스크린샷 2021-06-03 오후 6 08 04스크린샷 2021-06-03 오후 6 08 50

External Memory와 Main Memory의 핵심 차이는 아래와 같다.

스크린샷 2021-06-03 오후 6 08 57

  • External Memeory (HDD 등)에 저장된 데이터는 그 자체로 연산을 수행할 수 없다. 메인 메모리의 heap / stack 등의 영역에 올라온 뒤에야 처리가 가능하다.
  • 기본적인 block 단위인 512MB로 데이터를 읽어들일 수 있으며, 데이터를 읽어들이는 속도 (즉 block에 접근하는 속도)는 느리다.

스크린샷 2021-06-03 오후 6 12 51

따라서 Main Memory에서 데이터를 효과적으로 관리하기 위한 개념이 Data Structure,

External Memory (HDD) 에서 데이터를 관리하기 위한 개념이 DBMS라고 보면 된다.

스크린샷 2021-06-03 오후 6 13 24스크린샷 2021-06-03 오후 6 15 35

데이터베이스의 데이터를 다루려면 염두해야 할 고려요소들은 아래와 같다.

  1. Recursive의 성능이 훨씬 떨어진다. 메인 메모리에서 데이터에 접근하는 속도보다 외부장치에서 데이터를 읽어들이는 속도는 현격한 차이가 있기 때문.
  2. 데이터를 읽어들이는 최소 단위가 512MB. 데이터를 읽고 쓰기 위한 최소 크기가 메인 메모리에 비해 더 크다.

따라서, 외부 장치에서 데이터를 가져오기 위한 시도는 가급적 최소화해야 한다. Read Operation의 횟수를 최대한 줄여야 한다는 뜻.

그렇기 때문에, Read / Write Operation을 최소화하는 자료구조인 B - Tree가 데이터베이스에서 많이 사용된다.

스크린샷 2021-06-03 오후 6 21 54스크린샷 2021-06-03 오후 6 19 33

B Tree의 특징으로는

  • Self Balancing Tree
  • O(logN)의 접근시간
  • 최소한 2개의 child + multiple Keys
  • Large block of data를 읽어들이는 데 최적화된 자료구조

File System이나 Database에서 보편적으로 쓰인다.

스크린샷 2021-06-03 오후 6 21 39

따라서 DB의 느린 속도를 최적화하기 위해 DB Index 등에 보편적으로 쓰인다.

Procedure / Non-procedure Language

스크린샷 2021-07-04 오후 12 08 25스크린샷 2021-07-04 오후 12 12 19

  1. Procedural Language
    • 해야 할 작업을 순차적으로 적어놓은 것
    • what to do, how to do 둘 다 작성해야 함
    • efficiency 좋은 편

스크린샷 2021-07-04 오후 12 12 29

  1. Functional Languages
    • What to do만 입력, how to do는 입력하지 않는다.
    • 배우긴 쉽지만 언어의 효율성은 약간 떨어지는 편.
    • DB 벤더에 따라 procedure를 수행할 수 있는 complete script 기능을 제공하기도 한다. (PL/SQL, T-SQL)
    • Stored Procedure -> 일종의 procedural command.

스크린샷 2021-07-04 오후 12 14 14

결과적으로 SQL 같은 query를 입력하면, DBMS에서 위와 같은 절차를 거쳐 Physical DB의 실제 데이터에 접근하고 작업할 수 있게 된다.

DBMS 종류

스크린샷 2021-07-04 오후 12 19 04

  • DB와의 통신 언어로 PL/SQL을 사용하는 오라클. PL은 Procedural Language를 의미함.
  • PL/SQL?
    • loop나 조건문 같은 procedural 언어의 기능 지원
    • 좋은 퍼포먼스를 보여줌
    • handle Error / Exception 가능함.

따라서 서비스 규모가 커질수록 PL/SQL 기반 오라클을 사용하는 경우가 많은 편. 성능 좋고 빠르며 프로그래밍 언어처럼 코딩할 수도 있으니까.

스크린샷 2021-07-04 오후 12 23 57

  • T-SQL을 사용하는 MSSQL.
  • T-SQL은
    • Transaction Control 기능을 제공하고
    • handle Error / Exception

스크린샷 2021-07-04 오후 12 29 35스크린샷 2021-07-04 오후 12 30 27

반응형