๐Ÿ“š STUDY

20240320 CS ์Šคํ„ฐ๋”” - DB (2)

ming412 2024. 3. 18. 21:49

 

์ธ๋ฑ์Šค๋ž€?

์ธ๋ฑ์Šค๋ž€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผœ์ฃผ๋Š” ํ•˜๋‚˜์˜ ์žฅ์น˜์ด๋‹ค.

ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ์™€ ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค.

 

+) ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, Disk์—์„œ ๋ฐœ์ƒํ•˜๋Š” I/O ์‹œ๊ฐ„์€ Main Memory์—์„œ ๋ฐœ์ƒํ•˜๋Š” I/O์— ๋น„ํ•ด ๋งค์šฐ ํฌ๋‹ค. ๋”ฐ๋ผ์„œ DB๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰์‹œ Disk I/O๊ฐ€ ๋นˆ๋ฒˆํžˆ ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Index๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Index๋ฅผ ํ†ตํ•ด Disk I/O ํšŸ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ DB ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ Index๋Š” DB์—์„œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ random access๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ ํ•ฉํ•˜๋‹ค.

 

+) ์ธ๋ฑ์Šค์˜ ๋ฐฉ์‹ - ordered & hash

 

์ธ๋ฑ์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ

1) ํ•ด์‹œํ…Œ์ด๋ธ” (Hash Table)

ํ•ด์‹œํ…Œ์ด๋ธ”์€ key์™€ value๋ฅผ ํ•œ ์Œ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํ•ด์‹œ ์ถฉ๋Œ์ด๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ํ‰๊ท ์ ์œผ๋กœ O(1)์˜ ๋งค์šฐ ๋น ๋ฅธ ์‹œ๊ฐ„๋งŒ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•ด์‹œํ…Œ์ด๋ธ”์„ ์ด์šฉํ•œ๋‹ค๋ฉด ์ธ๋ฑ์Šค๋Š” (key, value) = (์ปฌ๋Ÿผ์˜ ๊ฐ’, ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜)๋กœ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, ํ•ด์‹œํ…Œ์ด๋ธ”์„ ์‹ค์ œ๋กœ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ ์ด์œ ๋Š”, ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ๋“ฑํ˜ธ(=) ์—ฐ์‚ฐ์— ์ตœ์ ํ™”๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„  ๋ถ€๋“ฑํ˜ธ(<, >) ์—ฐ์‚ฐ์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ํ•ด์‹œํ…Œ์ด๋ธ” ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋“ค์€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ํŠน์ • ๊ธฐ์ค€๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ๊ฐ’์„ ๋น ๋ฅธ ์‹œ๊ฐ„ ๋‚ด์— ์ฐพ์„ ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

2) B-Tree

ํƒ์ƒ‰ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๊ท ํ˜• ์žˆ๊ฒŒ ๋†’์ด๋ฅผ ์œ ์ง€ํ•˜๋Š” Balaced Tree์˜ ์ผ์ข…์ด๋‹ค.

๋ชจ๋“  leaf node๊ฐ€ ๊ฐ™์€ level๋กœ ์œ ์ง€๋˜๋„๋ก ์ž๋™์œผ๋กœ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ๋งž์ถฐ์ค€๋‹ค. ์ž์‹ node์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉฐ, node ๋‚ด์˜ key๊ฐ€ 1๊ฐœ ์ด์ƒ์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

Balanced tree๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

 

ํŠธ๋ฆฌ๊ฐ€ ํŽธํ–ฅ๋œ ๊ฒฝ์šฐ ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ O(N)์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ํŠธ๋ฆฌ๊ฐ€ ํŽธํ–ฅ๋˜์ง€ ์•Š๊ฒŒ ํ•ญ์ƒ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์œ ์ง€ํ•˜๋Š” Balanced tree๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(logN)์˜ ์‹œ๊ฐ„์ด ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

https://rebro.kr/169

 

[DB] 10. B-Tree (B-ํŠธ๋ฆฌ)

