2021-03-10(Wed)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-03-10(์ˆ˜)

ํ•™์Šต ์‹œ๊ฐ„

11:00~24:00

ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ

DB ํŠธ๋žœ์žญ์…˜

ํ•™์Šต ๋ชฉํ‘œ

War operation ๋ชจ๋“ˆ์„ ์™„์„ฑํ•œ๋‹ค.

๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ•

jujeong, sanam๊ณผ ํŽ˜์–ด์ฝ”๋”ฉ

์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

PR ๋ฆฌ๋ทฐ๋ฅผ ์ณ๋‚ด๊ณ , War index๋ฅผ ๋ฆฌ๋ทฐํ•˜๊ณ , ๋ฐฑ์—”๋“œ ํŒŒํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋‹ค๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ํ›Œ์ฉ ์ง€๋‚˜๊ฐ”๋‹ค.

DB ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช์–ด๋ดค๋˜ ๋งŒํผ with_lock์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‚ด์นœ ๊น€์— DB ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด์„œ ๊ฐœ์ธ์ ์œผ๋กœ ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜(Transaction)?

์ •์˜

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

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์€ CRUD๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์ž‘์—…์˜ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ณ , ์‹œ์Šคํ…œ์˜ ์ž…์žฅ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ ‘๊ทผ ๋˜๋Š” ๋ณ€๊ฒฝํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.

ํŠน์ง•

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

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

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

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

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

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

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

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

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

ํŠธ๋žœ์žญ์…˜ vs Lock

์ž ๊ธˆ(Lock)์€ ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๊ณ , ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์˜ˆ๋น„ํ• ๋‹น(reservation)ํ•˜๋Š”๋ฐ, ์ด ์˜ˆ๋น„ํ• ๋‹น์„ ์ž ๊ธˆ์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ž ๊ธˆ์€ ์—ฌ๋Ÿฌ ์ปค๋„ฅ์…˜์—์„œ ๋™์‹œ์— ๋™์ผํ•œ ์ž์›(record or table)์„ ์š”์ฒญํ•  ๊ฒฝ์šฐ, ์ˆœ์„œ๋Œ€๋กœ ํ•œ ์‹œ์ ์—๋Š” ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

  • ํŠธ๋žœ์žญ์…˜์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ์…‹ ์ž์ฒด๊ฐ€ ์™„์ „ํžˆ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์žฅํ•œ๋‹ค.

์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ์ง„ํ–‰ํ•œ Rails ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง• ์ค‘ '๋…๋ฆฝ์„ฑ'์„ ์ž˜๋ชป ์ดํ•ดํ•œ ๋‚˜๋จธ์ง€ record ๋™์‹œ์ ‘๊ทผ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ActiveRecord::Base transaction ๋ฌธ์„ ์„ ์–ธํ–ˆ์—ˆ๋‹ค๊ฐ€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช๊ณ  Record ์ž์ฒด์— lock์„ ๊ฑฐ๋Š” ํ˜•์‹์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.

์ž ๊ธˆ์€ ์•„๋ž˜ ๋‘ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค.

  • ์ฝ๊ธฐ ์ž ๊ธˆ(read lock)๊ณผ ์“ฐ๊ธฐ ์ž ๊ธˆ(write lock)์ด ์žˆ๋‹ค. ๊ฐ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์ „์—, ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ ์ „์— ์ž ๊ธˆ์„ ์„ค์ •ํ•œ๋‹ค.

  • ์ฝ๊ธฐ ์ž ๊ธˆ์€ ์“ฐ๊ธฐ ์ž ๊ธˆ๊ณผ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋ฉฐ, ์“ฐ๊ธฐ ์ž ๊ธˆ์€ ์ฝ๊ธฐ ์ž ๊ธˆ ๋ฐ ์“ฐ๊ธฐ ์ž ๊ธˆ๊ณผ ์ถฉ๋Œ์„ ์ผ์œผํ‚จ๋‹ค.

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

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ๋Š” ์•„๋ž˜ 5๊ฐœ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • Active: ํŠธ๋žœ์žญ์…˜์˜ ํ™œ๋™ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰ ์ค‘์ด๋ฉฐ ๋™์ž‘ ์ค‘์ธ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

  • Partially Committed: ํŠธ๋žœ์žญ์…˜์˜ Commit ๋ช…๋ น์ด ๋„์ฐฉํ•œ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์˜ commit ์ด์ „ sql ๋ฌธ์ด ์ˆ˜ํ–‰๋˜๊ณ , commit ๋งŒ ๋‚จ์€ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

  • Failed: ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ๋” ์ด์ƒ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

  • Committed: ํŠธ๋žœ์žญ์…˜ ์™„๋ฃŒ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

  • Aborted: ํŠธ๋žœ์žญ์…˜์ด ์ทจ์†Œ๋œ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์ทจ์†Œ๋˜๊ณ  ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ด์ „ ๋ฐ์ดํ„ฐ๋กœ ๋Œ์•„๊ฐ„ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

