๐Ÿš€
Growth log
  • About me
  • I LEARNED
    • General
      • ๊ฐœ๋ฐœ์ž ๊ฟ€ํŒ
      • ๊ทธ๋กœ์Šคํ•ดํ‚น ๊ธฐ์ดˆ
      • ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋„๋ฉ”์ธ ์ง€์‹์€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ• ๊นŒ?
      • DTO ๋…ผ์Ÿ์— ๋Œ€ํ•˜์—ฌ
      • MSA๋ž€?
    • Seminar
      • ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 100% - SLASH 21
      • TDD๊ฐ€ ์‹คํŒจํ•˜๋Š” ์ด์œ  - by ์ด๊ทœ์›๋‹˜
      • ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ํŠœ๋‹ ๋…ธํ•˜์šฐ ๋‹ค ์•Œ๋ ค ๋“œ๋ฆผ|๋ผ์ธ๊ฐœ๋ฐœ์‹ค๋ก
      • ๊ฒฐ์ œ ์‹œ์Šคํ…œ์˜ SDK์™€ API ๋””์ž์ธ - SLASH 21
    • Web
      • SOP์™€ CORS
    • Spring & OOP
      • DTO vs VO
    • Ruby On Rails
      • Rails lib ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•˜์—ฌ
      • Rails์˜ concerns๋ž€?
      • Rails์—์„œ์˜ GC ์ž‘๋™์›๋ฆฌ
      • Eager loading vs Lazy loading
      • Rails ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ActionCable
      • ๐Ÿ“”Perfect ruby on rails
        • MVC ํŒจํ„ด์ธ Rails
        • Ruby on Rails ๊ธฐ๋ณธ - ์ปจํŠธ๋กค๋Ÿฌ
        • Ruby on Rails ๊ธฐ๋ณธ - ๋ทฐ
        • Ruby on Rails ๊ธฐ๋ณธ - ๋ชจ๋ธ
        • ์Šค์บํด๋”ฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ Rails ๊ฐœ๋ฐœ ๊ธฐ์ดˆ
        • ๋ทฐ ๊ฐœ๋ฐœ
        • ๋ชจ๋ธ ๊ฐœ๋ฐœ
        • ๋ชจ๋ธ ๊ฐœ๋ฐœ - ๋‚™๊ด€์  ๋™์‹œ ์‹คํ–‰ ์ œ์–ด
        • ๋ชจ๋ธ ๊ฐœ๋ฐœ - ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ตฌํ˜„
        • ๋ชจ๋ธ ๊ฐœ๋ฐœ - Association
        • ๋ชจ๋ธ ๊ฐœ๋ฐœ - ์ฝœ๋ฐฑ
        • ๋ชจ๋ธ ๊ฐœ๋ฐœ - ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
        • ๋ชจ๋ธ ๊ฐœ๋ฐœ - ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”
        • ์ปจํŠธ๋กค๋Ÿฌ ๊ฐœ๋ฐœ - ์š”์ฒญ ์ •๋ณด ์ถ”์ถœ
        • ์ปจํŠธ๋กค๋Ÿฌ ๊ฐœ๋ฐœ - ์‘๋‹ต
        • ์ปจํŠธ๋กค๋Ÿฌ ๊ฐœ๋ฐœ - ์ƒํƒœ ๊ด€๋ฆฌ
        • ๋ผ์šฐํŒ… - RESTful
        • ๋ผ์šฐํŒ… - RESTful ์ธํ„ฐํŽ˜์ด์Šค์˜ ์‚ฌ์šฉ์ž ์ •์˜ํ™”
        • ๋ผ์šฐํŒ… - RESTful ํ•˜์ง€ ์•Š์€ ๋ผ์šฐํŠธ ์ •์˜
        • ํ…Œ์ŠคํŠธ
        • ํ…Œ์ŠคํŠธ - ์ค€๋น„
        • ํ…Œ์ŠคํŠธ - Unit ํ…Œ์ŠคํŠธ
        • ํ…Œ์ŠคํŠธ - Functional ํ…Œ์ŠคํŠธ
        • ํ…Œ์ŠคํŠธ - Integration ํ…Œ์ŠคํŠธ
        • ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ - Sprockets vs Webpacker
        • ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ - Sprockets
    • Node.js & Express
      • ๊ธฐ๋ณธ ๊ฐœ๋…
      • npx
    • Programing Language
      • Java
        • JavaDoc์— ๋Œ€ํ•ด
        • invocation์— ๋Œ€ํ•ด์„œ
        • ์–ด๋…ธํ…Œ์ด์…˜
        • ์ถ”์ƒํด๋ž˜์Šค & ์ธํ„ฐํŽ˜์ด์Šค
        • Package
        • ์˜ค๋ฒ„๋กœ๋”ฉ vs ์˜ค๋ฒ„๋ผ์ด๋”ฉ
      • Javascript
        • TCP School ํ›‘์–ด๋ณด๊ธฐ
          • ํƒ€์ž…
          • ํ˜• ๋ณ€ํ™˜
          • ๋ณ€์ˆ˜
          • ์—ฐ์‚ฐ์ž
          • ๋ฐ˜๋ณต๋ฌธ
          • ๋ฐฐ์—ด(array)
          • ํ•จ์ˆ˜
          • ํ•จ์ˆ˜ - ์Šค์ฝ”ํ”„์™€ ํ˜ธ์ด์ŠคํŒ…
          • ํ•จ์ˆ˜ - ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜
          • ํ•จ์ˆ˜ - ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ „์—ญ ํ•จ์ˆ˜
          • ๊ฐ์ฒด
          • ํ”„๋กœํ† ํƒ€์ž…
          • DOM
          • BOM - Window ๊ฐ์ฒด
          • ์ด๋ฒคํŠธ(event)
      • Ruby
        • ๐Ÿ“”ํผํŽ™ํŠธ ๋ฃจ๋น„
    • DB
      • Redis
        • Redis ๊ฐœ์š”
      • Index(์ธ๋ฑ์Šค)?
      • DB Transaction & Lock
      • ๋™์‹œ์„ฑ ์ œ์–ด์— ๊ด€ํ•˜์—ฌ
      • Lock(์ž ๊ธˆ)์ด๋ž€?
      • ActiveRecord lock vs with_lock
      • Table lock vs Row lock
      • WHERE 1=1 ๊ตฌ๋ฌธ์— ๋Œ€ํ•˜์—ฌ
      • COUNT(*) vs COUNT(indexed column)
      • ๐Ÿ“•๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „์ž…๋ฌธ
      • ๐Ÿ“”SQL ์ฒซ๊ฑธ์Œ
      • ๐Ÿ“”๋ชจ๋‘์˜ SQL
    • Design Patterns
      • Observer pattern
      • Flyweight pattern
      • Singleton pattern
    • OOP
      • ๐Ÿ“”์˜ค๋ธŒ์ ํŠธ
        • 6์žฅ ๋ฉ”์‹œ์ง€์™€ ์ธํ„ฐํŽ˜์ด์Šค
      • ํด๋ž˜์Šค๊ฐ„ ๊ด€๊ณ„ ๊ฐ„๋‹จ ์ •๋ฆฌ
    • Regex
    • Collaboration
      • Git
      • Sourcetree
  • DAILY REVIEW
    • 2021
      • August
        • 2021-08-25(Wed)
        • 2021-08-23(Mon)
        • 2021-08-11(Wed)
        • 2021-08-04(Wed)
        • 2021-08-03(Tue)
        • 2021-08-02(Mon)
      • July
        • 2021-07-29(Thu)
        • 2021-07-26(Mon)
        • 2021-07-23(Fri)
        • 2021-07-22(Thu)
        • 2021-07-21(Wed)
        • 2021-07-20(Tue)
        • 2021-07-19(Mon)
        • 2021-07-15(Thu)
        • 2021-07-14(Wed)
        • 2021-07-13(Tue)
        • 2021-07-12(Mon)
      • June
        • 2021-06-05(Sat)
        • 2021-06-04(Fri)
        • 2021-06-03(Thu)
        • 2021-06-02(Wed)
        • 2021-06-01(Tue)
      • May
        • 2021-05-31(Mon)
        • 2021-05-29(Sat)
        • 2021-05-28(Fri)
        • 2021-05-27(Thu)
        • 2021-05-26(Wed)
        • 2021-05-25(Tue)
        • 2021-05-24(Mon)
        • 2021-05-22(Sat)
        • 2021-05-21(Fri)
        • 2021-05-20(Thu)
        • 2021-05-19(Wed)
        • 2021-05-18(Tue)
        • 2021-05-17(Mon)
        • 2021-05-15(Sat)
        • 2021-05-13(Thu)
        • 2021-05-12(Wed)
        • 2021-05-11(Tue)
        • 2021-05-10(Mon)
        • 2021-05-03(Mon)
      • April
        • 2021-04-30(Fri)
        • 2021-04-29(Thu)
        • 2021-04-28(Wed)
        • 2021-04-27(Tue)
        • 2021-04-26(Mon)
        • 2021-04-24(Sat)
        • 2021-04-23(Fri)
        • 2021-04-21(Wed)
        • 2021-04-20(Tue)
        • 2021-04-19(Mon)
        • 2021-04-18(Sun)
        • 2021-04-16(Fri)
        • 2021-04-15(Thu)
        • 2021-04-14(Wed)
        • 2021-04-12(Mon)
        • 2021-04-11(Sun)
        • 2021-04-09(Fri)
        • 2021-04-08(Thu)
        • 2021-04-06(Tue)
        • 2021-04-05(Mon)
        • 2021-04-04(Sun)
        • 2021-04-03(Sat)
        • 2021-04-02(Fri)
        • 2021-04-01(Thu)
      • March
        • 2021-03-29(Mon)
        • 2021-03-28(Sun)
        • 2021-03-26(Fri)
        • 2021-03-25(Thu)
        • 2021-03-24(Wed)
        • 2021-03-23(Tue)
        • 2021-03-22(Mon)
        • 2021-03-21(Sun)
        • 2021-03-20(Sat)
        • 2021-03-17(Wed)
        • 2021-03-16(Tue)
        • 2021-03-15(Mon)
        • 2021-03-12(Fri)
        • 2021-03-11(Thu)
        • 2021-03-10(Wed)
        • 2021-03-09(Tue)
        • 2021-03-08(Mon)
        • 2021-03-07(Sun)
        • 2021-03-05(Fri)
        • 2021-03-03(Wed)
        • 2021-03-02(Tue)
        • 2021-03-01(Mon)
      • Feb
        • 2021-02-26(Fri)
        • 2021-02-25(Thu)
        • 2021-02-24(Wed)
        • 2021-02-23(Tue)
        • 2021-02-22(Mon)
        • 2021-02-19(Fri)
        • 2021-02-18(Thu)
        • 2021-02-17(Wed)
        • 2021-02-16(Tue)
        • 2021-02-15(Mon)
        • 2021-02-14(Sun)
        • 2021-02-13(Sat)
        • 2021-02-12(Fri)
        • 2021-02-10(Wed)
        • 2021-02-09(Tue)
        • 2021-02-08(Mon)
        • 2021-02-07(Sun)
        • 2021-02-05(Fri)
        • 2021-02-03(Wed)
        • 2021-02-02(Tue)
        • 2021-02-01(Mon)
      • Jan
        • 2021-01-29(Fri)
        • 2021-01-28(Thu)
        • 2021-01-27(Wed)
        • 2021-01-26(Tue)
        • 2021-01-25(Mon)
        • 2021-01-23(Sat)
        • 2021-01-22(Fri)
        • 2021-01-20(Wed)
        • 2021-01-19(Tue)
        • 2021-01-18(Mon)
        • 2021-01-12(Tue)
        • 2020-01-11(Mon)
        • 2021-01-08(Fri)
        • 2021-01-07(Thu)
        • 2021-01-06(Wed)
        • 2021-01-05(Tue)
        • 2021-01-04(Mon)
        • 2021-01-01(Fri)
    • 2020
      • Dec
        • 2020-12-30(Thu)
        • 2020-12-25(Fri)
        • 2020-12-24(Thu)
        • 2020-12-23(Wed)
        • 2020-12-22(Tue)
        • 2020-12-21(Mon)
        • 2020-12-18 (Fri)
      • Nov
        • 2020-11-30(Mon)
        • 2020-11-28(Sat)
        • 2020-11-26(Thu)
        • 2020-11-25(Wed)
        • 2020-11-24(Tue)
        • 2020-11-23(Mon)
        • 2020-11-22(Sun)
        • 2020-11-20(Fri)
        • 2020-11-19(Thu)
        • 2020-11-18(Wed)
        • 2020-11-17(Tue)
        • 2020-11-14(Sat)
        • 2020-11-13(Fri)
        • 2020-11-12(Thu)
        • 2020-11-11(Wed)
        • 2020-11-09(Mon)
        • 2020-11-07(Sat)
        • 2020-11-05(Thu)
        • 2020-11-04(Wed)
        • 2020-11-03(Tue)
        • 2020-11-02(Mon)
    • Good article ์•„์นด์ด๋น™
