๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back-end ๋ฐ๋ธŒ์ฝ”์Šค/week 01 - 02 TIL (java, DB)

[TIL] 221025 - MySQL ์‚ฌ์šฉํ•˜๊ธฐ

by young-ji 2022. 10. 25.

์‹ค๋ฆฌ์ฝ˜๋ฐธ๋ฆฌ์—์„œ ๋‚ ์•„์˜จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - 1. MySQL ์†Œ๊ฐœ/์„ค์น˜์™€ ์˜ˆ์ œ ๋ฐ์ดํ„ฐ ์†Œ๊ฐœ

 

1. MySQL ์†Œ๊ฐœ

  • ์˜คํ”ˆ์†Œ์Šค์™€ ์œ ๋ฃŒ๋ฒ„์ „์ด ์กด์žฌ
  • Maria DB : MySQ์ด ์˜ค๋ผํด์— ์ธ์ˆ˜๋˜๋ฉฐ ์œ ๋ฃŒํ™” ์—ฌ๋ถ€๊ฐ€ ์Ÿ์ ์ด ๋œ ํ›„ MySQL ์ดˆ๊ธฐ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•˜๋‚˜์ธ Monty๊ฐ€ MySQL๊ณผ ํ˜ธํ™˜๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ฐœ๋ฐœ. MySQL 5.5 ๊ธฐ๋ฐ˜์—์„œ ๊ฐœ๋ฐœ๋ฌ์œผ๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋™์ผํ•˜๋‚˜ ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค.
  • ํŠน์ง•
    • Postgres์™€ ํ•จ๊ป˜ ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ํ”„๋กœ๋•์…˜์šฉ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • ์„œ๋ฒ„ ํ•œ๋Œ€์งœ๋ฆฌ ์†”๋ฃจ์…˜ → ์—ฌ๋Ÿฌ๋Œ€ ์„œ๋ฒ„์— ๋ถ„์‚ฐ ๋™์ž‘ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์šฉ๋Ÿ‰ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ.
    • ์šฉ๋Ÿ‰ ์ฆ๋Œ€ ๋ฐฉ์‹ :
      1. Scale-UP : ์„œ๋ฒ„์— CPU์™€ Memory ์ถ”๊ฐ€. ์„œ๋ฒ„์˜ ์‚ฌ์–‘์„ ๋†’์ธ๋‹ค → but ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ
      2. Scale-out : Master-Slave ๊ตฌ์„ฑ. ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋Ÿฌ์ŠคํŠธ ๊ตฌ์„ฑ์„ ์ด์•ผ๊ธฐํ•˜๋‚˜ MySQL์€ ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ๋ชปํ•จ.
      3. : MySQL์—์„œ Scale-out์€ Master-Slave ํ˜•ํƒœ๋กœ ํ•˜๋‚˜(Master)๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ˆ˜์— ์„œ๋ฒ„์— ๋ณต์‚ฌํ•จ์œผ๋กœ์„œ ์ฝ๊ธฐ ๋™์ž‘์—์„œ ๋” ํฐ ์šฉ๋Ÿ‰์„ ์ง€์›ํ•œ๋‹ค. → ์ฒ˜๋ฆฌ๋Š” Master๋งŒ ํ•  ์ˆ˜ ์žˆ์Œ

์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹
sql ๋ฐฉ์‹

 

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

ํด๋ผ์šฐ๋“œ : ์ปดํ“จํ„ฐ ์ž์›์„ ๋„คํŠธ์›์„ ํ†ตํ•ด ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณต

→ No Provisioning, Pay As You Go

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

ํด๋ผ์šฐ๋“œ๊ฐ€ ์—†์„ ๋•Œ

→ ๋ฐ์ดํ„ฐ์„ผํ„ฐ ๊ณต๊ฐ„์„ ์ง์ ‘ ํ™•๋ณดํ•ด์•ผํ•œ๋‹ค.

→ Peak time์„ ๊ธฐ๋ถ„์œผ๋กœ Capaxity planning์„ ํ•ด์•ผํ•ด์„œ ๋…ธ๋Š” ์ž์›์ด ๋งŽ์•„ ์ง„๋‹ค.

 

