๐Ÿ›ข๏ธDatabase

๋‹จ๊ณ„๋ณ„๋กœ ์„ฑ์žฅํ•˜์ž!
์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ์—ฌ๋Ÿฌ DB์— ๋Œ€ํ•ด 2 Phase Commit์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ฒจ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.์„ค๋ช…์„ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ, ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์–˜๊ธฐํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค.๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์€ ๊ธ€๋กœ๋ฒŒ ํŠธ๋žœ์žญ์…˜์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํ†ตํ•ฉ๋˜์–ด ๊ด€๋ฆฌ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜ ๋ฌถ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.์ด๋•Œ, 1๏ธโƒฃ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋˜๋Š” ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ๋™์ผํ•œ DB์— ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๊ณ , 2๏ธโƒฃ ์„œ๋กœ ๋‹ค๋ฅธ DB์— ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.XA Datasource์™€ 2 Phase Commit ์ด๋ž€?XA๋Š” 2 Phase Commit์„ ํ†ตํ•œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด X/Open์—์„œ ์ •์˜ํ•œ ํ‘œ์ค€์ด๋‹ค.๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ๊ฐ์˜ DB์—๋Š” ํ•˜๋‚˜์˜ XA Datasource๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด XA Datasource๊ฐ€ XA C..
MySQL์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation Level)์ด๋ž€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋  ๋•Œ ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. Read UNCOMMITTED Read COMMITTED REPEATABLE READ SERIALIZABLE 1๋ฒˆ๋ถ€ํ„ฐ 4๋ฒˆ๊นŒ์ง€ ๋’ค๋กœ ๊ฐˆ์ˆ˜๋ก ๊ฐ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ฒฉ๋ฆฌ(๊ณ ๋ฆฝ) ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ๋„ ์ผ๋ฐ˜์ ์œผ๋กœ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์•„์งˆ์ˆ˜๋ก MySQL ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋งŽ์ด ๋–จ์–ด์งˆ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค SERIALIZABLE ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ๋ฉด ํฌ๊ฒŒ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š์œผ๋‹ˆ ์•ˆ์‹ฌํ•ด๋„ ๋œ๋‹ค. ํ•˜๋‚˜ ํŠน๋ณ„ํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค..
JOIN์ด ์–ด๋–ป๊ฒŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ ํŒจํ„ด๋ณ„๋กœ ์•Œ์•„๋ณด๊ณ  ์ฃผ์˜์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. JOIN์˜ ์ˆœ์„œ์™€ ์ธ๋ฑ์Šค ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์€ ์ธ๋ฑ์Šค๋ฅผ ํƒ์ƒ‰(Seek)ํ•˜๋Š” ๋‹จ๊ณ„์™€ ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”(Scan)ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ฟผ๋ฆฌํ•˜๋Š” ์ž‘์—…์—์„œ๋Š” ๊ฐ€์ ธ์˜ค๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด์ˆ˜๊ฐ€ ์†Œ๋Ÿ‰์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ์Šค์บ” ์ž‘์—…์€ ๋ถ€ํ•˜๊ฐ€ ์ž‘์ง€๋งŒ ํŠน์ • ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ์ฐพ๋Š” ์ธ๋ฑ์Šค ํƒ์ƒ‰ ์ž‘์—…์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ถ€ํ•˜๊ฐ€ ๋†’๋‹ค. ์กฐ์ธ ์ž‘์—…์—์„œ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์„ ์ฝ์„ ๋•Œ๋Š” ์ธ๋ฑ์Šค ํƒ์ƒ‰ ์ž‘์—…์„ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ทธ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์Šค์บ”๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์—์„œ๋Š” ์ธ๋ฑ์Šค ํƒ์ƒ‰ ์ž‘์—…๊ณผ ์Šค์บ” ์ž‘์—…์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์—์„œ ์ฝ์€ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๊ณผ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์ด 1:1..
1. Redis Temporary Location For Speed ๋ฐ์ดํ„ฐ์˜ ์›๋ž˜ ์†Œ์Šค๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์บ์‹œ๋ฅผ ์ด์šฉํ•œ๋‹ค. ๋‹น์—ฐํžˆ ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด ์›๋ณธ์— ์ ‘๊ทผํ•˜๋Š”๊ฒƒ๋ณด๋‹ค ์บ์‹œ์— ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ๋นจ๋ผ์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ์˜ ๋ฐ˜๋ณต์  ์•ก์„ธ์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์œ ๋ฆฌํ•˜๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. ๋‹จ์ˆœํ•œ key-value ๊ตฌ์กฐ In-memory ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ (RAM) ๋น ๋ฅธ ์„ฑ๋Šฅ ํ‰๊ท  ์ž‘์—…์†๋„ < 1ms ์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ์ž‘์—… ๊ฐ€๋Šฅ ์ด์™ธ์—๋„ ์ตœ์‹  ๋ฒ„์ „์˜ Redis๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ PUB/SUB ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ ๊ณต๊ฐ„์— ์ œ์•ฝ..
์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋น„์Šค์™€ ๊ฐ™์ด ์ผ๋ฐ˜์ ์ธ ์˜จ๋ผ์ธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ํ™˜๊ฒฝ์˜ DB์—์„œ๋Š” INSERT๋‚˜ UPDATE ์ž‘์—…์˜ ๊ฒฝ์šฐ ๊ฑฐ์˜ ๋ ˆ์ฝ”๋“œ ๋‹จ์œ„๋กœ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ, SELECT์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•ด์„œ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, SELECT ์ฟผ๋ฆฌ์˜ ๊ฐ ๋ถ€๋ถ„์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์„ฑ๋Šฅ ์œ„์ฃผ๋กœ ์‚ดํŽด๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. SELECT ์ ˆ์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•œ SELECT ๋ฌธ์ด ์กด์žฌํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์–ด๋– ํ•œ ์ ˆ์ด ๋จผ์ € ์‹คํ–‰๋˜๋Š”์ง€ ์˜ˆ์ธกํ•ด์•ผ ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. SELECT, FROM, WHERE. GROUP BY, HAVING, ORDER BY, LIMIT SELECT s.emp_no, COUNT(D..
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋˜๋Š” ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด DB์™€ ํ†ต์‹ ํ•  ๋•Œ DB ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์€ SQL ๋ฟ์ด๋‹ค. SQL์€ ์–ด๋– ํ•œ(What) ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด์ด์ง€, ์–ด๋–ป๊ฒŒ(How) ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„์ง€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์–ธ์–ด๋Š” ์•„๋‹ˆ๋ฏ€๋กœ ์ž๋ฐ”์™€ ๊ฐ™์€ ์–ธ์–ด์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ œํ•œ์ ์œผ๋กœ ๋Š๊ปด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฟผ๋ฆฌ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋˜๊ฒŒ ํ•˜๋ ค๋ฉด DB ์„œ๋ฒ„์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ• ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํŠœ๋‹ํ•ด์„œ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์ง€๋งŒ, DBMS์—์„œ๋Š” ๋ช‡์‹ญ ๋ช‡๋ฐฑ ๋ฐฐ์˜ ์„ฑ๋Šฅ ํŠœ๋‹์€ ํ”ํ•œ ์ผ์ด๋‹ค. ๋”ฐ๋ผ์„œ SQL ์ž‘์„ฑ ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ทœ์น™์€ ๋ฌผ๋ก , ๋‚ด๋ถ€์ ์ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹(์˜ตํ‹ฐ๋งˆ์ด์ €)์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด์•ผ ํ•œ๋‹ค. 1. MySQL ์—ฐ์‚ฐ์ž (1) ๋‚ ์งœ ๋‹ค๋ฅธ DBMS์—์„œ ๋‚ ์งœ ํƒ€์ž…์„ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ INSERTํ•˜๋ ค..
DevPoong
'๐Ÿ›ข๏ธDatabase' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก