CAP μ •λ¦¬λž€?

λΆ„μ‚° μ‹œμŠ€ν…œμ€ μ›ν•˜λŠ” μ„Έ κ°€μ§€ νŠΉμ„±, 일관성, κ°€μš©μ„±, λΆ„ν•­ λ‚΄μ„± 쀑 두 κ°€μ§€λ§Œ μ œκ³΅ν•  수 μžˆμŒμ„ 증λͺ…ν•œ 정리

일관성(Consistency)

  • μ–΄λ–€ λ…Έλ“œμ— μ—°κ²°λ˜μ—ˆλŠ”μ§€μ™€ λ¬΄κ΄€ν•˜κ²Œ λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈκ°€ λ™μ‹œμ— 동일 데이터λ₯Ό λ³Ό 수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€.
  • 데이터가 ν•˜λ‚˜μ˜ λ…Έλ“œμ— 기둝될 λ•Œλ§ˆλ‹€ 이 λ°μ΄ν„°λŠ” μ“°κΈ°κ°€ β€˜μ„±κ³΅β€™μœΌλ‘œ κ°„μ£Όλ˜κΈ° 전에 μ‹œμŠ€ν…œμ˜ λ‹€λ₯Έ λͺ¨λ“  λ…Έλ“œλ‘œ μ¦‰μ‹œ μ „λ‹¬λ˜κ±°λ‚˜ λ³΅μ œλ˜μ–΄μ•Ό ν•œλ‹€. κ°€μš©μ„±(Availability)
  • ν•˜λ‚˜ μ΄μƒμ˜ λ…Έλ“œκ°€ μž‘λ™ μ€‘μ§€λœ κ²½μš°μ—λ„ 데이터λ₯Ό μš”μ²­ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 응닡을 λ°›μŒμ„ μ˜λ―Έν•œλ‹€.
  • λΆ„μ‚° μ‹œμŠ€ν…œμ˜ λͺ¨λ“  μž‘μ—… 쀑인 λ…Έλ“œλŠ” μ˜ˆμ™Έ 없이 λͺ¨λ“  μš”μ²­μ— λŒ€ν•΄ μœ νš¨ν•œ 응닡을 λ¦¬ν„΄ν•œλ‹€. λΆ„ν•  λ‚΄μ„±(Partition tolerance)
  • λΆ„ν• (Partition)μ΄λž€ λΆ„μ‚° μ‹œμŠ€ν…œ λ‚΄μ˜ λ„€νŠΈμ›Œν¬ λ‹¨μ ˆ, 즉 두 λ…Έλ“œ κ°„μ˜ 연결이 μœ μ‹€λ˜κ±°λ‚˜ μΌμ‹œμ μœΌλ‘œ μ§€μ—°λœ μƒνƒœλ₯Ό λ§ν•œλ‹€.
  • λΆ„ν•  λ‚΄μ„±(Partition Tolerance)μ΄λž€ μ‹œμŠ€ν…œμ˜ λ…Έλ“œ 간에 λ‹€μˆ˜μ˜ λ„€νŠΈμ›Œν¬ λ‹¨μ ˆμ—λ„ λΆˆκ΅¬ν•˜κ³  ν΄λŸ¬μŠ€ν„°κ°€ κ³„μ†ν•΄μ„œ μž‘λ™ν•¨μ„ μ˜λ―Έν•œλ‹€.

CAP 와 NoSQL

NoSQL DBλŠ” λΆ„μ‚° λ„€νŠΈμ›Œν¬ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ν•©ν•˜λ‹€. 수직 ν™•μž₯이 κ°€λŠ₯ν•œ RDB와 달리 NoSQL DB μ—μ„œλŠ” μˆ˜ν‰ ν™•μž₯이 κ°€λŠ₯ν•˜κ³  섀계에 따라 λΆ„μ‚°λœλ‹€. 즉, μ—¬λŸ¬ 개의 μƒν˜Έ μ—°κ²°λœ λ…Έλ“œλ‘œ κ΅¬μ„±λœ μ„±μž₯ λ„€νŠΈμ›Œν¬μ—μ„œ λΉ λ₯΄κ²Œ ν™•μž₯ν•  수 μžˆλ‹€.

