TIL - 5

ํƒœ๊ทธ
DB
๋‚ ์งœ
Mar 29, 2022
์†์„ฑ

MySQL ์†Œ๊ฐœ

MySQL ์—ญ์‚ฌ

  • 1995๋…„ ์Šค์›จ๋ด ํšŒ์‚ฌ์—ฟ๋˜ MySQL AB์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • ์˜คํ”ˆ์†Œ์Šค๋กœ ์‹œ์ž‘๋จ
  • 2008๋…„ ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ด ์ธ์ˆ˜
  • 2009๋…„ ์˜ค๋ผํด์ด ์ฌ์„ ์ธ์ˆ˜ํ•˜๋ฉด์„œ MySQL์ด ์œ ๋ฃŒํ™” ์—ฌ๋ถ€๊ฐ€ ์Ÿ์ ์ด ๋˜์—ˆ๋‹ค.
  • 2010๋…„ MySQL์˜ ์ฒ˜์Œ ๊ฐœ๋ฐœ์ž์˜€๋˜ Monty๊ฐ€ MySQL๊ณผ ํ˜ธํ™˜์ด ๋˜๋Š” MariaDB๋ผ๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ฐœ๋ฐœ

MySQL ์ข…๋ฅ˜์™€ ๋ฒ„์ „

  • MariaDB
    • ์˜คํ”ˆ์†Œ์Šค๋กœ ๋ฌด๋ฃŒ
    • MySQL 5.5์— ๊ธฐ๋ฐ˜ํ•ด์„œ ๊ฐœ๋ฐœ๋จ
    • MySQL๊ณผ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋™์ผํ•˜๋‚˜ ์„ฑ๋Šฅ์€ ๋” ์ข‹๋‹ค.
  • MySQL
    • ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌ
    • MySQL Community Server : ์˜คํ”ˆ์†Œ์Šค ๋ฌด๋ฃŒ
    • Enterprise Server : ์œ ๋ฃŒ ๋ฒ„์ „์œผ๋กœ ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ๊ณต
    • ์ตœ์‹  ๋ฒ„์ „์€ 8.0

MySQL ํŠน์ง• 1

  • ํ•œ๋™์•ˆ ์›น ๊ฐœ๋ฐœ ํ‘œ์ค€ ๊ธฐ์ˆ  ์Šคํƒ ์ค‘์˜ ํ•˜๋‚˜์˜€๋‹ค.
    • LAMP : Linux, Apache, MySQL, PHP
  • ์ง€๊ธˆ๋„ Postgres์™€ ํ•จ๊ป˜ ๋„๋ฆฌ ์“ฐ์ด๋Š” ํ”„๋กœ๋•์…˜์šฉ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹ค.
  • ์šฉ๋Ÿ‰ ์ฆ๋Œ€ (Scaling) ๋ฐฉ์‹ 1
    • Scale-Up : ์„œ๋ฒ„์— CPU์™€ Memory ์ถ”๊ฐ€

MySQL ํŠน์ง• 2

  • ์šฉ๋Ÿ‰ ์ฆ๋Œ€ ๋ฐฉ์‹ 2
    • Scale-OUT : Master-Slave ๊ตฌ์„ฑ(์ฝ๊ธฐ์— ์šฉ๋Ÿ‰๋งŒ ์ฆ๋Œ€์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ)
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์„ ์ด์•ผ๊ธฐํ•˜๋‚˜ MySQL์€ ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ๋ชปํ•จ

ํด๋ผ์šฐ๋“œ / AWS ์†Œ๊ฐœ

