Optimistic Lock Pessimistic Lock

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ

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

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

  • ํ…Œ์ด๋ธ”์˜ row์— ์ ‘๊ทผ ์‹œ Lock์„ ๊ฑธ๊ณ  ๋‹ค๋ฅธ Lock์ด ๊ฑธ๋ ค์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋งŒ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

  • ์ˆ˜์ •ํ•  ๋•Œ ๋‚ด๊ฐ€ ๋จผ์ € ์ด ๊ฐ’์„ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ๋ช…์‹œํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋™์ผํ•œ ์กฐ๊ฑด์œผ๋กœ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋น„๊ด€์  ๋ฝ (Pessimistic Lock)

๋น„๊ด€์  ๋ฝ์€ Repeatable Read ๋˜๋Š” Serializable ์ •๋„์˜ ๊ฒฉ๋ฆฌ์„ฑ ์ˆ˜์ค€์„ ์ œ๊ณตํ•œ๋‹ค.

๋น„๊ด€์  ๋ฝ์€ ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋  ๋•Œ Shared Lock ๋˜๋Š” Exclusive Lock์„ ๊ฑธ๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํŠธ๋žœ์žญ์…˜์ด write๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Exclusive Lock์„ ์–ป์–ด์•ผ ํ•œ๋‹ค.

์ด ๋•Œ Shared Lock์ด ๊ฑธ๋ ค์žˆ์œผ๋ฉด Exclusive Lock์„ ์–ป์ง€ ๋ชปํ•ด์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค.

์ˆ˜์ •์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.

๋‚™๊ด€์  ๋ฝ (Optimistic Lock)

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

๋ง๋งŒ ๋“ค์–ด๋„ ์•Œ๊ฒ ์ง€๋งŒ ์ด ํŠน์ง•์€ DB์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํŠน์ง•์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, Application Level์—์„œ ์žก์•„์ฃผ๋Š” Lock์ด๋‹ค.

  1. A๊ฐ€ table์˜ Id 2๋ฒˆ์„ ์ฝ์Œ ( name = Karol, version = 1 )

  2. B๊ฐ€ table์˜ Id 2๋ฒˆ์„ ์ฝ์Œ ( name = Karol, version = 1 )

  3. B๊ฐ€ table์˜ Id 2๋ฒˆ, version 1์ธ row์˜ ๊ฐ’ ๊ฐฑ์‹  ( name = Karol2, version = 2 ) ์„ฑ๊ณต

  4. A๊ฐ€ table์˜ Id 2๋ฒˆ, version 1์ธ row์˜ ๊ฐ’ ๊ฐฑ์‹  ( name = Karol1, version = 2 ) ์‹คํŒจ

    • Id 2๋ฒˆ์€ ์ด๋ฏธ version์ด 2๋กœ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— A๋Š” ํ•ด๋‹น row๋ฅผ ๊ฐฑ์‹ ํ•˜์ง€ ๋ชปํ•จ

๋„์‹๋„๋ฅผ ๊ธ€๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์œ„์™€ ๊ฐ™๋‹ค.

์œ„ flow๋ฅผ ํ†ตํ•ด์„œ ๊ฐ™์€ row์— ๋Œ€ํ•ด์„œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ 2๊ฐœ์˜ ์ˆ˜์ • ์š”์ฒญ์ด ์žˆ์—ˆ์ง€๋งŒ 1๊ฐœ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋จ์— ๋”ฐ๋ผ version์ด ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์˜ ์ˆ˜์ • ์š”์ฒญ์€ ๋ฐ˜์˜๋˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋‚™๊ด€์  ๋ฝ์€ version๊ณผ ๊ฐ™์€ ๋ณ„๋„์˜ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถฉ๋Œ์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ง‰๋Š”๋‹ค.

version ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ hashcode ๋˜๋Š” timestamp๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

๋กค๋ฐฑ Rollback

๊ทธ๋Ÿฐ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š” ํ…Œ์ด๋ธ”์ด 1๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?

๋‹น์—ฐํžˆ ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” Rollback์ด ํ•„์š”ํ•˜๋‹ค.