[๋ชฉ์ฐจ] 1. B-Tree๋ž€? 2. B-Tree์˜ key ๊ฒ€์ƒ‰ 3. B-Tree์˜ key ์‚ฝ์ž… 4. B-Tree์˜ key ์‚ญ์ œ ์ฐธ๊ณ ) emplam27.log ๋ธ”๋กœ๊ทธ https://hyungjoon6876.github.io/jlog/2018/07/20/btree.html https://helloinyong.tistory.com/296 1. B-Tree๋ž€? B-Tree๋Š” ํƒ์ƒ‰ ์„ฑ

rebro.kr

 

3) B+Tree

์˜ค์ง leaf node์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , leaf node๊ฐ€ ์•„๋‹Œ node์—๋Š” ์ž์‹์˜ ํฌ์ธํ„ฐ๋งŒ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  leaf node๋ผ๋ฆฌ๋Š” Linked list๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค. 

B+Tree์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ leaf node์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„ node์—์„œ key๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฐพ์•„๊ฐ€๊ธฐ ์œ„ํ•ด์„œ key๊ฐ€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋กœ ์ธํ•œ ์žฅ์ ์ด ๋ฌด์—‡์ผ๊นŒ?

- leaf node๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค.

- Full scan์„ ํ•˜๋Š” ๊ฒฝ์šฐ B+Tree๋Š” leaf node์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๊ณ , leaf node๋ผ๋ฆฌ linked list๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ ํ˜• ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋œ๋‹ค. (B-Tree๋Š” ๋ชจ๋“  node๋ฅผ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.)

 

๋‹จ์ ์€?

B-Tree์˜ ๊ฒฝ์šฐ ์ตœ์ƒ์˜ ๊ฒฝ์šฐ ํŠน์ • key๋ฅผ root node์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, B+Tree์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ํŠน์ • key์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ leaf node๊นŒ์ง€ ๊ฐ€์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

์ธ๋ฑ์Šค์—์„œ B-Tree ๋Œ€์‹  ์ฃผ๋กœ B+Tree๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ?

์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์€ ๋ถ€๋“ฑํ˜ธ(<, >)๋ฅผ ์ด์šฉํ•œ ์ˆœ์ฐจ ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์ด ์ž์ฃผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. B+Tree๋Š” ๋ชจ๋“  leaf node๊ฐ€ Linked list๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๊ฐ€ ๋น ๋ฅด๋‹ค.

 

https://rebro.kr/167

 

[DB] 11. ์ธ๋ฑ์Šค(Index) - (1) ๊ฐœ๋…, ์žฅ๋‹จ์ , B+Tree ๋“ฑ

[๋ชฉ์ฐจ] 1. ์ธ๋ฑ์Šค(Index)๋ž€? 2. ์ธ๋ฑ์Šค(Index)์˜ ์žฅ๋‹จ์  3. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ 4. ์ธ๋ฑ์Šค์˜ ์ž๋ฃŒ ๊ตฌ์กฐ 1. ์ธ๋ฑ์Šค(Index)๋ž€? ์ธ๋ฑ์Šค(Index)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผœ

rebro.kr

 

Primary index vs Secondary index

(1) ๊ธฐ๋ณธ ์ธ๋ฑ์Šค (Primary index)

ใ…‡ใ…‡ใ…‡

 

[ํŠน์ง•]

- ํ…Œ์ด๋ธ” ๋‹น ํ•˜๋‚˜์˜ ๊ธฐ๋ณธ ์ธ๋ฑ์Šค๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

- ๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ๊ธฐ๋ณธ ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. (๊ธฐ๋ณธ์ธ๋ฑ์Šค๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ํ–‰์ด ์ €์žฅ๋˜๋Š” ๋ฌผ๋ฆฌ์  ์œ„์น˜์— ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.)

 

๋งคํ•‘ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ์ฃผ์†Œ ์ž์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ์— Sparse Index๋Š” ํšจ์œจ์ ์ด์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Secondary Index๊ฐ€ ์ƒ๊ฒผ๋‹ค.

 

(2) ๋ณด์กฐ ์ธ๋ฑ์Šค (Secondary index)

