일관성 사고
Source: Dev.to
데이터 문제
오늘은 데이터 문제에 대해 논의해 보겠습니다. 데이터가 언제나 100 % 정확해야 할까요? 대부분의 사람들은 그래야 한다고 말합니다. 데이터가 정확해야만 올바르다고 생각하죠. 하지만 대규모 분산 시스템에서는 이 질문이 함정이 될 수 있습니다. 이제 왜 그런지 분석해 보겠습니다.
주장
Statement: “데이터는 모든 사람에게 실시간으로 항상 업데이트되어야 한다”.
대규모 시스템에서는 이것이 재앙이 됩니다. 성능이 저하되고 비용이 증가하며 확장이 어려워지기 때문입니다.
일관성에 대한 인식
Consistency(일관성)는 절대적인 값일 필요가 없습니다; 운영 비용, 속도, 사용자 경험, 데이터 신뢰성 사이의 트레이드오프입니다.
Consistency는 시스템 내 여러 위치에서 특정 시점에 데이터가 얼마나 동기화되어 있는지를 의미합니다. “데이터가 정확한가?” 라고 묻는 대신 다음과 같은 일관성 모델을 고려해야 합니다:
Strong Consistency
- 모든 읽기 요청이 항상 최신 데이터를 반환합니다.
- 사용 사례: 결제, 은행, 주식, 재고 관리.
Read‑After‑Write Consistency
- 사용자가 방금 업데이트한 데이터를 즉시 볼 수 있습니다.
- 사용 사례: 프로필 업데이트, 게시물 작성, 개인 설정.
Monotonic Reads
- “시간을 거슬러 올라가는” 데이터를 절대 보지 않으며, 과거에 보였던 메시지가 사라졌다가 다시 나타나는 현상이 없습니다.
- 사용 사례: 채팅, 알림, 타임라인.
Eventual Consistency
- 모든 위치가 결국에는 동기화되지만, 점진적으로 이루어집니다.
- 사용 사례: 검색, 피드, 분석, 캐시, 추천 시스템.
실제 적용
프로필 이름을 업데이트할 때 하나의 행동을 일관성 요구가 다른 여러 레이어로 분리할 수 있습니다 – 이것이 올바른 사고 방식입니다.
Happy reading and happy coding!