Info

NoSQL DBλŠ” CAP 쀑 두 개의 νŠΉμ„±μ„ 기반으둜 λΆ„λ₯˜λœλ‹€. CP 데이터 베이슀

  • κ°€μš©μ„±μ„ ν¬μƒμ‹œν‚€λ©΄μ„œ 일관성과 λΆ„ν•  내성을 제곡
  • 두 λ…Έλ“œ 간에 뢄할이 λ°œμƒν•˜λ©΄, μ‹œμŠ€ν…œμ€ 뢄할이 해결될 λ•ŒκΉŒμ§€ μΌκ΄€λ˜μ§€ μ•Šμ€ λ…Έλ“œλ₯Ό μ’…λ£Œ(즉, μ‚¬μš© λΆˆκ°€λŠ₯ν•˜κ²Œ)ν•΄μ•Ό ν•œλ‹€. AP 데이터 베이슀
  • AP λ°μ΄ν„°λ² μ΄μŠ€λŠ” 일관성을 ν¬μƒμ‹œν‚€λ©΄μ„œ κ°€μš©μ„±κ³Ό λΆ„ν•  내성을 제곡
  • 뢄할이 λ°œμƒν–ˆμ„ λ•Œ λͺ¨λ“  λ…Έλ“œκ°€ μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€λ˜μ§€λ§Œ 잘λͺ»λœ 뢄할에 놓인 λ…Έλ“œλŠ” λ‹€λ₯Έ λ…Έλ“œλ³΄λ‹€ 였래된 λ²„μ „μ˜ 데이터λ₯Ό 리턴할 수 μžˆλ‹€.
  • 뢄할이 ν•΄κ²°λ˜λ©΄ AP λ°μ΄ν„°λ² μ΄μŠ€λŠ” 일반적으둜 λ…Έλ“œλ₯Ό μž¬λ™κΈ°ν™”ν•˜μ—¬ μ‹œμŠ€ν…œμ˜ λͺ¨λ“  뢈일치λ₯Ό λ³΅κ΅¬ν•œλ‹€. CA λ°μ΄ν„°λ² μ΄μŠ€
  • λͺ¨λ“  λ…Έλ“œμ—μ„œ 일관성과 κ°€μš©μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œμ— μžˆλŠ” 두 λ…Έλ“œ 사이에 뢄할이 있으면 일관성과 κ°€μš©μ„±μ„ μ œκ³΅ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 내결함성을 μ œκ³΅ν•  수 μ—†λ‹€.
  • λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œλŠ” 뢄할을 ν”Όν•  수 μ—†μœΌλ―€λ‘œ CA λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ‘΄μž¬ν•  수 μ—†λ‹€.

