๐Ÿ“Œ ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

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


1. ํŠธ๋žœ์žญ์…˜๊ณผ ACID ์›์น™

๐ŸŽฏ ํŠธ๋žœ์žญ์…˜(Transaction)์ด๋ž€?

ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ์ž‘์—… ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ์„ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜, ๋ชจ๋‘ ์‹คํŒจํ•˜์—ฌ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ACID ์›์น™

ํŠธ๋žœ์žญ์…˜์€ ๋‹ค์Œ์˜ ACID ์›์น™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  1. ์›์ž์„ฑ(Atomicity): ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์—ฐ์‚ฐ์€ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜, ๋ชจ๋‘ ์‹คํŒจํ•˜์—ฌ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ผ๊ด€์„ฑ(Consistency): ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.j-
  3. ๊ฒฉ๋ฆฌ์„ฑ(Isolation): ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์€ ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๋„๋ก ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ง€์†์„ฑ(Durability): ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ

ํŠธ๋žœ์žญ์…˜์€ ์ˆ˜ํ–‰ ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

  1. ํ™œ์„ฑ ์ƒํƒœ (Active)
    • ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜์–ด ์—ฐ์‚ฐ์ด ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  2. ๋ถ€๋ถ„ ์™„๋ฃŒ ์ƒํƒœ (Partially Committed)
    • ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์—ฐ์‚ฐ์ด ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ณ , Commit ์—ฐ์‚ฐ์ด ๋„์ฐฉํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  3. ์™„๋ฃŒ ์ƒํƒœ (Committed)
    • ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์–ด ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  4. ์‹คํŒจ ์ƒํƒœ (Failed)
    • ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰ ๋„์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋” ์ด์ƒ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  5. ์ฒ ํšŒ ์ƒํƒœ (Aborted)
    • ํŠธ๋žœ์žญ์…˜์ด ์‹คํŒจํ•˜์—ฌ Rollback ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์‹œ์ž‘ ์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๐Ÿ“š 2. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SQL ํ‘œ์ค€์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 4๊ฐ€์ง€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค

  1. READ UNCOMMITTED (์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ฝ๊ธฐ):
    • ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฌธ์ œ์ : Dirty Read, Non-repeatable Read, Phantom Read ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  2. READ COMMITTED (์ปค๋ฐ‹๋œ ์ฝ๊ธฐ):
    • ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฌธ์ œ์ : Non-repeatable Read, Phantom Read ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  3. REPEATABLE READ (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ):
    • ํŠธ๋žœ์žญ์…˜์ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ์–ด๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฌธ์ œ์ : Phantom Read ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  4. SERIALIZABLE (์ง๋ ฌํ™” ๊ฐ€๋Šฅ):
    • ๊ฐ€์žฅ ๋†’์€ ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ๋กœ, ํŠธ๋žœ์žญ์…˜๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฌธ์ œ์ : ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋™์‹œ์„ฑ ์ œ์–ด์™€ MVCC

๐ŸŽฏ ๋™์‹œ์„ฑ ์ œ์–ด(Concurrency Control)

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

๐ŸŽฏ MVCC(Multi-Version Concurrency Control)

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


4. ๋ฐ๋“œ๋ฝ(Deadlock)๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๐ŸŽฏ ๋ฐ๋“œ๋ฝ(Deadlock)์ด๋ž€?

๋ฐ๋“œ๋ฝ์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ์„œ๋กœ๊ฐ€ ์†Œ์œ ํ•œ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์ง€๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜์ด ์ง„ํ–‰๋˜์ง€ ๋ชปํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ๋ฐ๋“œ๋ฝ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ์˜ˆ๋ฐฉ(Prevention): ํŠธ๋žœ์žญ์…˜์ด ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋ฏธ๋ฆฌ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์ด ์ž์›์„ ๋™์ผํ•œ ์ˆœ์„œ๋กœ ์š”์ฒญํ•˜๋„๋ก ๊ทœ์น™์„ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ๊ทธ๋Ÿฌ๋‚˜, ์ด๋Š” ํ˜„์‹ค์ ์œผ๋กœ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํŠธ๋žœ์žญ์…˜๋“ค์ด ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜, ํŠธ๋žœ์žญ์…˜์„ ์ž์ฃผ ์ปค๋ฐ‹ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ๋ฐ๋“œ๋ฝ ์˜ˆ๋ฐฉ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํšŒํ”ผ(Avoidance): ํŠธ๋žœ์žญ์…˜์ด ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ณ , ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด ์ž์› ํ• ๋‹น์„ ๋ณด๋ฅ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ ์‹œ๊ฐ„ ์Šคํƒฌํ”„๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, Wait-Die ๋ฐฉ์‹๊ณผ Wound-Wait ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. Wait-Die ๋ฐฉ์‹์€ ์˜ค๋ž˜๋œ ํŠธ๋žœ์žญ์…˜์ด ์ž์›์„ ์š”์ฒญํ•˜๋ฉด ๋Œ€๊ธฐํ•˜๊ณ , ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์ด ์ž์›์„ ์š”์ฒญํ•˜๋ฉด ํฌ๊ธฐํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, Wound-Wait ๋ฐฉ์‹์€ ์˜ค๋ž˜๋œ ํŠธ๋žœ์žญ์…˜์ด ์ž์›์„ ์š”์ฒญํ•˜๋ฉด ์ž์›์„ ์„ ์ ํ•˜๊ณ , ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์ด ์ž์›์„ ์š”์ฒญํ•˜๋ฉด ๋Œ€๊ธฐํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  1. ํƒ์ง€(Detection) ๋ฐ ๋ณต๊ตฌ(Recovery): ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ณ , ๋ฐœ๊ฒฌ๋˜๋ฉด ์ผ๋ถ€ ํŠธ๋žœ์žญ์…˜์„ ์ค‘๋‹จ(rollback)ํ•˜์—ฌ ๋ฐ๋“œ๋ฝ ์ƒํƒœ๋ฅผ ํ•ด์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐Ÿ”ฅ5. ์ž ๊ธˆ(Lock) ๋ฉ”์ปค๋‹ˆ์ฆ˜