๋งคํ•‘ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด 

 

[ํŠน์ง•]

- ํ…Œ์ด๋ธ” ๋‹น ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

- ๋ฐ์ดํ„ฐ๋ธ”๋ก์€ ๋ณด์กฐ ์ธ๋ฑ์Šค ํ‚ค์— ๋Œ€ํ•˜์—ฌ ์ •๋ ฌ๋œ ํ–‰์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค. (๋ณด์กฐ์ธ๋ฑ์Šค๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ํ–‰์ด ์ €์žฅ๋˜๋Š” ๋ฌผ๋ฆฌ์  ์œ„์น˜์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š”๋‹ค.)

 

https://velog.io/@hyoeunla/Database-Primary-Index-vs-Secondary-Index

 

Database - Primary Index vs Secondary Index

๊ธฐ๋ณธํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฑ์Šค๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.ํ‚ค๋Š” ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•˜๋ฉฐ, ๋ ˆ์ฝ”๋“œ ๊ฐ„ 1:1 ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.๊ธฐ๋ณธ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

velog.io

 

Clustered index vs Non-Clustered index

 

https://charming-kyu.tistory.com/51

 

Clustered Index vs Non-Clustered Index

๋ช‡์ผ์ „์— Clustered Index์™€ Non-Clustered Index์— ๋Œ€ํ•ด ์ €์—๊ฒŒ ๋ฌผ์–ด๋ณด์‹  ๋ถ„์ด ๊ณ„์…จ์Šต๋‹ˆ๋‹ค. ์ œ ๊ธฐ์–ต ์†์—๋Š” Clustered Index๋Š” Primary Index์™€ ๋น„์Šทํ•œ ์–ด๊ตฌ์ธ๊ฐ€? ๋ผ๋Š” ์ƒ๊ฐ๊ณผ ํ…Œ์ด๋ธ” ๋‹น 1๊ฐœ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋œป์ด

charming-kyu.tistory.com

 

Composite index (๋ณตํ•ฉ์ธ๋ฑ์Šค)

์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐํšŒ๋ฅผ ํ•  ๋•Œ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ํ•ฉ์ณ์„œ ๋งŒ๋“ ๋‹ค.

๋ณตํ•ฉ ์ธ๋ฑ์Šค์˜ ์ƒ์„ฑ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

๊ฐ™์Œ, ์ •๋ ฌ, ๋‹ค์ค‘๊ฐ’, ์นด๋””๋„๋ฆฌํ‹ฐ ์ˆœ์œผ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. (์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์—์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑธ๋Ÿฌ๋‚ด์„œ ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.)

 

1) ์–ด๋– ํ•œ ๊ฐ’๊ณผ ๊ฐ™์Œ์„ ๋น„๊ตํ•˜๋Š” `==`์ด๋‚˜ `equal`์ด๋ผ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ œ์ผ ๋จผ์ € ์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•œ๋‹ค.

2) ์ •๋ ฌ์— ์“ฐ๋Š” ํ•„๋“œ๋ผ๋ฉด ๊ทธ ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•œ๋‹ค.

3) ๋‹ค์ค‘๊ฐ’์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ํ•„๋“œ, ์ฆ‰ ์ฟผ๋ฆฌ ์ž์ฒด๊ฐ€ `>`์ด๊ฑฐ๋‚˜ `<` ๋“ฑ ๋งŽ์€ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ์ฟผ๋ฆฌ์— ์“ฐ๋Š” ํ•„๋“œ๋ผ๋ฉด ๋‚˜์ค‘์— ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•œ๋‹ค.

4) ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ์ •๋„๋ฅผ ์นด๋””๋„๋ฆฌํ‹ฐ๋ผ๊ณ  ํ•œ๋‹ค. ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์ˆœ์„œ(์œ ๋‹ˆํฌํ•œ ์ˆœ์„œ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

ex. age์™€ email์ด ์žˆ๋‹ค๋ฉด, ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ email ํ•„๋“œ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•œ๋‹ค.

 

+) ์นด๋””๋„๋ฆฌํ‹ฐ - ๊ณ ์œ ํ•œ ๊ฐ’์˜ ์ˆ˜