ํด๋ผ์šฐ๋“œ ์ •์˜

  • ์ปดํ“จํŒ… ์ž์›(ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด ๋“ฑ๋“ฑ)์„ ๋„คํŠธ์›์„ ํ†ตํ•ด ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณต
  • ํ‚ค์›Œ๋“œ
    • No Provisioning
    • Pay As You Go
  • ์ž์›์„ ํ•„์š”ํ•œ ๋งŒํผ (๊ฑฐ์˜) ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•œ ๋งŒํผ ์ง€๋ถˆ
    • ํƒ„๋ ฅ์ ์œผ๋กœ ํ•„์š”ํ•œ๋งŒํผ์˜ ์ž์›์„ ์œ ์ง€ํ•˜๋Š”๊ฒƒ์ด ์ค‘์š”

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

  • ์„œ๋ฒ„/๋„คํŠธ์›/์Šคํ† ๋ฆฌ์ง€ ๊ตฌ๋งค์™€ ์„ค์ •๋“ค์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ด์•ผํ•จ
  • ๋ฐ์ดํ„ฐ์„ผํ„ฐ ๊ณต๊ฐ„์„ ์ง์ ‘ ํ™•๋ณด(Co-location)
    • ํ™•์žฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ณต๊ฐ„์„ ๋จผ์ € ๋” ํ™•๋ณดํ•ด์•ผํ•จ
  • ๊ทธ ๊ณต๊ฐ„์— ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์—ฌ ์„ค์น˜ํ•˜๊ณ  ๋„คํŠธ์› ์„ค์ •
    • ๋ณดํ†ต ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•ด์„œ ์„ค์น˜ํ•˜๋Š”๋ฐ ๋‘์„ธ๋‹ฌ์€ ๊ฑธ๋ฆฐ๋‹ค.
  • ๋˜ํ•œ Peak time์„ ๊ธฐ์ค€์œผ๋กœ Capacity planning์„ ํ•ด์•ผํ•จ
    • ๋†€๊ณ  ์žˆ๋Š” ์ž์›๋“ค์ด ๋†’๊ฒŒ ๋˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ
  • ์ง์ ‘ ์šด์šฉ๋น„์šฉ vs ํด๋ผ์šฐ๋“œ ๋น„์šฉ
    • ๊ธฐํšŒ๋น„์šฉ!

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

  • ์ดˆ๊ธฐ ํˆฌ์ž ๋น„์šฉ์ด ํฌ๊ฒŒ ์ค„์–ด๋“ ๋‹ค
    • CAPEX (Capital Expenditure) vs OPEX (Operating Expense)
  • ๋ฆฌ์†Œ์Šค ์ค€๋น„๋ฅผ ์œ„ํ•œ ๋Œ€๊ธฐ์‹œ๊ฐ„ ๋Œ€ํญ ๊ฐ์†Œ
    • Shorter Time to Market
  • ๋…ธ๋Š” ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ๋กœ ๋น„์šฉ ๊ฐ์†Œ
  • ๊ธ€๋กœ๋ฒŒ ํ™•์žฅ ์šฉ์ด
  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ๋‹จ์ถ•
    • Managed Service (Saas)์ด

AWS ์†Œ๊ฐœ

  • ๊ฐ€์žฅ ํฐ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์„œ๋น„์Šค ์—…์ฒด
  • 2002๋…„ ์•„๋งˆ์กด ์ƒํ’ˆ๋ฐ์ดํ„ฐ๋ฅผ API๋กœ ์ œ๊ณตํ•˜๋ฉด์„œ ์‹œ์ž‘
    • ํ˜„์žฌ 100์—ฌ๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ์ „์„ธ๊ณ„ 15๊ฐœ ์ง€์—ญ์—์„œ ์ œ๊ณต
    • ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค๋“ค์ด ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•จ
    • ์ตœ๊ทผ ๋“ค์–ด ML/AI ๊ด€๋ จ ์„œ๋น„์Šค๋“ค๋„ ๋‚ด๋†“๊ธฐ ์‹œ์ž‘
  • ์‚ฌ์šฉ๊ณ ๊ฐ
    • ๋‹ค์ˆ˜์˜ ์ƒ์žฅ์—…์ฒด๋“ค๊ณผ ๋งŽ์€ ๊ตญ๋‚ด ์—…์ฒด๋“ค๋„ ์‚ฌ์šฉ ์‹œ์ž‘(์„œ์šธ๋ฆฌ์ „)
  • ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด/ํ”Œ๋žซํผ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต.
    • AWS์˜ ์„œ๋น„์Šค๋งŒ์œผ๋กœ ์‰ฝ๊ฒŒ ์˜จ๋ผ์ธ์„œ๋น„์Šค ์ƒ์„ฑ

