Day 21

TIL - SQL and RDB

๐Ÿ“‹ย ๊ณต๋ถ€ ๋‚ด์šฉ

SQL

SQL : Structured Query Language

  • DDL(Data Definition Language) : ํ…Œ์ด๋ธ” schema ์ •์˜
  • DML(Data Manipulation Language) : ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ(๋ ˆ์ฝ”๋“œ) ์กฐ์ž‘๊ณผ ์งˆ์˜

1. SQL ํŠน์ง•

  • ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ์‰ฝ๊ณ  ๊ฒ€์ฆ๋œ ์–ธ์–ด
  • ๋น… ๋ฐ์ดํ„ฐ ๋“ฑ์žฅ -> SQL ํ•˜๋ฝ? -> ๋น… ๋ฐ์ดํ„ฐ ๋˜ํ•œ ๊ตฌ์กฐํ™” ๋œ ๋ถ€๋ถ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— SQL์ด ํ•„์š” -> SQL ์žฌ๊ธฐ
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค (Redshift, Snowflake, BigQuery ๋“ฑ) SQL ๊ธฐ๋ฐ˜
  • ๋ฐ์ดํ„ฐ ์ง๊ตฐ : ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด, ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€, ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž ๋ชจ๋‘ SQL์ด ์ค‘์š”

2. ๋‹จ์ 

  • ๋น„๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ์ œํ•œ์ 
    • ์ •๊ทœํ‘œํ˜„์‹์„ ํ†ตํ•ด ์–ด๋Š์ •๋„๋งŒ ๊ฐ€๋Šฅ
    • Spark, Hadoop ๊ฐ™์€ ๋ถ„์‚ฐ ์ปดํ“จํŒ… ํ™˜๊ฒฝ ํ•„์š”
  • ๋งŽ์€ RDB๋Š” ํ”Œ๋žซํ•œ ๊ตฌ์กฐ๋งŒ ์ง€์›(JSON์ฒ˜๋Ÿผ nested ๊ตฌ์กฐ X)

RDB

Relational Database
๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์งˆ์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ €์žฅ ์žฅ์น˜

1. Table Schema?

  • table format
  • ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„๊ณผ ํƒ€์ž…

2. RDB ํŠน์ง•

  • ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ : RDB์— ์ €์žฅํ•˜๊ธฐ ํŽธํ•จ
  • But, ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋„ ๋งŽ์Œ (text, image, video, streaming, …)

3. data modeling

  • RDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ• ๊ฒƒ์ธ๊ฐ€? ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Production Database

OLTP (Online Transaction Processing)
๋น ๋ฅธ ์‘๋‹ต ์†๋„, ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ
์›น, ์•ฑ ์„œ๋น„์Šค ๋“ฑ์— ์‚ฌ์šฉ๋˜๋ฉฐ FE, BE ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฃผ๋กœ ์‚ฌ์šฉ

Star schema

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜๋ฉฐ, ํ•„์š”ํ•  ๊ฒฝ์šฐ JOIN
  • ์Šคํ† ๋ฆฌ์ง€์˜ ๋‚ญ๋น„๊ฐ€ ๋œํ•˜๋ฉฐ, ๊ณ„์‚ฐ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฌ์ง€๋งŒ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ํŽธํ•จ

๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค Data Warehouse

OLAP (Online Analytical Processing)
ํฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋˜๋Š” ๋ชจ๋ธ ๋นŒ๋”ฉ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ
๋ฐ์ดํ„ฐ ์ง๊ตฐ ๋ฐ ๋ฐ์ดํ„ฐํŒ€์ด ์ฃผ๋กœ ์‚ฌ์šฉ

Denomalized schema

  • ๋‹จ์œ„ ํ…Œ์ด๋ธ”๋กœ ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ณ„๋„์˜ JOIN์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ
  • ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋” ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋น ๋ฅธ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅ

RDB 2๋‹จ๊ณ„ ๊ตฌ์กฐ

  1. db folder(schema)
  2. tables