์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€๊ฑด ์ค‘๋ณต์ด ์ ์€๊ฒƒ

 

index์˜ ์„ฑ๋Šฅ๊ณผ ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ

1) ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์ธ ์ƒํ™ฉ

- ๊ทœ๋ชจ๊ฐ€ ํฐ ํ…Œ์ด๋ธ”

- ์กฐํšŒ๊ฐ€ ์žฆ์€ ๊ฒฝ์šฐ

- ์‚ฝ์ž…/์‚ญ์ œ ์ž‘์—…์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

 

2) ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ธ ์ƒํ™ฉ

- ์ปฌ๋ ‰์…˜์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ

- ์กฐํšŒํ•  ์ผ์ด ๋งŽ์ด ์—†๋Š” ๊ฒฝ์šฐ

- ์‚ฝ์ž…/์‚ญ์ œ ์ž‘์—…์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ : ์ƒˆ๋กœ์šด data๋ฅผ insert ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” index์™€ data๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ด์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ•ญ์ƒ index๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค.

- ๋ฐ์ดํ„ฐ ์ค‘๋ณต๋„๊ฐ€ ๋†’์€ ๊ฒฝ์šฐ (ex. ์„ฑ๋ณ„ M, F ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ)

 

index์˜ ์žฅ๋‹จ์ 

์žฅ์  : 

- ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋œ๋‹ค.

๋‹จ์  :

- ๋‘ ๋ฒˆ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค. (์ธ๋ฑ์Šค ๋ฆฌ์ŠคํŠธ -> ์ปฌ๋ ‰์…˜)

- ์ปฌ๋ ‰์…˜์ด ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ ์ธ๋ฑ์Šค๋„ ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค.

- ์ถ”๊ฐ€ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

 

ํŠธ๋žœ์žญ์…˜์ด๋ž€?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์€? ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด์„œ SELECT, INSERT, DELETE, UPDATE ๋“ฑ์˜ ์งˆ์˜์–ด(SQL)๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์ฃผ์˜ํ•ด์•ผํ•  ์ ์€, ์ž‘์—…์˜ ๋‹จ์œ„๋Š” ์งˆ์˜์–ด ํ•œ ๋ฌธ์žฅ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

ํŠธ๋žœ์žญ์…˜์€ ์‚ฌ๋žŒ์ด ์„ค๊ณ„ํ•œ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋กœ์„œ, ์—ฌ๋Ÿฌ ์งˆ์˜์–ด๋“ค์ด ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

Lock์ด๋ž€?

ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ์˜ ์ˆœ์ฐจ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

Shared Lock (๊ณต์œ ๋ฝ, s lock) : ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ๋ฝ

- ๊ณต์œ ๋ฝ๋ผ๋ฆฌ๋Š” ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ -> ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์€ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ

- s lock์ด ๊ฑธ๋ ค์žˆ๋Š” row์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด x lock์„ ๊ฑธ ์ˆ˜ ์—†๋‹ค -> ์ฆ‰, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๊ณ  ์žˆ๋Š” row๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค

 

Exclusive Lock (๋ฒ ํƒ€๋ฝ, x lock) : ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ๋ฝ

- ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค

- x lock์ด ๊ฑธ๋ ค์žˆ๋Š” row์—๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด s lock๊ณผ x lock ๋‘˜ ๋‹ค ๊ฑธ ์ˆ˜ ์—†๋‹ค -> ์ฆ‰, ๋ฒ ํƒ€๋ฝ์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜(์ฝ๊ธฐ ํฌํ•จ)์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ

- `SELECT ~ FOR UPDATE` ๊ตฌ๋ฌธ์œผ๋กœ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•˜์—ฌ ํŠน์ • ๋ฐ์ดํ„ฐ(row)์— ๋Œ€ํ•ด x lock์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค. ("๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ•˜๋ ค๊ณ  SELECT ํ•˜๋Š” ์ค‘์ด์•ผ~ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ฐ์ดํ„ฐ์— ์† ๋Œ€์ง€ ๋งˆ!")

 