AWS

  • ๊ฐ€์žฅ ํฐ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์„œ๋น„์Šค ์—…์ฒด - ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ์ œ๊ณต,,

  • EC2 (Elastic Cloud Compute) : AWS ์„œ๋ฒ„ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค
    • ๋ฆฌ๋ˆ…์Šค ํ˜น์€ ์œˆ๋„์šฐ ์„œ๋ฒ„๋ฅผ ๋ก ์นญํ•˜๊ณ  ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ 
    • ๊ฐ€์ƒ ์„œ๋ฒ„๋“ค์ด๋ผ ์ „์šฉ์„œ๋ฒ„์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
    • ๊ตฌ๋งค์˜ต์…˜ : On-Demand* / Reserved / Spot Instance
  • S3 (Simple Storage Service) :์•„๋งˆ์กด์—์„œ ์ œ๊ณตํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค
    •  ๋ฐ์ดํ„ฐ ์ €์žฅ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ์ œ๊ณต
  • Database Service
    • RDS(Relational Database Service) : MySQL, PostgreSQL, Oracle ๋“ฑ
  • AI & ML Service
  • Alexa : Voice Bot Platform
  • Connect : Contact Center Solution ์ฝœ์„ผํ„ฐ ๊ตฌํ˜„์ด ์‰ฌ์›Œ์ง
  • Lambda

 

3. MySQL ์„ค์น˜ - Docker

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

 

- Virtualization vs .Containerization 

 

  • Docker๋กœ SQL ์„ค์น˜
    1. ์ปดํ“จํ„ฐ์— Docker Engine ์„ค์น˜
    2. https://docs.docker.com/desktop/
    3. MySQL Docker Image ๋‹ค์šด๋กœ๋“œ
    4. ๋‹ค์šด๋กœ๋“œ๋œ MySQL Docker Container ์‹คํ–‰

 

4. MySQL ์„ค์น˜ - AWS RDS

AWS RDS : AWS๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋‹ค์–‘ํ•œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค

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

โœ… ์›น์„œ๋น„์Šค ์‚ฌ์šฉ์ž/์„ธ์…˜ ์ •๋ณด ๋‹ค๋ฃจ๊ธฐ

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

 

  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง
์ปฌ๋Ÿผ ํƒ€์ž… ์†์„ฑ
id int NOT NULL
AUTO_INCREMENT
PRIMARY KEY
user_id int  NOT NULL
created timestamp NOT NULL
DEFAULT CURRENT_TIME
channel_id int NOT NULL
FOREIGN KEY

session ํ…Œ์ด๋ธ”

์ปฌ๋Ÿผ ํƒ€์ž… ์†์„ฑ
id int NOT NULL
AUTO_INCREMENT
channel vsrchar(32) NOT NULL

channel ํ…Œ์ด๋ธ”

 

  • ํ…Œ์ด๋ธ” ํ•„๋“œ ์†์„ฑ
    • PRIMARY KEY : ํ…Œ์ด๋ธ”์— ๋Ÿฌ์ฝ”๋“œ์˜ ์œ ์ผ์„ฑ์„ ์ •์˜ํ•˜๋Š” ํ•„๋“œ. ์ค‘๋ณต๊ฐ’์„ ๊ฐ–๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ
    • Foreign Key : ํ…Œ์ด๋ธ”์˜ ํŠน์ • ํ•„๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ์—์„œ ์˜ค๋Š” ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ - ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ
    • NOT NULL : ํ•„๋“œ๊ฐ’์ด ํ•ญ์ƒ ์กด์žฌํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ
    • DEFUALT value : ํ•„๋“œ์— ๊ฐ’์ด ์ฃผ์˜ค์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ์ •์˜ํ•ด์คŒ (timestamp ํƒ€์ž… : CURRENT TIMESTAMP)
CREATE TABLE channel(
	id int not null auto_increment,
	chennel varchar(32) not null,
	primary key(id)
);

CREATE TABLE session(
	id int not null auto_increment primary key,
	user_id int not null,
	created timestamp not null default current_timestamp,
	channet_id int not null,
	foreign key(channel_id) references channel(id)
);

 

 

์ถœ์ฒ˜ - ํ•œ๊ธฐ์šฉ ๊ฐ•์‚ฌ๋‹˜ : ์‹ค๋ฆฌ์ฝ˜๋ฐธ๋ฆฌ์—์„œ ๋‚ ์•„์˜จ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค

๋Œ“๊ธ€