์•„๋ž˜ ๋น„๊ด€์  ๋ฝ์˜ ์ˆ˜๋„์ฝ”๋“œ๋ฅผ ๋ณด์ž.

์œ„์˜ ์ˆ˜๋„ ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์—ฌ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ํ•˜๋‚˜ ์‹คํŒจํ•˜๋ฉด database ๋‹จ์—์„œ ์ „์ฒด Rollback์ด ์ผ์–ด๋‚˜๊ฒŒ๋œ๋‹ค.

๋งŒ์•ฝ theTable์ด ์‹คํŒจํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

๊ทธ๋ ‡๋‹ค๋ฉด Transaction์ด ์‹คํŒจํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜ ์ „์ฒด์— ์ž๋™์œผ๋กœ rollback์ด ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

๋‚™๊ด€์  ๋ฝ์˜ ๊ฒฝ์šฐ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

Transaction์„ ์žก์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ˆ˜์ •์„ ๋ชปํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋กค๋ฐฑ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ Application ๋‹จ์—์„œ ๋กค๋ฐฑ์„ ์ˆ˜๋™์œผ๋กœ ํ•ด์ค˜์•ผํ•œ๋‹ค.

๋‚™๊ด€์  ๋ฝ์€ ํŠธ๋žœ์žญ์…˜์„ ํ•„์š”๋กœํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ์ ์œผ๋กœ ๋น„๊ด€์  ๋ฝ๋ณด๋‹ค ๋” ์ข‹๋‹ค.

์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ๋น„๊ด€์  ๋ฝ์— ๋น„ํ•ด ๊ฐ€์ง€๋Š” ๋‚™๊ด€์  ๋ฝ์˜ ์ตœ๋Œ€ ๊ฐ•์ ์ด๋‹ค.

ํŠธ๋žœ์žญ์…˜์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ์ง์˜ ํ๋ฆ„์„ ๊ฐ€์งˆ๋•Œ๋„ ์ถฉ๋Œ ๊ฐ์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ๋น„๊ด€์  ๋ฝ์ด๋ผ๋ฉด 1๋ฒˆ์—์„œ 3๋ฒˆ์‚ฌ์ด์˜ ํŠธ๋žœ์žญ์…˜์„ ์œ ์ง€ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ •๋ณด๋ฅผ ์š”์ฒญ

  2. ์„œ๋ฒ„์—์„œ๋Š” ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜

  3. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ˆ˜์ • ์š”์ฒญ

  4. ์„œ๋ฒ„์—์„œ๋Š” ์ˆ˜์ • ์ ์šฉ ( ์ถฉ๋Œ ๊ฐ์ง€ ๊ฐ€๋Šฅ )

๋•Œ๋ฌธ์— ์ถฉ๋Œ์ด ๋งŽ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์—ฌ์ง€๋Š” ๊ณณ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚™๊ด€์  ๋ฝ์˜ ์ตœ๋Œ€ ๋‹จ์ ์€ ๋กค๋ฐฑ์ด๋‹ค.

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

๋น„๊ด€์  ๋ฝ์ด๋ผ๋ฉด ํŠธ๋žœ์žญ์…˜์„ ๋กค๋ฐฑํ•˜๋ฉด ๋๋‚˜๋Š” ์ž‘์—…์ด์ง€๋งŒ ๋‚™๊ด€์  ๋ฝ์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

์ˆ˜๋™์œผ๋กœ ๋กค๋ฐฑ์ฒ˜๋ฆฌ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ๊นŒ๋‹ค๋กญ์ง€๋งŒ ์„ฑ๋Šฅ์ ์œผ๋กœ ๋ณด๋”๋ผ๋„ update๋ฅผ ํ•œ๋ฒˆ์”ฉ ๋” ํ•ด์ค˜์•ผํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋น„๊ด€์  ๋ฝ ๋ณด๋‹ค ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ์  ๋•Œ๋ฌธ์— ๋‚™๊ด€์  ๋ฝ์€ ์ถฉ๋Œ์ด ๋งŽ์ด ์˜ˆ์ƒ๋˜๊ฑฐ๋‚˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ณณ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

Last updated