์š”์•ฝํ•˜์ž๋ฉด, S lock์„ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ๋ผ๋ฆฌ๋Š” ๊ฐ™์€ row์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ˜๋ฉด, X lock์ด ๊ฑธ๋ฆฐ row๋Š” ๋‹ค๋ฅธ ์–ด๋– ํ•œ ์ฟผ๋ฆฌ๋„ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. “Shared”์™€ “exclusive”๋ผ๋Š” ์ด๋ฆ„์˜ ์˜๋ฏธ์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•œ๋‹ค.

 

+) SELECT ~ FOR UPDATE

https://dololak.tistory.com/446

 

[Database] SELECT ~ FOR UPDATE ๋ž€?

SELECT ~ FOR UPDATE๋ž€ SELECT ~ FOR UPDATE ๊ตฌ๋ฌธ์€ "๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ•˜๋ ค๊ณ  SELECT ํ•˜๋Š” ์ค‘์ด์•ผ~ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ฐ์ดํ„ฐ์— ์† ๋Œ€์ง€ ๋งˆ!" ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ๋”ฑ๋”ฑํ•œ ํ‘œํ˜„์œผ๋กœ๋Š” ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•˜์—ฌ ํŠน์ •

dololak.tistory.com

 

+) JPA์—์„œ ๊ณต์œ ๋ฝ๊ณผ ๋ฒ ํƒ€๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•?

https://velog.io/@chullll/JPA-%EC%9E%A0%EA%B8%88%EC%9D%98-%EC%A2%85%EB%A5%98

 

[JPA] ์ž ๊ธˆ์˜ ์ข…๋ฅ˜

๋ถ€๋„๋Ÿฝ์ง€๋งŒ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ž ๊ธˆ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š”๊ฑธ ์•Œ์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.ํ˜„์‹ค์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ ๊ฒฝํ•ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๊ณ  ์ž 

velog.io

 

ํŠธ๋žœ์žญ์…˜์˜ ํŠน์„ฑ

(1) ์›์ž์„ฑ (Atomicity)

ํŠธ๋žœ์žญ์…˜(์ž‘์—…)์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋‘ ๋ฐ˜์˜๋˜๋˜๊ฐ€, ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

(2) ์ผ๊ด€์„ฑ (Consistency)

ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํŠธ๋žœ์žญ์…˜์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„, ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํŠธ๋žœ์žญ์…˜์ด ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ. ์ฒ˜์Œ์— ํŠธ๋žœ์žญ์…˜์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ์กฐํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ง„ํ–‰๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž๋Š” ์ผ๊ด€์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

(3) ๋…๋ฆฝ์„ฑ (Isolation)

๋‘˜ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ, ์–ด๋–ค ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด๋ผ๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ์— ๋ผ์–ด๋“ค ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํŠน์ • ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

 

(4) ์ง€์†์„ฑ (Durability)

ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์„ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ

ํŠธ๋žœ์žญ์…˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, 5๊ฐ€์ง€ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

1) ํ™œ์„ฑํ™” (Active) : ํŠธ๋žœ์žญ์…˜์ด ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์—ฌ ์‹คํ–‰์ค‘์ธ ์ƒํƒœ

2) ์‹คํŒจ (Failed) : ํŠธ๋žœ์žญ์…˜์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹คํ–‰์ด ์ค‘๋‹จ๋œ ์ƒํƒœ

3) ์ฒ ํšŒ (Aborted) : ํŠธ๋žœ์žญ์…˜์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด Rollback ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ์ƒํƒœ

4) ๋ถ€๋ถ„ ์™„๋ฃŒ (Partially commited) : ํŠธ๋žœ์žญ์…˜์˜ ๋งˆ์ง€๋ง‰ ์—ฐ์‚ฐ๊นŒ์ง€ ์‹คํ–‰ํ•˜๊ณ  commit ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์งํ›„์˜ ์ƒํƒœ. ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•„์ง ๋ฐ˜์˜ํ•˜์ง€ ์•Š์€ ์ƒํƒœ