EC2 - Elastic Cloud Compute (1)

  • AWS์˜ ์„œ๋ฒ„ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค
    • ๋ฆฌ๋ˆ…์Šค ํ˜น์€ ์œˆ๋„์šฐ ์„œ๋ฒ„๋ฅผ ๋ก ์น˜ํ•˜๊ณ  ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ
    • ๊ฐ€์ƒ ์„œ๋ฒ„๋“ค์ด๋ผ ์ „์šฉ ์„œ๋ฒ„์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
    • Bare-metal ์„œ๋ฒ„๋„ ์ œ๊ณตํ•˜๊ธฐ ์‹œ์ž‘
  • ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์„œ๋ฒ„ ํƒ€์ž… ์ œ๊ณต
  • ์„ธ ์ข…๋ฅ˜์˜ ๊ตฌ๋งค ์˜ต์…˜
    • On-Demand : ์‹œ๊ฐ„๋‹น ๋น„์šฉ์„ ์ง€๋ฌผํ•˜๋ฉฐ ๊ฐ€์žฅ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜
    • reserved : 1๋…„์ด๋‚˜ 3๋…„๊ฐ„ ์‚ฌ์šฉ์„ ๋ณด์žฅํ•˜๊ณ  1/3 ์ •๋„์—์„œ 40% ํ• ์ธ์„ ๋ฐ›๋Š” ์˜ต์…˜
    • Spot Instance : ์ผ์ข…์˜ ๊ฒฝ๋งค๋ฐฉ์‹์œผ๋กœ ๋†€๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ๋ณด๋‹ค ์‹ผ ๋น„์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜

S3 - Simple Starage Service(1)

  • ์•„๋งˆ์กด์ด ์ œํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค
  • S3๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ์ œ๊ณต
  • ๊ธ€๋กœ๋ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ฑ๋ ˆ๋ฒจ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„ ์„ ์ •์— ์ฃผ์˜
  • S3๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฒ„ํ‚ท์ด๋ผ๊ณ  ๋ถ€๋ฆ„
  • ๋ฒ„ํ‚ท์ด๋‚˜ ํŒŒ์ผ๋ณ„๋กœ ์—‘์„ธ์Šค ์ปจํŠธ๋กค๊ฐ€๋Šฅ
  • Low cost. 1TB per month

DataBase Service

  • RDS
    • MySQL/MariaDB, PostgreSQL, Aurora
    • Oracle, Ms SQL Server
  • DynamoDB
  • REDshift
  • ElastiCache
  • Neputune
  • ElasticSearch
  • MongoDB

AI & ML Service

  • SageMaker
  • Lex
  • Polly
  • Rekognition

๊ธฐํƒ€ ์ค‘์š” ์„œ๋น„์Šค

  • Alexa
  • Connect
  • Lambda

MySQL ์„ค์น˜ - Docker

Docker๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • MySQL์„ ๋‹ค๋ฅธ OS์—์„œ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์–‘ํ•œ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • ์ฆ‰ ์„ค์น˜ ๊ณผ์ •์ด OS์™€ OS๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.
    • ๋‹ค์–‘ํ•œ ๋‹ค์ˆ˜์˜ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์˜ ์„ค์น˜๊ฐ€ ๋™๋ฐ˜๋˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
  • Docker๋Š” ํŠน์ • ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•„์š”ํ•œ ๊ธฐํƒ€ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์„ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋กœ ๋งŒ๋“ฌ์œผ๋กœ์จ ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ๋ฐœ๊ณผ ์‚ฌ์šฉ์„ ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ
    • ์ด ํŒจํ‚ค์ง€๋ฅผ ๋จผ์ € ํŒŒ์ผ ์‹œ์Šคํ…œ ํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š”๋ฐ ์ด๋ฅผ Docker Image๋ผ๊ณ  ํ•œ๋‹ค.
      • ์ด Image๋Š” ๋‹ค๋ฅธ ์ด๋“ค๊ณผ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
      • Docker Image ๊ณต์œ ์†Œ๋ฅผ Docker Registry(Docker Hub)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • Docker Image๋ฅผ ์‹คํ–‰์‹œํ‚จ ๊ฒƒ์„ Docker Container๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์— ํ•ด๋‹นํ•œ๋‹ค.