1
2
3
4
5
6
7
8
9
raw_data(DB)
|-patient(table)
|-patientData
|-patientProfile
|
analytics(DB)
|-patientSummary(table)
|-vitalSummary
|-alertSummary

table ๊ตฌ์กฐ

  • records(row)
  • ํ•˜๋‚˜ ์ด์ƒ์˜ field(column)์œผ๋กœ ๊ตฌ์„ฑ
  • field๋Š” name, type, primary key ์—ฌ๋ถ€๋กœ ๊ตฌ์„ฑ๋จ
column nametypepk?
userIdint
sessionIdvarchar(32)Yes
channelvarchar(32)

Data Warehouse

๋ฐ์ดํ„ฐ ๋ถ„์„ ๋“ฑ ํฐ ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณ„๋„๋กœ ์กด์žฌํ•˜๋Š” DB
ํ”„๋กœ๋•์…˜ DB์˜ ์†๋„ ์ €ํ•˜๋ฅผ ๋ง‰๊ณ  ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ

  • ๊ณ ๊ฐ์ด ์•„๋‹Œ ๋‚ด๋ถ€ ์ง์›์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ํ”„๋กœ๋•์…˜ DB๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณต์‚ฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์— ์ €์žฅ
  • ํ”„๋กœ๋•์…˜ DB์™€ ๋‹ค๋ฅด๊ฒŒ primary key uniqueness๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ

1. ์„œ๋น„์Šค ๋ณ„ ๋น„์šฉ ์˜ต์…˜ ๋น„๊ต

ํšŒ์‚ฌData Warehouse๋น„์šฉ ์ฒญ๊ตฌ ์˜ต์…˜
AWSRedshift๊ณ ์ •๋น„์šฉ
GoogleCloudBig Query๊ฐ€๋ณ€๋น„์šฉ
Snowflake
  • ์‹ค์ œ ์‚ฌ์šฉ์‹œ ๊ฐ€๋ณ€๋น„์šฉ์˜ ์›จ์–ดํ•˜์šฐ์Šค ์‚ฌ์šฉ ์ถ”์ฒœ

2. ETL(๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ)

  • ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ Data Warehouse๋กœ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ

๋ฐ์ดํ„ฐ ์ธํ”„๋ผ

  • ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๊ด€๋ฆฌ
  • ETL, Data Warehouse
  • (๋น„ ๊ตฌ์กฐ์  ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ๊ฒฝ์šฐ )Spark ๋“ฑ ๋Œ€์šฉ๋Ÿ‰ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

Cloud & AWS

Cloud

์ปดํ“จํŒ… ์ž์›์„ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

1. ์ปดํ“จํŒ… ์ž์›

  • ์ดˆ๊ธฐ์—๋Š” ์„œ๋ฒ„ ๋“ฑ ํ•˜๋“œ์›จ์–ด์— ๊ตญํ•œ๋˜์–ด ์„œ๋น„์Šค๋จ
  • ์ตœ๊ทผ์—๋Š” mysql ๋“ฑ ์†Œํ”„ํŠธ์›จ์–ด ๋˜ํ•œ ์„œ๋น„์Šค๋˜๊ณ  ์žˆ์Œ

2. ํƒ„๋ ฅ์  ์ž์›

“No Provisioning”, “Pay As You Go”

  • ์ž์›์„ ํ•„์š”ํ•œ๋งŒํผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋งŒํผ ์ง€๋ถˆ
  • ํ•„์š”ํ•œ๋งŒํผ์˜ ์ž์›์„ ์œ ์ง€ํ•˜๋Š”๊ฒƒ์ด ์ค‘์š”

3. ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ…์ด ์—†๋‹ค๋ฉด?

  • ์„œ๋ฒ„,๋„คํŠธ์›Œํฌ, ์ €์žฅ์†Œ ๋“ฑ ๊ตฌ๋งค์™€ ์„ค์ • ใ……์ง์ ‘ ์ˆ˜ํ–‰
  • ํ™•์žฅ์ด ํ•„์š”ํ•˜๋ฉด ๊ณต๊ฐ„๋ถ€ํ„ฐ ํ™•๋ณดํ•ด์•ผํ•จ
  • ์„œ๋ฒ„ ๊ตฌ๋งค ๋ฐ ์„ค์น˜์— 2~3๋‹ฌ ์†Œ๋ชจ
  • Peak time ๊ธฐ์ค€์œผ๋กœ Capacity planning -> ์ž์›์ด ๋†€๊ฒŒ ๋˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ
  • ์ง์ ‘ ์šด์˜ ๋น„์šฉ๊ณผ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ๋น„์šฉ -> ๊ธฐํšŒ๋น„์šฉ (์ง์ ‘ ์„ค์น˜์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ๋น„์šฉ์œผ๋กœ ํ™˜์‚ฐํ•œ๋‹ค๋ฉด?)

4. ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์žฅ์ 

  • ์ดˆ๊ธฐ ํˆฌ์ž ๋น„์šฉ์ด ํฌ๊ฒŒ ์ค„์–ด๋“ฌ -> ์šด์˜ ๋น„์šฉ์ด ์ฆ๊ฐ€
  • ์ž์› ์ค€๋น„ ๋ฐ ์„ค์ •์„ ์œ„ํ•œ ๋Œ€๊ธฐ์‹œ๊ฐ„ ๋Œ€ํญ ๊ฐ์†Œ
  • ๋…ธ๋Š” ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ๋กœ ๋น„์šฉ ๊ฐ์†Œ

AWS

๊ฐ€์žฅ ํฐ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์„œ๋น„์Šค ์—…์ฒด ํ˜„์žฌ Amazon์—์„œ ์ œ์ผ ํฐ ์ด์ต์„ ๋‚ด๊ณ  ์žˆ์Œ Netflix, Zynga ๋“ฑ ์ƒ์žฅ ์—…์ฒด๋“ค๋„ ์‚ฌ์šฉ์ค‘

AWS ์„œ๋น„์Šค

  • EC2: ์„œ๋ฒ„ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค
  • S3: ๋Œ€์šฉ๋Ÿ‰ ํด๋ผ์šฐ์Šค ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค
  • Redshift : Data Warehouse ์„œ๋น„์Šค
  • ๊ธฐํƒ€ DB ์„œ๋น„์Šค, AI&ML ์„œ๋น„์Šค ๋“ฑ

Redshift

Scalable SQL ์—”์ง„

  • OLAP
  • Columnar storage : ์ปฌ๋Ÿผ๋ณ„ ์••์ถ• ๊ฐ€๋Šฅ, ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๊ฐ€ ๋น ๋ฆ„ (๋ ˆ์ฝ”๋“œ ๊ธฐ์ค€ X)
  • ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ ์ง€์›: insert ์ปค๋งจ๋“œ๋กœ๋Š” ์ถ”๊ฐ€ํ•˜๊ธฐ ์–ด๋ ค์šด ๋งŽ์€ records๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์— copy ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ผ๊ด„ ๋ณต์‚ฌ ๊ฐ€๋Šฅ
  • Postgresql 8.x์™€ SQL (๋Œ€๋ถ€๋ถ„)ํ˜ธํ™˜๋จ

Redshift Schema

1
2
3
4
5
            DEV
             |
    -----------------------
    |        |            |
<raw_data> <analytics> <adhoc>

SQL command

1
2
3
CREATE SCHEMA raw_data
CREATE SCHEMA analytics
CREATE SCHEMA adhoc

๐Ÿ‘€ย CHECK

(์–ด๋ ต๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ ๋“ฑ ๋‹ค์‹œ ํ™•์ธํ•  ๊ฒƒ๋“ค)

โ— ๋Š๋‚€ ์ 

Hugo๋กœ ๋งŒ๋“ฆ
Jimmy์˜ Stack ํ…Œ๋งˆ ์‚ฌ์šฉ ์ค‘