5) ์™„๋ฃŒ (Commited) : ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด commit ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•œ ํ›„์— ์ƒํƒœ. ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•œ ์ƒํƒœ

 

ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

ํŠธ๋žœ์žญ์…˜์„ ์–ป์œผ๋ฉด ๋นจ๋ฆฌ ํ•ด์ œ(commit)ํ•ด์•ผ ํ•œ๋‹ค -> undo ๋กœ๊ทธ๊ฐ€ ๊ณ„์† ์Œ“์—ฌ์„œ MySQL ์„œ๋ฒ„์— ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

๊ฒฉ๋ฆฌ์„ฑ์€ ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์‹œ ์„œ๋กœ ๋ผ์–ด๋“ค์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.

 

๋ณต์ˆ˜์˜ ๋ณ‘๋ ฌ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์„ ๋•Œ,

์ด๋“ค์€ ์„œ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ๋งˆ์น˜ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™๋˜์–ด์•ผ ํ•˜๊ณ  (๊ฒฉ๋ฆฌ์„ฑ)

์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. (๋™์‹œ์„ฑ)

 

๊ทธ๋ƒฅ ์‹ค์ œ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋˜๊ฒ ์ง€๋งŒ ๊ทธ๋Ÿผ ์„ฑ๋Šฅ์ด ๋‚˜์  ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฒฉ๋ฆฌ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

 

1) SERIALIZABLE

- ํŠธ๋žœ์žญ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰์‹œํ‚ค๋Š” ๊ฒƒ (๊ฒฉ๋ฆฌ์„ฑ ๋†’๋‹ค)

- ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๊ฐ™์€ ํ–‰์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค (๋™์‹œ์„ฑ ๋‚ฎ๋‹ค)

- ๋งค์šฐ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ์ผ์–ด๋‚  ํ™•๋ฅ ๋„ ๋งŽ๊ณ  ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.

 

2) REPEATABLE_READ

- ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ •ํ•œ ํ–‰์„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋„๋ก ๋ง‰์•„์ฃผ์ง€๋งŒ, ์ƒˆ๋กœ์šด ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋ง‰์ง€ ์•Š๋Š”๋‹ค.

- ๋”ฐ๋ผ์„œ ์ดํ›„์— ์ถ”๊ฐ€๋œ ํ–‰์ด ๋ฐœ๊ฒฌ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

- MySQL์—์„œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

 

+) ์–ด๋–ป๊ฒŒํ•˜๋‚˜?

๋ฒ„์ „์„ ๋‘๊ณ  ๋‚ด ๋ฒˆํ˜ธ๋ณด๋‹ค ์•ž์„  ๋ฒˆํ˜ธ๋งŒ ์ฝ๋Š”๋‹ค.

 

3) READ_COMMITED

- ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ์ •๋ณด๋Š” ์ฝ์„ ์ˆ˜ ์—†๋‹ค.

- ํ•˜์ง€๋งŒ, ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผํ•œ ํ–‰์„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex. ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ์ˆ˜์ •ํ•œ ํ–‰์„ ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ๊ฐ™์€ ํ–‰์„ ๋‹ค์‹œ ์ฝ์„ ๋•Œ ๋‹ค๋ฅธ ๋‚ด์šฉ์ด ๋ฐœ๊ฒฌ๋  ์ˆ˜ ์žˆ๋‹ค.

- ์˜ค๋ผํด ๋“ฑ์—์„œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

 

4) READ_UNCOMMITTED

- ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๊ธฐ ์ด์ „์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—๊ฒŒ ๋…ธ์ถœ๋œ๋‹ค. (READ_COMMITED๊ณผ ๋‹ฌ๋ฆฌ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊นŒ์ง€ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.)

- ๊ฐ€์žฅ ๋น ๋ฅด์ง€๋งŒ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ๋˜๋„๋ก ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด๋‹ค. (๋ช‡๋ช‡ ํ–‰์ด ์ œ๋Œ€๋กœ ์กฐํšŒ๋˜์ง€ ์•Š๋”๋ผ๋„ ๊ดœ์ฐฎ์€ ๊ฑฐ๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ '์–ด๋ฆผ์žก์•„' ์ง‘๊ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š”๊ฑด ์ข‹๋‹ค)

 

๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ

์œ„๋กœ ๊ฐˆ์ˆ˜๋ก ๋™์‹œ์„ฑ์ด ๊ฐ•ํ•ด์ง€์ง€๋งŒ ๊ฒฉ๋ฆฌ์„ฑ์€ ์•ฝํ•ด์ง€๊ณ , ์•„๋ž˜๋กœ ๊ฐˆ์ˆ˜๋ก ๋™์‹œ์„ฑ์€ ์•ฝํ•ด์ง€๊ณ  ๊ฒฉ๋ฆฌ์„ฑ์€ ๊ฐ•ํ•ด์ง„๋‹ค.

 

SERIALIZABLE

REPEATABLE_READ - `ํŒฌํ…€ ๋ฆฌ๋“œ` ๋ฐœ์ƒ ๊ฐ€๋Šฅ

READ_COMMITED - `ํŒฌํ…€ ๋ฆฌ๋“œ`, `๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ์กฐํšŒ` ๋ฐœ์ƒ ๊ฐ€๋Šฅ

READ_UNCOMMITTED - `ํŒฌํ…€ ๋ฆฌ๋“œ`, `๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ์กฐํšŒ`, `๋”ํ‹ฐ ๋ฆฌ๋“œ` ๋ฐœ์ƒ ๊ฐ€๋Šฅ

 

ํŒฌํ…€ ๋ฆฌ๋“œ (phantom read) : ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์—†์—ˆ๋˜ ์ฟผ๋ฆฌ๊ฐ€ ํŠ€์–ด๋‚˜์˜จ๋‹ค.

๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ์กฐํšŒ (non-repeatable read) : ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค.

๋”ํ‹ฐ ๋ฆฌ๋“œ (dirty read) : ์•„์ง commit๋˜์ง€ ์•Š์€ ๊ฐ’์„ ์ฝ์—ˆ๋Š”๋ฐ roll back์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ

 

Stored Procedure (์ €์žฅ ํ”„๋กœ์‹œ์ €)

์ €์žฅ ํ”„๋กœ์‹œ์ €๋Š” ์ฟผ๋ฆฌ๋ฌธ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ, ์–ด๋–ค ๋™์ž‘์„ ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ๋ฅผ ๊ฑฐ์ณ์„œ ์ผ๊ด„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ทธ๋ƒฅ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์™œ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

https://devkingdom.tistory.com/323

 

[MSSQL] ์ €์žฅ ํ”„๋กœ์‹œ์ € (Stored Procedure) ๋ž€?

์‹ค๋ฌด์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋งŒ๋“ค์–ด ๋†“์€ SQL๋ฌธ์„ ์ €์žฅํ•ด ๋†“๊ณ , ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ ๋‹ค. ์ €์žฅ ํ”„๋กœ์‹œ์ € (Stroed Procedure) ์ €์žฅ ํ”„๋กœ์‹œ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด ๊ฐ€๋Šฅ

devkingdom.tistory.com

 

SP(์ €์žฅํ”„๋กœ์‹œ์ €)์˜ ๋ฌธ์ œ์ 

- db ํ™•์žฅ์ด ์–ด๋ ต๋‹ค

- ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์ถ”์ ์ด ํž˜๋“ค๋‹ค (๋กœ๊ทธ ํ™•์ธ์ด ํž˜๋“ค์–ด์„œ?)

 

+) ์ผ๋ฐ˜ ์ฟผ๋ฆฌ๋ฌธ vs ์ €์žฅ ํ”„๋กœ์‹œ์ €

https://velog.io/@sweet_sumin/%EC%A0%80%EC%9E%A5-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80-Stored-Procedure

 

์ €์žฅ ํ”„๋กœ์‹œ์ € (Stored Procedure)