Powered by GitBook
On this page
  • ํŠธ๋žœ์žญ์…˜(Transaction)?
  • ์ •์˜
  • ํŠน์ง•
  • ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ ๋ณ€ํ™”์™€ ํŠธ๋žœ์žญ์…˜ ์ œ์–ด์–ด
  • ๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ๋ฒ•
  • ํŠธ๋žœ์žญ์…˜ vs Lock
  • ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ
  • ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ฃผ์˜ํ•  ์ 
  • ํŠธ๋žœ์žญ์…˜์—์„œ ๊ต์ฐฉ์ƒํƒœ(Deadlock)?
  • ๊ต์ฐฉ์ƒํƒœ์˜ ๋นˆ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•์€?
  • ํŠธ๋žœ์žญ์…˜ ๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ์‹œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€?
  • ์ฐธ๊ณ 

Was this helpful?

  1. I LEARNED
  2. DB

DB Transaction & Lock

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

์ •์˜

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

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

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

ํŠน์ง•

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

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

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

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

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

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

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

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

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

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ ๋ณ€ํ™”์™€ ํŠธ๋žœ์žญ์…˜ ์ œ์–ด์–ด

๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ๋ฒ•

  • ๋ฝํ‚น(locking): ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ์— ์ž ๊ธˆ(lock)์„ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ž ๊ธˆ์ด ํ•ด์ œ(unlock)๋  ๋•Œ๊นŒ์ง€ ์ ‘๊ทผ/์ˆ˜์ •/์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค.

  • ํƒ€์ž„์Šคํƒฌํ”„(timestamp): ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ์ธ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ํŠธ๋žœ์žญ์…˜์— ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ํŠธ๋žœ์žญ์…˜๊ฐ„์˜ ์ ‘๊ทผ ์ˆœ์„œ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•œ๋‹ค.

  • ๋‚™๊ด€์  ์ ํ•ฉ์„ฑ ๊ฒ€์ฆ: ๋จผ์ € ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•  ๋•Œ ์ ํ•ฉ์„ฑ์„ ๊ฒ€์ฆํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ตœ์ข… ๋ฐ˜์˜ํ•œ๋‹ค.

  • ๋‹ค์ค‘ ๋ฒ„์ „ ์ œ์–ด๊ธฐ๋ฒ•:ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ๊ฐ’์„ ์œ ์ง€ํ•œ๋‹ค.

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

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

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

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

