λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Kafka

3. 데이터 일관성 μœ μ§€ (1)

by μ Όμ Ό39 2026. 3. 23.

1. λΆ„μ‚° νŠΈλžœμž­μ…˜μ˜ κ°œμš”

  • μ •μ˜: μ—¬λŸ¬ 개의 λ…λ¦½λœ μ‹œμŠ€ν…œμ΄λ‚˜ DB에 걸쳐 λ°œμƒν•˜λŠ” νŠΈλžœμž­μ…˜μ„ ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ λ¬Άμ–΄ μΌκ΄€λ˜κ²Œ κ΄€λ¦¬ν•˜λŠ” 방법
  • 핡심 보μž₯: λͺ¨λ“  μ‹œμŠ€ν…œμ΄ μ„±κ³΅ν•˜κ±°λ‚˜(All), μ•„λ‹ˆλ©΄ λͺ¨λ‘ μ‹€νŒ¨(Nothing)ν•˜λ„λ‘ 보μž₯ν•˜μ—¬ 데이터 격차λ₯Ό 방지함.
  • ν•„μš”μ„±: μ„œλΉ„μŠ€κ°€ κΈ°λŠ₯λ³„λ‘œ μͺΌκ°œμ§„ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(MSA)μ—μ„œλŠ” 각 μ„œλΉ„μŠ€μ˜ DBκ°€ λ…λ¦½μ μ΄λ―€λ‘œ, μ„œλΉ„μŠ€ κ°„ 데이터 정합성을 λ§žμΆ”κΈ° μœ„ν•΄ ν•„μˆ˜μ μž„.

2. μ£Όμš” κ°œλ… 및 원칙

2.1 νŠΈλžœμž­μ…˜μ˜ κΈ°λ³Έ 속성 (ACID)

λΆ„μ‚° ν™˜κ²½μ—μ„œλ„ λ°˜λ“œμ‹œ μ§€μΌœμ Έμ•Ό ν•˜λŠ” 4κ°€μ§€ 속성

  • μ›μžμ„± (Atomicity): νŠΈλžœμž­μ…˜ λ‚΄ μž‘μ—…μ€ 'λͺ¨λ‘ 성곡' μ•„λ‹ˆλ©΄ 'μ „λΆ€ μ‹€νŒ¨'ν•΄μ•Ό 함. 쀑간 λ‹¨κ³„μ—μ„œ λ©ˆμΆ”λŠ” 일은 μ—†μŒ.
  • 일관성 (Consistency): μ‹€ν–‰ μ „ν›„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλŠ” 항상 무결성 μ œμ•½ 쑰건을 λ§Œμ‘±ν•˜λŠ” μ˜¬λ°”λ₯Έ μƒνƒœμ—¬μ•Ό 함.
  • 격리성 (Isolation): λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ΄ μ„œλ‘œμ˜ 쀑간 과정에 κ°„μ„­ν•˜μ§€ λͺ»ν•˜λ„둝 차단함.
  • 지속성 (Durability): μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ νŠΈλžœμž­μ…˜ κ²°κ³ΌλŠ” μ‹œμŠ€ν…œ μž₯μ• κ°€ λ°œμƒν•˜λ”λΌλ„ 영ꡬ적으둜 보쑴됨.

2.2 2PC (Two-Phase Commit)

ν‘œμ€€μ μΈ λΆ„μ‚° νŠΈλžœμž­μ…˜ ν”„λ‘œν† μ½œλ‘œ, 쀑앙 μ‘°μ •μž(Coordinator)κ°€ νŠΈλžœμž­μ…˜μ„ 관리함.

  1. μ€€λΉ„ 단계 (Prepare Phase): λ§ˆμŠ€ν„° λ…Έλ“œκ°€ λͺ¨λ“  μ°Έμ—¬ λ…Έλ“œμ—κ²Œ "컀밋 μ€€λΉ„λλ‹ˆ?"라고 물어보고 응닡을 κΈ°λ‹€λ¦Ό.
  2. 컀밋 단계 (Commit Phase): λͺ¨λ“  λ…Έλ“œκ°€ "OK"ν•˜λ©΄ 컀밋을 μ§€μ‹œν•˜κ³ , ν•˜λ‚˜λΌλ„ κ±°μ ˆν•˜λ©΄ 전체 둀백을 μ§€μ‹œν•¨.
    πŸ’‘ μΆ”κ°€ μ„€λͺ…: κ°•λ ₯ν•œ 일관성을 보μž₯ν•˜μ§€λ§Œ, ν•œ λ…Έλ“œλΌλ„ 응닡이 λŠ¦μ–΄μ§€λ©΄ 전체 μ‹œμŠ€ν…œμ΄ λŒ€κΈ° μƒνƒœ(Blocking)에 λΉ μ§€λŠ” 단점이 μžˆμ–΄ λŒ€κ·œλͺ¨ νŠΈλž˜ν”½ ν™˜κ²½μ—μ„œλŠ” μ‹ μ€‘νžˆ μ‚¬μš©ν•΄μ•Ό 함.

