๐Ÿ‘จ‍๐Ÿ’ป Back End/MySQL

1) MySQL ์•„ํ‚คํ…์ฒ˜ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ MySQL ์„œ๋ฒ„๋Š” ํฌ๊ฒŒ MySQL ์—”์ง„๊ณผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. (1) MySQL ์—”์ง„ MySQL ์—”์ง„์€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ๋œ SQL ๋ฌธ์žฅ์„ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์ตœ์ ํ™”ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋ฉฐ MySQL ์—”์ง„์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ์š”์†Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. โ‘  Connection Handler ์ปค๋„ฅ์…˜ ๋ฐ ์ฟผ๋ฆฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ๋‹ด๋‹น โ‘ก SQL ์ธํ„ฐํŽ˜์ด์Šค DML, DDL, Procedure, View ๋“ฑ SQL ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต ๋‹ด๋‹น โ‘ข SQL ํŒŒ์„œ (Parser) SQL ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ํƒ์ง€ ๋ฐ SQL ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ MySQL์ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ข‹์€ ํ† ํฐ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์„œ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ํŒŒ์‹ฑ ํ•˜๋Š” ์ž‘์—… ๋‹ด๋‹น โ‘ฃ SQL ์˜ตํ‹ฐ๋งˆ์ด์ € (Optimizer) ์ฟผ๋ฆฌ์˜ ์ตœ์ ํ™”๋œ ์‹คํ–‰ ๋‹ด๋‹น โ‘ค ์บ์‹œ์™€ ๋ฒ„ํผ ์„ฑ..
1) DB Lock ์‹ฌํ™” (1) ๊ฐœ์š” RDBMS ์ค‘ ํ•˜๋‚˜์ธ MySQL์€ MariaDB์™€ ๊ฐ™์ด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ InnoDB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด InnoDB ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์žˆ์–ด ํ•ต์‹ฌ์ ์ธ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋ธ (Transaction Model), ๊ฒฉ๋ฆฌ์„ฑ ์ˆ˜์ค€ (Isolation Level), DB Lock์€ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ธ InnoDB์— ์ข…์†๋˜๊ธฐ ๋•Œ๋ฌธ์— MySQL๊ณผ MariaDB๋Š” InnoDB์˜ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋ธ, ๊ฒฉ๋ฆฌ์„ฑ ์ˆ˜์ค€, DB Lock ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ, ์—ฌ๊ธฐ์„œ ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋ณด์ž๋ฉด MySQL์—์„œ ์‚ฌ์šฉํ•˜๋Š” DB Lock์€ ํฌ๊ฒŒ MySQL ์—”์ง„์—์„œ ์ œ๊ณตํ•˜๋Š” DB Lock์ด ์žˆ๊ณ , ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ์ œ๊ณตํ•˜๋Š” DB Lock์ด ์žˆ๋‹ค. MySQL ์—”์ง„์—์„œ ์ œ๊ณตํ•˜๋Š” DB Lock๊ณผ In..
1) DB Lock ๊ธฐ์ดˆ (1) Lock์ด๋ž€ Lock์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋™์‹œ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž(ํŠธ๋žœ์žญ์…˜)๋“ค์ด ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” Lock์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž(ํŠธ๋žœ์žญ์…˜)์™€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž(ํŠธ๋žœ์žญ์…˜)๋“ค ๊ฐ„์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ DBMS๋งˆ๋‹ค Lock์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์„ธ๋ถ€์ ์ธ ๋ฐฉ๋ฒ•์€ ๊ฐ๊ฐ ๋‹ค๋ฅด๋ฏ€๋กœ DBMS๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•ด๋‹น DB์˜ Document ๋ฌธ์„œ๋ฅผ ์ •๋…ํ•˜๋„๋ก ํ•˜์ž! (2) Lock์˜ ์„ค์ • ๋ฒ”์œ„ (2-1) ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ”์œ„์˜ Lock์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ Lock ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ฆ‰ 1๊ฐœ์˜ ์„ธ์…˜๋งŒ์ด DB์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ์ด ๊ฐ€..
1) ํŠธ๋žœ์žญ์…˜ (1) ํŠธ๋žœ์žญ์…˜์ด๋ž€ DB ์—์„œ์˜ ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋ฅผ ๋งํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ผ๋ จ์˜ ์ž‘์—…๋“ค์„ ํฌํ•จํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ ์ž‘์—…๋“ค์€ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์‹คํŒจํ•ด์•ผ ํ•œ๋‹ค. → All or Nothing ์ „๋žต (2) ํŠธ๋žœ์žญ์…˜์˜ 4๊ฐ€์ง€ ํŠน์„ฑ (ACID) DB์—์„œ์˜ ํŠธ๋žœ์žญ์…˜์€ ์•„๋ž˜์˜ 4๊ฐ€์ง€ ํŠน์„ฑ์„ ์ง€๋‹Œ๋‹ค. (2-1) Atomicity (์›์ž์„ฑ) ํŠธ๋žœ์žญ์…˜์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์‹คํ–‰ ๋‹จ์œ„์—ฌ์•ผ ํ•˜๊ณ  ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Statement๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค ํ•˜๋”๋ผ๋„ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์‹คํ–‰ ๋‹จ์œ„๋ผ๋ฉด ๋‘ ๊ฐœ์˜ ์ƒํƒœ๋กœ ๊ท€๊ฒฐ๋˜๋Š”๋ฐ, ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์‹คํŒจํ•˜๊ฑฐ๋‚˜์ด๋‹ค. (All or Nothing) ์ฆ‰, ์—ฌ๋Ÿฌ ๊ฐœ์˜ Statement๋กœ ์ž‘์„ฑ๋˜์—ˆ..
1) ํŠธ๋žœ์žญ์…˜ (Transaction) (1) ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์˜ ๋‹จ์œ„ ๋˜๋Š” ํ•œ๊บผ๋ฒˆ์— ์ˆ˜ํ–‰๋˜์–ด์•ผํ•  ์ผ๋ จ์˜ ์—ฐ์‚ฐ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, MySQL์—์„œ ๋ฐ์ดํ„ฐ ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋Š” INSERT, DELETE, UPDATE ๋“ฑ์˜ SQL ๋ช…๋ น์–ด๋“ค์€ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ๊ณ ์ž ํ•œ๋‹ค๋ฉด “START TRANSACTION”์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค. (2) ํŠธ๋žœ์žญ์…˜์˜ ํŠน์„ฑ ์›์ž์„ฑ (Atomicity) ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋‘ ๋ฐ˜์˜๋˜๋˜์ง€, ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์›์ž์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ๋ช…๋ น์€ ๋ฐ˜๋“œ์‹œ ์™„๋ฒฝํžˆ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋‘๊ฐ€ ์™„๋ฒฝํžˆ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๊ณ  ์–ด๋Š ํ•˜๋‚˜๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜..
๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์ด๋ž€ ํ…Œ์ด๋ธ”์— ๋ถ€์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ•  ๋•Œ, ๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ •์˜ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ทœ์น™์„ ๋งํ•œ๋‹ค.๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ ์œ ์ง€) + ์ œ์•ฝ ์กฐ๊ฑด (๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์กฐ๊ฑด) ๐Ÿ‘‰  ์ฆ‰, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •๋“ฑ์˜ ์—ฐ์‚ฐ์„ ํ†ตํ•˜์—ฌ ๋ณ€ํ•˜๋”๋ผ๋„ ์ง€์†์ ์œผ๋กœ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค! ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์—๋Š” ํฌ๊ฒŒ “๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด”, “๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด”, “์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด”์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด์ด๋ž€ ๊ฐ ์†์„ฑ์˜ ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋„๋ฉ”์ธ์— ์ง€์ •๋œ ๊ฐ’๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.๋„ ๊ฐ’์˜ ํ—ˆ์šฉ ์—ฌ๋ถ€ - NOT NULL๐Ÿ‘‰ ..
์กฐ์ธ ์ด๋ž€ (Join) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜จ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ด๋‚˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ Join ์ด๋ผ๊ณ  ํ•œ๋‹ค.์ด๋Ÿฌํ•œ JOIN์€ ๋ณดํ†ต SELECT๋ฌธ๊ณผ ํ•จ๊ป˜ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฉฐ ํ‘œ์ค€ SQL์—์„œ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ JOIN์„ INNER JOIN, LEFT JOIN, RIGHT JOIN ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌJoin์˜ ๊ธฐ๋ณธ ์›๋ฆฌ๋Š” N ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์นดํ…Œ์‹œ์•ˆ ๊ณฑ (Cartesian Product)์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์กฐํ•ฉํ•œ๋‹ค๋Š” ๊ฒƒ์— ์žˆ๋‹ค. ์กฐ์ธ์„ ํ†ตํ•˜์—ฌ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ์กฐ์ธ ์กฐ๊ฑด์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์— PK๋‚˜ FK์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์—ด ๊ฐ’์˜ ํŠน์ •ํ•œ ๊ทœ์น™์„ ํ†ตํ•ด์„œ ๋ช…์‹œํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, N๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๋•Œ์—๋Š” ์ตœ์†Œ (N-..
์„œ๋ธŒ์ฟผ๋ฆฌ (SubQuery)SQL ๋ฌธ์žฅ (SQL Statement) ์•ˆ์—์„œ ๋ณด์กฐ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋˜ ๋‹ค๋ฅธ SELECT๋ฌธ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋ฉ”์ธ ์ฟผ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ด๋ฅผ ์œ„ํ•œ ์ค‘๊ฐ„ ๋‹จ๊ณ„ ํ˜น์€ ๋ณด์กฐ ์—ญํ• ์„ ํ•˜๋Š” SELECT๋ฌธ์„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ SQL๋ฌธ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฉ”์ธ ์ฟผ๋ฆฌ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  SELECT๋ฌธ์„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋ณด๋ฉด ๋˜๋ฉฐ, ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”๋ณด๊ธฐโœ…  [์ฐธ๊ณ ] ํ…Œ์ด๋ธ” ์ฐธ์กฐ์กฐ์ธ (Join)์€ ์กฐ์ธ์— ์ฐธ์—ฌํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์ด ๋Œ€๋“ฑํ•œ ๊ด€๊ณ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์ธ์— ์ฐธ์—ฌํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ์–ด๋Š ์œ„์น˜์—์„œ๋ผ๋„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋ฉ”์ธ์ฟผ๋ฆฌ๊ฐ€ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ์ข…์†์ ์ธ ๊ด€๊ณ„๋กœ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋ฉ”์ธ ์ฟผ๋ฆฌ์˜ ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ..
Dev_sHu
'๐Ÿ‘จ‍๐Ÿ’ป Back End/MySQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก