464. BASE 속성과 결과적 일관성 (Eventual Consistency)
⚠️ 이 문서는 "내 통장 잔고와 은행 서버의 잔고는 0.001초의 오차도 없이 무조건 똑같아야 한다"는 깐깐한 ACID(440번 문서)의 규칙을 과감히 깨버리고, **"지금 당장은 좀 틀려도 되니까, 나중에 언젠가 맞춰지기만 하면 서버가 절대 안 죽고 엄청 빠르기만 하면 돼!"라는 NoSQL의 자유분방한 철학인 'BASE'**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: RDBMS가 지키는 'ACID'의 반대 개념이다. NoSQL(Cassandra, DynamoDB 등)이 대용량 분산 환경에서 살아남기 위해 채택한 느슨한 데이터 정합성 규칙이다.
- BASE의 의미: Basically Available(기본적으로 항상 켜져 있음), Soft state(상태가 유연하게 변할 수 있음), Eventual consistency(결국엔 일관성이 맞춰짐)의 약자다.
- 가치: 데이터가 100% 맞지 않더라도 서비스가 죽는 것보단 낫다는 철학(AP 시스템)으로, 수억 명의 트래픽을 처리하는 현대 글로벌 웹 서비스의 근간이 되었다.
Ⅰ. 개요: 인스타그램의 좋아요 개수 (Context & Necessity)
내가 인스타그램에서 어떤 게시물에 '좋아요'를 눌렀다.
- 한국 서버의 '좋아요 개수'는 즉시 100개가 되었다.
- 0.1초 뒤, 미국에 있는 친구가 내 게시물의 '좋아요 개수'를 봤다.
- 미국 서버는 아직 데이터를 못 받아서 99개로 보인다.
만약 **ACID(RDBMS)**였다면? 미국 서버가 100개로 업데이트될 때까지 내 스마트폰 화면을 멈춰(Lock) 세우고 로딩 창을 돌렸을 것이다. 하지만 **BASE(NoSQL)**는 쿨하다. "미국 친구가 99개로 좀 보면 어때? 세상이 망하는 것도 아닌데! 그냥 멈추지 말고 빨리빨리 보여줘!"
이처럼 찰나의 순간에 생기는 데이터 불일치를 기꺼이 용인하는 것이 BASE 철학의 핵심이다.
📢 섹션 요약 비유: ACID가 **'모든 사람이 똑같은 숫자를 부를 때까지 절대 문을 안 열어주는 깐깐한 선생님'**이라면, BASE는 **'일단 다 밖으로 내보내고, 틀린 숫자를 부르는 애들은 나중에 뛰어가서 몰래 숫자를 고쳐주는 쿨한 선생님'**입니다.
Ⅱ. BASE의 3가지 핵심 속성 ★
정보처리기사나 시스템 아키텍트 면접에서 단골로 묻는 개념이다.
1. Basically Available (기본적으로 가용함)
- "어떤 일이 있어도(서버 몇 대가 죽어도) 손님에게 에러 화면(500)을 보여주지 마라."
- 시스템은 기본적으로 항상 응답해야 한다. 정답이 아니면 옛날 데이터라도, 혹은 "지금은 알 수 없음"이라는 대안(Fallback)이라도 보여줘야 한다.
2. Soft State (소프트 상태)
- "데이터베이스의 상태는 외부의 개입 없이도 지 혼자 바뀔 수 있다."
- 아까 인스타그램 미국 서버는 99개였다. 그런데 3초 뒤에 다시 새로고침 하니까 갑자기 100개로 바뀌어 있다!
- 미국 친구가 좋아요를 누른 적이 없는데도, 백그라운드에서 한국 서버와 동기화가 일어나면서 상태가 부드럽게(Soft) 변한 것이다.
3. Eventual Consistency (결과적 일관성) ★
- "지금 당장은 한국과 미국의 좋아요 개수가 다를 수 있지만, 결국(Eventual) 어느 순간이 되면 모든 서버의 데이터가 100개로 똑같이 맞춰질 것이다."
- 분산 시스템의 데이터 동기화 문제를 해결하는 궁극의 타협안이다.
Ⅲ. 실무 팁: Eventual Consistency를 다루는 개발자의 자세
백엔드 개발자가 NoSQL(BASE)을 쓸 때는 ACID 시절의 고정관념을 버려야 한다.
- 상황: 내가 회원 가입(
INSERT)을 하고, 바로 내 정보 조회(SELECT) 쿼리를 날렸다. - 결과:
[회원 정보가 없습니다]에러가 뜬다. - 이유: 내가 Insert 한 마스터 서버의 데이터가, 내가 Select 한 읽기 전용 슬레이브 서버로 아직 복사(Replication)가 안 되었기 때문이다. (0.5초의 지연)
해결책:
"방금 내가 쓴 데이터는 무조건 100% 읽을 수 있게 해줘!"라는 비즈니스 요구사항이 있다면, 데이터베이스 설정에서 Read-Your-Writes 일관성을 켜거나 강력한 Quorum(다수결) 읽기 모드로 옵션을 조작해야 한다. (물론 그만큼 속도는 느려진다.)
┌──────────────────────────────────────────────────────────────┐
│ ACID (RDBMS) vs BASE (NoSQL) 철학 비교 시각화 │
├──────────────────────────────────────────────────────────────┤
│ │
│ [ 🛡️ ACID (완벽한 일관성) ] │
│ 나: "입금 완료(100원)!" │
│ 친구: "나 잔액 조회할래" ──▶ (대기 ⏳) ──▶ (대기 ⏳) ──▶ "100원!" │
│ ★ 특징: 미국 서버에 100원 동기화가 끝날 때까지 친구를 무한정 기다리게 함. │
│ │
│ [ 🌊 BASE (결과적 일관성) ] │
│ 나: "입금 완료(100원)!" │
│ 친구: "나 잔액 조회할래" ──▶ "0원!" (일단 옛날 데이터라도 1초 만에 줌) │
│ ... (3초 뒤) ... │
│ 친구: "다시 조회할래" ──▶ "100원!" (결국엔 맞춰짐 - Eventual) │
│ ★ 특징: 거짓말을 할지언정, 절대 손님을 기다리게 하지는 않는다! │
└──────────────────────────────────────────────────────────────┘
Ⅳ. 결론
"은행은 ACID로 짓고, SNS는 BASE로 지어라." BASE는 데이터베이스 역사상 가장 과감한 타협이다. 완벽한 일관성(Consistency)이라는 무거운 족쇄를 풀어 던진 덕분에, 아마존 DynamoDB나 카산드라(Cassandra) 같은 NoSQL들은 전 세계 트래픽을 무한대로 처리할 수 있는 날개를 달게 되었다. 아키텍트는 비즈니스의 성격을 분석하여, "결제가 꼬이는 0.01%의 확률을 감수하더라도 서버가 절대 죽지 않는 것(BASE)"이 중요한지, 아니면 "서버가 멈추는 한이 있어도 단 1원의 오차도 허용할 수 없는지(ACID)"를 결정하고 올바른 DB를 선택해야 한다.
📌 관련 개념 맵
- 대척점 이론: ACID (원자성, 일관성, 고립성, 영속성 - 440번 문서)
- 상위 이론: CAP 정리 (463번 문서 - BASE는 보통 AP 시스템을 선택한 결과물임)
- 관련 데이터베이스: Cassandra, DynamoDB, MongoDB, CouchDB
- 관련 장애 복구: Hinted Handoff, Anti-Entropy (376번 문서 - Eventual Consistency를 맞추는 실제 복구 기술)
👶 어린이를 위한 3줄 비유 설명
- ACID는 친구들 5명이 다 같이 모여서 "정답은 3번!"이라고 완벽하게 합의가 끝나야만 선생님께 대답하는 아주 모범적이지만 느린 조별 과제예요.
- BASE는 일단 목소리 큰 1명이 "3번!"이라고 빨리 대답해 버리고, 혹시 틀렸으면 나중에 "아, 사실 4번이었어요!" 하고 뻔뻔하게 고치는 쿨한 조별 과제예요.
- 선생님이 정답을 늦게 받아서 화내는 것보다, 일단 빨리 아무 대답이라도 듣고 싶어 하실 때 쓰는 아주 빠르고 효율적인 방법이랍니다!