DB ๋‚ด๋ถ€์— ์ €์žฅ๋œ ์ผ๋ จ์˜ SQL ๋ช…๋ น๋ฌธ๋“ค์„ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ์˜ ์ง‘ํ•ฉ. ์ฆ‰, DB์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ •๋ฆฌํ•œ ์ ˆ์ฐจ๋ฅผ RDBMS(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ)์— ์ €์žฅํ•œ ์ฟผ๋ฆฌ์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์˜

velog.io

 

Redis๋ž€?

- key, value ๊ตฌ์กฐ์˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

- ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์ €์žฅ์†Œ

 

๋ ˆ๋””์Šค ํŠน์ง•

- key, value ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

- ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์“ฐ๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

- `String`, `Lists`, `Sets`, `Sorted Sets`, `Hashes` ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

 

 

- Single Threaded ๋กœ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜๋ฆฌ์‹œ๊ฐ„์ด ๊ธด ๋ช…๋ น์–ด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๊ทธ ๋’ค์— ๋ช…๋ น์–ด๋“ค์€ ๋ชจ๋‘ ์•ž์— ์žˆ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. (ํ•˜์ง€๋งŒ get, set ๋ช…๋ น์–ด์˜ ๊ฒฝ์šฐ ์ดˆ๋‹น 10๋งŒ๊ฐœ ์ด์ƒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„๋งŒํผ ๋น ๋ฅด๋‹ค.)

 

๋ ˆ๋””์Šค ์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•  ์ 

- ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์šด์˜ ํ”Œ๋žœ์ด ๊ผญ ํ•„์š”ํ•˜๋‹ค. (์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ํŠน์„ฑ์ƒ, ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ)

- ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์˜ ํŠน์„ฑ์ƒ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์š”์ฒญ์€ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

 

+) ๋ ˆ๋””์Šค๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„๋‘๋ฉด ์ข‹์€ ๊ฐœ๋…๋“ค

- Master-Slave ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ์ด์ค‘ํ™” ๊ตฌ์กฐ์— ๋Œ€ํ•œ Redis Replication

- ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Redis cluster

- ์žฅ์•  ๋ณต๊ตฌ ์‹œ์Šคํ…œ Redis Sentinel, Redis Topology, Redis Sharding, Redis Failover

- Redis Cache

 

https://seungjjun.tistory.com/246

 

[Redis] Redis ์บ์‹œ(Cache)๋ฅผ ์ ์šฉํ•ด ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ

์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ Spring์— redis๋ฅผ ์—ฐ๋™ํ•˜์—ฌ redis์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜๋‹ค. redis ์—ฐ๋™ ์—ฐ์Šต ์ฝ”๋“œ๋Š” ์•„๋ž˜ github์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. https://github.com/seungjjun/CodingLife/tree/main/230216 ์ด๋ฒˆ์—๋Š” KiC

seungjjun.tistory.com

 

 

https://www.wool-dev.com/backend-engineering/spring/springboot-redis-cache

 

SpringBoot์—์„œ Redis ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ

๋งŽ์€ ๊ฒฝ์šฐ์— Spring์€ DB์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ ์žˆ๋Š”๋ฐ ์ด ๋•Œ, Redis๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌ ํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. Redis๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋„ ์‚ฌ์šฉ๋˜๊ณ ,

www.wool-dev.com

 

https://wildeveloperetrain.tistory.com/21

 

Redis๋ž€? ๋ ˆ๋””์Šค์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋… (์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ €์žฅ์†Œ)

Redis๋ž€? Key, Value ๊ตฌ์กฐ์˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (DBMS)์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ, ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ์ธ๋ฉ”๋ชจ๋ฆฌ

wildeveloperetrain.tistory.com

https://career.guru99.com/ko/top-10-redis-interview-questions/

 

Redis ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ ๋ฐ ๋‹ต๋ณ€ ์ƒ์œ„ 10๊ฐœ(2024)

๊ฟˆ์˜ ์ง์—…์„ ์–ป๊ธฐ ์œ„ํ•œ ์‹ ์ž… ์ง€์›์ž์™€ ์ˆ™๋ จ๋œ ์ง€์›์ž๋ฅผ ์œ„ํ•œ Redis ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

career.guru99.com