โœ…1. ์ž ๊ธˆ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

์ž ๊ธˆ์€ ํŠธ๋žœ์žญ์…˜์ด ํŠน์ • ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

โœ…2. ์ž ๊ธˆ์˜ ์œ ํ˜•

์ž ๊ธˆ์€ ๊ธฐ๋Šฅ๊ณผ ๋ชฉ์ ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์œ ํ˜•์œผ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.

a. ๊ณต์œ  ์ž ๊ธˆ(Shared Lock, S Lock)

๊ณต์œ  ์ž ๊ธˆ์€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณต์œ  ์ž ๊ธˆ์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ •ํ•˜๋ ค๋ฉด, ํ•ด๋‹น ๊ณต์œ  ์ž ๊ธˆ์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

b. ๋ฐฐํƒ€ ์ž ๊ธˆ(Exclusive Lock, X Lock)

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

c. ๋‚™๊ด€์  ์ž ๊ธˆ(Optimistic Lock)

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

โœ…3. ์ž ๊ธˆ์˜ ์„ธ๋ถ„ํ™”(Granularity)

์ž ๊ธˆ์€ ์ ์šฉ ๋ฒ”์œ„์— ๋”ฐ๋ผ ์„ธ๋ถ„ํ™”๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”นa. ํ–‰ ์ˆ˜์ค€ ์ž ๊ธˆ(Row-Level Lock)

ํŠน์ • ํ–‰์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋†’์€ ๋™์‹œ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ž ๊ธˆ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฝ๋‹ˆ๋‹ค.

๐Ÿ”นb. ํŽ˜์ด์ง€ ์ˆ˜์ค€ ์ž ๊ธˆ(Page-Level Lock)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ–‰ ์ˆ˜์ค€๊ณผ ํ…Œ์ด๋ธ” ์ˆ˜์ค€์˜ ์ค‘๊ฐ„ ์ •๋„์˜ ๋™์‹œ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”นc. ํ…Œ์ด๋ธ” ์ˆ˜์ค€ ์ž ๊ธˆ(Table-Level Lock)

์ „์ฒด ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž ๊ธˆ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ๋™์‹œ์„ฑ์ด ๋‚ฎ์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”นd. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜์ค€ ์ž ๊ธˆ(Database-Level Lock)

์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ๋กœ ๊ด€๋ฆฌ ์ž‘์—… ์‹œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋™์‹œ์„ฑ์ด ๋งค์šฐ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.

โœ…4. ์ž ๊ธˆ์˜ ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ

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

โœ…5. ์ž ๊ธˆ๊ณผ ์„ฑ๋Šฅ

์ž ๊ธˆ์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด์ง€๋งŒ, ๊ณผ๋„ํ•œ ์ž ๊ธˆ์ด๋‚˜ ๋ถ€์ ์ ˆํ•œ ์ž ๊ธˆ ๊ด€๋ฆฌ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž ๊ธˆ์˜ ์œ ํ˜•๊ณผ ๋ฒ”์œ„๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜์„ ์‹ ์†ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ž ๊ธˆ์ด ์žฅ์‹œ๊ฐ„ ์œ ์ง€๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ž ๊ธˆ ๊ฒฝํ•ฉ(Lock Contention): ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๋™์ผํ•œ ์ž์›์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ์š”์ฒญํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝํ•ฉ ์ƒํ™ฉ์€ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ํ•„์š”ํ•œ ์ž์›์—๋งŒ ์ž ๊ธˆ์„ ์„ค์ •ํ•˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜์„ ์‹ ์†ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ์ž ๊ธˆ ๊ด€๋ฆฌ

๋ถ„์‚ฐ ์ž ๊ธˆ(Distributed Lock): ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„์‚ฐ ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Redis์™€ ๊ฐ™์€ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ถ„์‚ฐ ์ž ๊ธˆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ…6. ๋ฐ๋“œ๋ฝ(Deadlock)๊ณผ ์ž ๊ธˆ

์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋“œ๋ฝ์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ์„œ๋กœ๊ฐ€ ์†Œ์œ ํ•œ ์ž ๊ธˆ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์ง€๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์€ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ๋ฐ ํ•ด์†Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์ž ๊ธˆ ์ˆœ์„œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์˜ ๋™์‹œ์„ฑ ์ œ์–ด์™€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€์— ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.