CAP μ΄λ‘ μ΄λž€?

두선아 DusunaΒ·2025λ…„ 4μ›” 21일

CAP Theorem

좜처: https://www.ibm.com/kr-ko/topics/cap-theorem

CAP 이둠은 λΆ„μ‚° μ‹œμŠ€ν…œμ΄ C, A, Pλ₯Ό λ™μ‹œμ— λͺ¨λ‘ λ§Œμ‘±μ‹œν‚¬ 수 μ—†μŒμ„ μ„€λͺ…ν•©λ‹ˆλ‹€.

CAP μ •λ¦¬λŠ” λΈŒλ£¨μ–΄μ˜ 정리라고도 λΆˆλ¦¬λŠ”λ°, 2000년에 에릭 A. λΈŒλ£¨μ–΄ κ΅μˆ˜κ°€ λΆ„μ‚° μ»΄ν“¨νŒ…μ— λŒ€ν•œ κ°•μ—°μ—μ„œ 처음으둜 μ œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

C (Consistency) 일관성:

  • λͺ¨λ“  λ…Έλ“œμ— λ™μΌν•œ 데이터λ₯Ό λ™μ‹œμ— λ³΄μ—¬μ€λ‹ˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μ–΄λ–€ λ…Έλ“œμ— μ—°κ²°ν•˜λ“  λ™μ‹œμ— λ™μΌν•œ 데이터λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 데이터가 ν•œ λ…Έλ“œμ— 기둝되면, μ¦‰μ‹œ λͺ¨λ“  λ…Έλ“œλ‘œ μ „λ‹¬λ˜κ±°λ‚˜ λ³΅μ œλ©λ‹ˆλ‹€.

A (Availability) κ°€μš©μ„±:

  • λͺ¨λ“  μš”μ²­μ— λŒ€ν•΄ 응닡이 보μž₯λ©λ‹ˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” λͺ¨λ“  μš”μ²­μ— λŒ€ν•΄ μ˜ˆμ™Έμ—†μ΄ μœ νš¨ν•œ 응닡을 λ°›λŠ”λ‹€.
  • 일뢀 λ…Έλ“œκ°€ λ‹€μš΄λ˜μ–΄λ„ μ‹œμŠ€ν…œμ€ 응닡함

P (Partition Tolerance) λΆ„ν•  ν—ˆμš©λ„:

  • λ„€νŠΈμ›Œν¬ λΆ„ν• (λ…Έλ“œ κ°„ 연결이 λŠμ–΄μ§€κ±°λ‚˜ μ§€μ—°λ˜λŠ” 톡신 μž₯μ• ) μƒν™©μ—μ„œλ„ μ‹œμŠ€ν…œμ€ 계속 λ™μž‘ν•©λ‹ˆλ‹€.
  • λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ PλŠ” 항상 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

CAP μ‘°ν•©

쑰합희생 μš”μ†Œμ„€λͺ…
CPκ°€μš©μ„±λ…Έλ“œ κ°„ 뢄할이 λ°œμƒν•˜λ©΄, 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 일뢀 μš”μ²­μ„ μ°¨λ‹¨ν•˜κ±°λ‚˜ λ…Έλ“œλ₯Ό μ’…λ£Œμ‹œν‚΅λ‹ˆλ‹€.
APμΌκ΄€μ„±νŒŒν‹°μ…˜ λ°œμƒ μ‹œ, λͺ¨λ“  λ…Έλ“œλŠ” 응닡할 수 μžˆμ§€λ§Œ, 일뢀 λ…Έλ“œκ°€ 이전 데이터λ₯Ό λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (볡ꡬ 후에 데이터 λ™κΈ°ν™”λ‘œ 일관성 회볡)
CAλΆ„ν•  ν—ˆμš©λ„λ„€νŠΈμ›Œν¬ 뢄할이 μ—†λŠ” 이상적인 μƒν™©μ—μ„œλ§Œ 유효. 뢄할이 λ°œμƒν•˜λ©΄ 일관성과 κ°€μš©μ„±μ„ 보μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

NoSQL μœ ν˜• & CAP λͺ¨λΈ

NoSQL은 λΆ„μ‚° μ‹œμŠ€ν…œμ— μ ν•©ν•œ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ, 샀딩(Sharding)을 톡해 데이터λ₯Ό μ—¬λŸ¬ λ…Έλ“œμ— λ‚˜λˆ  μ €μž₯ν•˜κ³ , μˆ˜ν‰ ν™•μž₯이 κ°€λŠ₯ν•˜κ²Œ μ„€κ³„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

MongoDB - CP

Consistency + Partition Tolerance

  • 데이터 ν˜•μ‹: BSON
  • 주둜 μ‹€μ‹œκ°„ 처리, 빅데이터 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©
  • 단일 λ§ˆμŠ€ν„° ꡬ쑰 (primary + replica set)
  • 일관성 보μž₯:
    - κΈ°λ³Έ λ…Έλ“œμ—μ„œ μ“°κΈ° μˆ˜ν–‰ / 보쑰 λ…Έλ“œλŠ” 볡제 μ§„ν–‰
    - κΈ°λ³Έ λ…Έλ“œ μž₯μ•  μ‹œ, 보쑰 λ…Έλ“œκ°€ μƒˆ κΈ°λ³Έ λ…Έλ“œλ‘œ 승격되기 μ „κΉŒμ§€ μ“°κΈ° μž‘μ—… 쀑단