2.3 사가 νŒ¨ν„΄ (Saga Pattern)

νŠΈλžœμž­μ…˜μ„ μ—¬λŸ¬ λ‹¨κ³„μ˜ 둜컬 νŠΈλžœμž­μ…˜μœΌλ‘œ λ‚˜λˆ„μ–΄ 순차적으둜 μ‹€ν–‰ν•˜λŠ” 방식

  • νŠΉμ§•: 각 λ‹¨κ³„λŠ” λ…λ¦½μ μœΌλ‘œ 컀밋됨.
  • 보상 νŠΈλžœμž­μ…˜ (Compensating Transaction): 쀑간에 μ‹€νŒ¨ν•˜λ©΄ 이미 μ»€λ°‹λœ 이전 단계듀을 μ·¨μ†Œν•˜κΈ° μœ„ν•΄ λ°˜λŒ€λ˜λŠ” μž‘μ—…(예: 결제 μ·¨μ†Œ)을 μ‹€ν–‰ν•˜μ—¬ 원상볡ꡬ함.
    • μ˜ˆμ‹œ: μ£Όλ¬Έ 생성 → 결제 처리 → 재고 κ°μ†Œ, (μ‹€νŒ¨ μ‹œ) → 결제 μ·¨μ†Œ → μ£Όλ¬Έ μ·¨μ†Œ

2.4 이벀트 μ†Œμ‹± (Event Sourcing)

  • 방식: λ°μ΄ν„°μ˜ μ΅œμ’… μƒνƒœλ§Œ μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚¨ λͺ¨λ“  '이벀트'λ₯Ό 순차적으둜 기둝함.
  • μž₯점: 과거의 λͺ¨λ“  λ³€κ²½ 이λ ₯을 좔적할 수 있으며, 이벀트λ₯Ό μ²˜μŒλΆ€ν„° λ‹€μ‹œ μž¬μƒ(Replay)ν•˜μ—¬ μ–Έμ œλ“  ν˜„μž¬ μƒνƒœλ₯Ό λ³΅κ΅¬ν•˜κ±°λ‚˜ νŠΉμ • μ‹œμ μ˜ μƒνƒœλ₯Ό μž¬ν˜„ν•  수 있음.

3. λΆ„μ‚° νŠΈλžœμž­μ…˜μ˜ μž₯점

  • 데이터 일관성 보μž₯: μ—¬λŸ¬ 데이터 μ†ŒμŠ€μ— 걸쳐 데이터가 μ–΄κΈ‹λ‚˜μ§€ μ•Šλ„λ‘ μ™„λ²½ν•œ μƒνƒœ 동기화λ₯Ό μœ μ§€ν•¨.
  • ν™•μž₯μ„±: μ‹œμŠ€ν…œμ΄ λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•˜λ©΄μ„œλ„ ν•„μš”ν•  λ•Œλ§Œ ν˜‘λ ₯ν•˜μ—¬ 일관성을 μœ μ§€ν•˜λ―€λ‘œ, 전체 μ‹œμŠ€ν…œ 규λͺ¨λ₯Ό ν‚€μš°κΈ°μ— μš©μ΄ν•¨.
  • μ‹ λ’°μ„±: λΆ„μ‚° ν™˜κ²½μ—μ„œλ„ ACID 속성을 μœ μ§€ν•¨μœΌλ‘œμ¨ μ‹œμŠ€ν…œ μ „λ°˜μ˜ 데이터 무결성을 μ‹ λ’°ν•  수 있게 함.
  • 볡ꡬ κ°€λŠ₯μ„±: μ‹€νŒ¨ μ§€μ μ—μ„œ λͺ…ν™•ν•œ λ‘€λ°± λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•˜μ—¬ 예기치 λͺ»ν•œ 였λ₯˜μ—λ„ μ‹œμŠ€ν…œ μ•ˆμ •μ„±μ„ μ§€ν‚΄.
    • 졜근 λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ—μ„œλŠ” μ„±λŠ₯을 μœ„ν•΄ 2PCλ³΄λ‹€λŠ” 사가 νŒ¨ν„΄μ΄λ‚˜ 이벀트 μ†Œμ‹±μ„ ν™œμš©ν•œ 'μ΅œμ’…μ  일관성(Eventual Consistency)' λͺ¨λΈμ„ 더 많이 μ±„νƒν•˜λŠ” 좔세라고 함