Commit ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒํƒœ๋Š” Partial Commited ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ดํ›„ Commit์„ ๋ฌธ์ œ ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด Committed ์ƒํƒœ๋กœ ์ „์ด๋˜๊ณ , ๋งŒ์•ฝ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Failed ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ฆ‰, Partial Commited ๋Š” Commit ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ๋ฅผ ๋งํ•˜๋ฉฐ, Commited ๋Š” Commit์„ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒํ•œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

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

ํŠธ๋žœ์žญ์…˜์€ ์•„๋ž˜ ์ด์œ ์—์„œ ๊ผญ ํ•„์š”ํ•œ ์ตœ์†Œ์˜ ์ฝ”๋“œ์—๋งŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์€ ๊ฐœ์ˆ˜๊ฐ€ ์ œํ•œ์ ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ ๋‹จ์œ„์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ฅ์…˜์„ ์†Œ์œ ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฌ์œ  ์ปค๋„ฅ์…˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค. ์ด๋Š” '๊ต์ฐฉ ์ƒํƒœ'๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์—์„œ ๊ต์ฐฉ์ƒํƒœ(Deadlock)?

๋ฎคํƒ์Šค๋‚˜ ์„ธ๋งˆํฌ์–ด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋งŒ๋‚ฌ๋˜ ๊ทธ ๊ต์ฐฉ ์ƒํƒœ(Deadlock)๊ฐ€ ๋งž๋‹ค. ๋‘ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ํŠน์ • ์ž์›(record ๋˜๋Š” table)์˜ lock์„ ํš๋“ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž ๊ธˆ์„ ์š”๊ตฌํ•˜๋ฉด ์•„๋ฌด๋ฆฌ ๊ธฐ๋‹ค๋ ค๋„ ์ƒํ™ฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” '๊ต์ฐฉ ์ƒํƒœ'์— ๋น ์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ์‹œ

๊ต์ฐฉ์ƒํƒœ์˜ ๋นˆ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•์€?

  • ํŠธ๋žœ์žญ์…˜์ด ์ž ๊ธˆ์„ ์œ ์ง€ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ธ๋‹ค.

    • ํŠธ๋žœ์žญ์…˜์—์„œ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.

    • ํŠธ๋žœ์žญ์…˜์„ ๋‘˜ ์ด์ƒ์˜ ๋” ์งง์€ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ž์ฃผ ์ปค๋ฐ‹ํ•œ๋‹ค.

  • ์ •ํ•ด์ง„ ์ˆœ์„œ๋กœ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•œ๋‹ค. ๊ฐ€๋ น ํ…Œ์ด๋ธ” B->A์˜ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ํŠธ๋žœ์žญ์…˜๊ณผ ํ…Œ์ด๋ธ” A->B๋กœ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์„ ํ˜ผ์žฌํ‚ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ†ต์ผํ•˜๋Š” ์‹์ด๋‹ค.

  • ์ฝ๊ธฐ ์ž ๊ธˆ ํš๋“(SELECT)์˜ ์‚ฌ์šฉ์„ ํ”ผํ•œ๋‹ค. ๊ฐ€๋ น MySQL์—์„œ SERIALIZABLE ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ๋Š” ๋ชจ๋“  SELECT ์ฟผ๋ฆฌ์— ์ž๋™์ ์œผ๋กœ LOCK IN SHARE MODE๊ฐ€ ๋ง๋ถ™์—ฌ์ ธ์„œ ์‹คํ–‰๋˜๋Š” ํšจ๊ณผ๊ฐ€ ๋‚˜์„œ ์ฝ๊ธฐ ์ž ๊ธˆ์„ ๊ฑธ๊ณ  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๊ฒŒ ๋œ๋‹ค.

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

ํŠธ๋žœ์žญ์…˜ ๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ์‹œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€?

๋ฐ๋“œ๋ฝ๊ณผ ๊ด€๋ จ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฐ€์šด๋ฐ ํ•˜๋‚˜๋ฅผ ํฌ์ƒ์ž(victim) ์‚ผ์•„ abort ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฐธ๊ณ 

ํ•™์Šต ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ดํ‰

ActionCable ์ฒ˜๋ฆฌ์— ์‹œ๊ฐ„์„ ๋งŽ์ด ์ผ๋‹ค. ๋‚ด๊ณต์ด ์Œ“์ผ ์ˆ˜ ์žˆ๋„๋ก ์ข€ ๋” ์ž˜ ๊ณ ๋ฏผํ•˜๋ฉด์„œ task๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ์ง€!

DB ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ํ•™์Šตํ•œ๊ฒŒ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.

๋‹ค์Œ ํ•™์Šต ๊ณ„ํš

  • War operation ๊ตฌํ˜„

Last updated