์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ์ง„ํ–‰ํ•œ Rails ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง• ์ค‘ '๋…๋ฆฝ์„ฑ'์„ ์ž˜๋ชป ์ดํ•ดํ•œ ๋‚˜๋จธ์ง€ record ๋™์‹œ์ ‘๊ทผ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ActiveRecord::Base transaction ๋ฌธ์„ ์„ ์–ธํ–ˆ์—ˆ๋‹ค๊ฐ€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์—ˆ๋‹ค. Rails๋Š” ๋ณ„๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ๋œ DB์— ๋”ฐ๋ผ default๋กœ ์„ค์ •๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ๋ ˆ๋ฒจ์ด ๋‹ค๋ฅธ๋ฐ, ๋‚ด๊ฐ€ ์ผ๋˜ PostgreSQL์˜ ๊ฒฝ์šฐ read uncommited ๋ ˆ๋ฒจ๋กœ ๊ฒฉ๋ฆฌ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ Record ์ž์ฒด์— lock์„ ๊ฑฐ๋Š” ํ˜•์‹์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.์ง€๋‚˜๊ณ ๋ณด๋‹ˆ ์ด ๋ฐฉ์‹์€ ์ž„์‹œ ๋ฐฉํŽธ์ด์—ˆ์„ ๋ฟ ๋น„์šฉ์ด ๋„ˆ๋ฌด ํฌ๋‹ค! ํ•œ ๋งˆ๋””๋กœ ์ฒ ์ด ์—†์—ˆ๋‹ค..;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

์ฐธ๊ณ 

PreviousIndex(์ธ๋ฑ์Šค)?Next๋™์‹œ์„ฑ ์ œ์–ด์— ๊ด€ํ•˜์—ฌ

Last updated 3 years ago

Was this helpful?

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

์˜ˆ์‹œ
https://mommoo.tistory.com/62
interview question for beginner
์ฝ”๋”ฉํŒฉํ† ๋ฆฌ
์ž ๊ธˆ