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