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๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ์๊ฐ์ผ๋ก ์ค์ ๋จ