MySQL DDL๊ณผ ์˜ˆ์ œ ํ…Œ์ด๋ธ” ์†Œ๊ฐœ

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ˆ์ œ - ์›น์„œ๋น„์Šค ์‚ฌ์šฉ์ž/์„ธ์…˜ ์ •๋ณด

  • ์‚ฌ์šฉ์ž ID : ๋ณดํ†ต ์›น์„œ๋น„์Šค์—์„œ๋Š” ๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž๋งˆ์ž ๋ถ€์—ฌํ•˜๋Š” ์œ ์ผํ•œ ID
  • ์„ธ์…˜ ID : ์„ธ์…˜๋งˆ๋‹ค ๋ถ€์—ฌ๋˜๋Š” ID
    • ์„ธ์…˜ : ์‚ฌ์šฉ์ž์˜ ๋ฐฉ๋ฌธ์„ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆˆ ๊ฒƒ
      • ์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€ ๋งํฌ๋ฅผ ํƒ€๊ณ  ์˜ค๊ฑฐ๋‚˜ ์ง์ ‘ ๋ฐฉ๋ฌธํ•ด์„œ ์˜ฌ ๊ฒฝ์šฐ ์„ธ์…˜์„ ์ƒ์„ฑ
      • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฉ๋ฌธ ํ›„ 30๋ถ„๊ฐ„ interaction์ด ์—†๋‹ค๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ ์„ธ์…˜์„ ์ƒ์„ฑ
    • ์ฆ‰ ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„ธ์…˜์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
    • ๋ณดํ†ต ์„ธ์…˜์˜ ๊ฒฝ์šฐ ์„ธ์…˜์„ ๋งŒ๋“ค์–ด๋‚ธ ์ ‘์ ์„ ์ฑ„๋„์ด๋ž€ ์ด๋ฆ„์œผ๋กœ ๊ธฐ๋กํ•ด๋‘ 
      • ๋งˆ์ผ€ํŒ… ๊ด€๋ จ ๊ธฐ์—ฌ๋„ ๋ถ„์„์„ ์œ„ํ•จ
    • ๋˜ํ•œ ์„ธ์…˜์ด ์ƒ๊ธด ์‹œ๊ฐ„๋„ ๊ธฐ๋ก

์ •๋ณด(2)

  • ์ด ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ์ง€ํ‘œ ์„ค์ •์ด ๊ฐ€๋Šฅ
    • ๋งˆ์ผ€ํŒ… ๊ด€๋ จ, ์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ ๊ด€๋ จ
    • DAU, WAU, MAU ๋“ฑ์˜ ์ผ์ฃผ์›”๋ณ„ Active User ์ฐจํŠธ
    • Marketing Channel Attribution ๋ถ„์„
      • ์–ด๋А ์ฑ„๋„์— ๊ด‘๊ณ ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ๊ฐ€?

ํ…Œ์ด๋ธ” ํ•„๋“œ์˜ ์ค‘์š” ์†์„ฑ (1)

PRIMARY KEY

  • ํ…Œ์ด๋ธ”์—์„œ ๋ ˆ์ฝ”๋“œ์˜ ์œ ์ผ์„ฑ์„ ์ •์˜ํ•˜๋Š” ํ•„๋“œ : ๊ทธ๊ฒƒ์ด primary key๊ฐ€ ๋˜์–ด์•ผํ•จ
    • ์˜ˆ๋ฅผ๋“ค๋ฉด ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์—์„œ ์ด๋ฉ”์ผ ํ˜น์€ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ
  • Composite primary key : primary key๊ฐ€ ๋‘๊ฐœ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ํ•„๋“œ๋กœ ์ •์˜๋œ ๊ฒฝ์šฐ
  • Primary key๋กœ ์ง€์ •๋œ ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹จ์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ

Foreign key

  • ํ…Œ์ด๋ธ”์˜ ํŠน์ • ํ•„๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ์—์„œ ์˜ค๋Š” ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ

ํ…Œ์ด๋ธ” ํ•„๋“œ์˜ ์ค‘์š” ์†์„ฑ (2)

  • NOT NULL
    • ํ•„๋“œ์˜ ๊ฐ’์ด ํ•ญ์ƒ ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • DEFAULT VALUE
    • ํ•„๋“œ์— ๊ฐ’์ด ์ฃผ์–ด์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ์ •์˜ํ•ด์คŒ
    • timestamp : CURRENT_TIMESTAMP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •๋จ