CAP 와 MongoDB

  • MongoDBλŠ” CP 데이터 μ €μž₯μ†Œμ΄λ©° κ°€μš©μ„±μ„ ν¬μƒμ‹œν‚€λ©΄μ„œ 일관성을 μœ μ§€ν•˜μ—¬ λ„€νŠΈμ›Œν¬ 뢄할을 ν•΄κ²°ν•œλ‹€.
  • MongoDBλŠ”Β λ‹¨μΌ λ§ˆμŠ€ν„°Β μ‹œμŠ€ν…œμœΌλ‘œ, 각 볡제본 μ„ΈνŠΈμ—λŠ” λͺ¨λ“  μ“°κΈ° μ‘°μž‘μ„ μˆ˜μ‹ ν•˜λŠ” ν•˜λ‚˜μ˜ κΈ°λ³Έ λ…Έλ“œλ§Œ μžˆμ„ 수 μžˆλ‹€.
  • λ™μΌν•œ 볡제본 μ„ΈνŠΈμ˜ λ‹€λ₯Έ λͺ¨λ“  λ…Έλ“œλŠ” 1μ°¨ λ…Έλ“œμ˜ μ‘°μž‘ 둜그λ₯Ό λ³΅μ œν•˜μ—¬ 자체 데이터 μ„ΈνŠΈμ— μ μš©ν•˜λŠ” 2μ°¨ λ…Έλ“œμ΄λ‹€.
  • 기본적으둜 ν΄λΌμ΄μ–ΈνŠΈλŠ” 1μ°¨ λ…Έλ“œμ—μ„œ μ½μ§€λ§Œ, μ΄λŠ” 2μ°¨ λ…Έλ“œμ—μ„œλ„ 읽을 수 μžˆλ„λ‘ ν—ˆμš©ν•˜λŠ”Β μ½κΈ° ν™˜κ²½ 섀정을 μ§€μ •ν•  μˆ˜λ„ μžˆλ‹€.
  • 1μ°¨ λ…Έλ“œκ°€ μ‚¬μš© λΆˆκ°€λŠ₯ν•˜κ²Œ 되면, κ°€μž₯ 졜근의 μ‘°μž‘ λ‘œκ·Έκ°€ μžˆλŠ” 2μ°¨ λ…Έλ“œκ°€ μƒˆ 1μ°¨ λ…Έλ“œλ‘œ μ„ μ •λœλ‹€.
  • λ‹€λ₯Έ λͺ¨λ“  2μ°¨ λ…Έλ“œκ°€ μƒˆ λ§ˆμŠ€ν„°λ₯Ό λ”°λΌμž‘μœΌλ©΄ ν΄λŸ¬μŠ€ν„°λ₯Ό λ‹€μ‹œ μ‚¬μš©ν•  수 있게 λœλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ 이 간격 λ™μ•ˆ μ“°κΈ° μš”μ²­μ„ ν•  수 μ—†μœΌλ―€λ‘œ, λ°μ΄ν„°λŠ” 전체 λ„€νŠΈμ›Œν¬μ—μ„œ 일관성을 μœ μ§€ν•©λ‹ˆλ‹€.

CAP 와 마이크둜 μ„œλΉ„μŠ€

  • CAP 정리λ₯Ό μ΄ν•΄ν•˜λ©΄ μ—¬λŸ¬ μœ„μΉ˜μ—μ„œ μ‹€ν–‰ 쀑인 마이크둜 μ„œλΉ„μŠ€ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 섀계할 λ•Œ μ΅œμƒμ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ„ νƒν•˜λŠ” 데 도움이 λœλ‹€.
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 데이터 λͺ¨λΈμ„ λΉ λ₯΄κ²Œ λ°˜λ³΅ν•˜κ³  μˆ˜ν‰μœΌλ‘œ ν™•μž₯ν•˜λŠ” κΈ°λŠ₯이 ν•„μˆ˜μ΄μ§€λ§Œ, ꢁ극적 일관성을 ν—ˆμš©ν•  수 μžˆλŠ” 경우 Cassandra λ˜λŠ”Β Apache CouchDB와 같은 AP λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ‚¬μš©μž μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘±μ‹œν‚€κ³  배치λ₯Ό κ°„μ†Œν™”ν•  수 μžˆλ‹€.
    • λ°˜λŒ€λ‘œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ eCommerce μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ μ§€λΆˆ μ„œλΉ„μŠ€μ—μ„œμ™€ 같이 데이터 일관성에 크게 μ˜μ‘΄ν•˜λŠ” κ²½μš°μ—λŠ” PostgreSQL λ“±μ˜ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 선택할 수 μžˆλ‹€.

IBM - CAP A Beginner’s Guide to CAP Theorem for Data Engineering