단일 λ§ˆμŠ€ν„°λŠ” μ“°κΈ° μž‘μ—…μ„ μˆ˜μ‹ ν•˜λŠ” ν•˜λ‚˜μ˜ primary λ…Έλ“œμž…λ‹ˆλ‹€. 보쑰 λ…Έλ“œμ—μ„œλŠ” κΈ°λ³Έ λ…Έλ“œμ˜ μž‘μ—… 둜그λ₯Ό λ³΅μ œν•˜κ³ , μžμ‹ μ˜ 데이터 μ„ΈνŠΈμ— μ μš©ν•©λ‹ˆλ‹€.

기본으둜 primary λ…Έλ“œμ—μ„œ 데이터λ₯Ό μ½μ§€λ§Œ, 보쑰 λ…Έλ“œμ—μ„œ 읽도둝 μ„€μ •ν•  수 μžˆλ‹€. κΈ°λ³Έ λ…Έλ“œλ₯Ό μžƒμœΌλ©΄, κ°€μž₯ μ΅œμ‹  보쑰 λ…Έλ“œκ°€ μƒˆ κΈ°λ³Έ λ…Έλ“œκ°€ λ©λ‹ˆλ‹€. λͺ¨λ“  보쑰 λ…Έλ“œκ°€ μƒˆ λ§ˆμŠ€ν„° λ…Έλ“œλ₯Ό λ”°λΌμž‘μ„ λ•ŒκΉŒμ§€ μ“°κΈ° μš”μ²­μ„ 막아 일관성을 μœ μ§€ν•œλ‹€.

μΉ΄μ‚°λ“œλΌ - AP

Availability + Partition Tolerance

  • ꡬ쑰: λ§ˆμŠ€ν„°λ¦¬μŠ€ μ•„ν‚€ν…μ²˜
  • κ³ κ°€μš©μ„±: λͺ¨λ“  λ…Έλ“œκ°€ μ“°κΈ°/읽기 κ°€λŠ₯
  • μΌμ‹œμ μΈ 일관성 손상:
    - λ„€νŠΈμ›Œν¬ λΆ„ν•  λ°œμƒ μ‹œμ—λ„ 계속 μž‘λ™ν•˜μ§€λ§Œ, μΌμ‹œμ μΈ 뢈일치 κ°€λŠ₯
    - 볡ꡬ ν›„ 데이터 λ™κΈ°ν™”λ‘œ 뢈일치 ν•΄κ²°

μ•„νŒŒμΉ˜ μΉ΄μ‚°λ“œλΌλŠ” λ§ˆμŠ€ν„° λ…Έλ“œκ°€ μ—†μœΌλ©°, λ§ˆμŠ€ν„°λ¦¬ μ•„ν‚€ν…μ²˜ ꡬ쑰λ₯Ό μ‚¬μš©ν•΄ λ‹€μˆ˜μ˜ μž₯μ•  지점이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

λͺ¨λ“  λ…Έλ“œκ°€ μ§€μ†μ μœΌλ‘œ μ‚¬μš©κ°€λŠ₯ν•˜λ©°, λΆˆμΌμΉ˜λŠ” μ΅œλŒ€ν•œ λΉ λ₯΄κ²Œ μ‘°μ •ν•΄ 일관성을 μ œκ³΅ν•©λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ 뢄할이 λ°œμƒν•  μ‹œ, 데이터 일관성이 μ†μƒλ˜κ³  λΆˆμΌμΉ˜λŠ” λΉ λ₯΄κ²Œ ν•΄κ²°, λ…Έλ“œκ°€ ν”Όμ–΄ λ…Έλ“œλ₯Ό λ”°λΌκ°€λŠ” 볡ꡬ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. κ°€μš©μ„±μ΄ 보μž₯λ˜μ–΄ κ³ μ„±λŠ₯ μ‹œμŠ€ν…œ ꡬ좕에 도움이 λ©λ‹ˆλ‹€.

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€

  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 자체 λ°μ΄ν„°λ² μ΄μŠ€μ™€ 기술 μŠ€νƒμ„ 가짐
  • μ„œλΉ„μŠ€ κ°„ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 톡신
  • ν΄λΌμš°λ“œ/μ˜¨ν”„λ ˆλ―ΈμŠ€/λ©€ν‹° ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œλ„ μœ μ—°ν•˜κ²Œ μ‹€ν–‰ κ°€λŠ₯

독립성과 ν™•μž₯성을 κ·ΉλŒ€ν™”ν•  수 μžˆλŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.


μš”μ•½

  • CAP μ •λ¦¬λŠ” λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ 일관성, κ°€μš©μ„±, λΆ„ν•  ν—ˆμš©μ„± 쀑 두 개만 보μž₯ κ°€λŠ₯ν•˜λ‹€.
  • NoSQL은 λΆ„μ‚°, 샀딩, μˆ˜ν‰ ν™•μž₯으둜 λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ— μ ν•©ν•˜λ‹€.
  • MongoDBλŠ” CP, CassandraλŠ” AP이닀.
  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 독립적인 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό ν™œμš©ν•΄ λΆ„μ‚° ꡬ쑰λ₯Ό μœ ν˜„ν•˜κ²Œ κ΅¬ν˜„ν•œλ‹€.
profile
μ•ˆλ…•ν•˜μ„Έμš”.

0개의 λŒ“κΈ€