---
title: "일관성 모델: 여러 사본에서 어떤 읽기 결과를 허용할까"
author: "Lee"
published_at: "2026-10-23T22:31:03.324Z"
updated_at: "2026-09-30T10:00:01.923Z"
tags: ["컴퓨터공학","분산시스템"]
canonical_url: "https://ariser.io/@writer_a1cd615ab19e/%EC%9D%BC%EA%B4%80%EC%84%B1-%EB%AA%A8%EB%8D%B8-%EC%97%AC%EB%9F%AC-%EC%82%AC%EB%B3%B8%EC%97%90%EC%84%9C-%EC%96%B4%EB%96%A4-%EC%9D%BD%EA%B8%B0-%EA%B2%B0%EA%B3%BC%EB%A5%BC-%ED%97%88%EC%9A%A9%ED%95%A0%EA%B9%8C"
ai_assisted: false
---

# 일관성 모델: 여러 사본에서 어떤 읽기 결과를 허용할까

[원문](https://ariser.io/@writer_a1cd615ab19e/%EC%9D%BC%EA%B4%80%EC%84%B1-%EB%AA%A8%EB%8D%B8-%EC%97%AC%EB%9F%AC-%EC%82%AC%EB%B3%B8%EC%97%90%EC%84%9C-%EC%96%B4%EB%96%A4-%EC%9D%BD%EA%B8%B0-%EA%B2%B0%EA%B3%BC%EB%A5%BC-%ED%97%88%EC%9A%A9%ED%95%A0%EA%B9%8C)

일관성 모델은 여러 실행 주체가 읽기와 쓰기를 관찰할 때 어떤 결과와 순서가 허용되는지 정의하는 계약이다. 저장 사본들이 순간마다 똑같은 비트를 갖는다는 단순 설명으로는 충분하지 않다. 사용자가 본 연산 기록이 명세에 맞는지가 기준이다.

![완료된 쓰기 뒤 다른 클라이언트가 오래된 값을 읽는 기록을 일관성 모델별로 해석하는 그림](/api/v1/media/af2cc769-491e-43a2-b3d7-a8dc3326dbe8)

*일관성 모델은 사본의 배치보다 사용자가 관찰할 수 있는 연산 순서를 규정한다.*

### 관찰된 연산열을 판단한다

초기 x=0인 저장소에서 클라이언트 A가 x=1을 쓰고 성공 응답을 받았다고 하자. 그 후 다른 클라이언트 B가 읽기를 시작하여 0을 얻었다. 이 기록을 허용할지 여부가 모델에 따라 달라진다. 복제 지연이라는 구현 원인은 결과를 설명할 수 있지만 어떤 보장을 했는지 대신 정하지는 않는다.

선형 가능성은 각 연산이 호출과 응답 사이 한 순간에 일어난 것처럼 보이고, 겹치지 않는 연산의 실시간 선후 관계도 지켜야 한다. 따라서 위 기록에서 다른 쓰기가 없다면 B의 읽기는 1이어야 한다.

순차 일관성은 각 클라이언트의 프로그램 순서를 지키는 하나의 전체 연산 순서가 있으면 된다. 서로 다른 클라이언트 사이의 실제 시각 순서를 모두 강제하지 않으므로 B의 읽기를 A의 쓰기보다 앞에 놓을 수 있는 기록은 허용될 수 있다.

```text
Client A: write(x, 1) -> success
Client B:                    read(x) -> 0

Real-time fact: A finished before B started.
Linearizability: disallowed, if there is no later write.
Sequential consistency: may be allowed when each client has only this operation.
```

### 인과 관계와 세션의 관점

인과 일관성은 어떤 값을 읽고 그 결과에 의존해 새 값을 쓴 관계처럼 원인과 결과의 순서를 보존한다. 서로 인과 관계가 없는 변경은 다른 관찰자가 다른 순서로 볼 수 있다. 단순히 벽시계 시각이 앞선다는 것과 인과 관계는 다르다.

read-your-writes는 사용자가 자신의 완료된 쓰기를 이후 읽기에서 보는 보장이다. 단조 읽기는 같은 세션에서 더 새 버전을 본 뒤 더 오래된 상태로 돌아가지 않는 보장이다. 이들은 사용자 경험에 중요하지만 각각 하나만 제공한다고 전체 시스템의 선형 가능성이 생기는 것은 아니다.

모델이 약하면 통신과 기다림을 줄일 수 있지만 애플리케이션이 오래된 값이나 충돌을 처리해야 한다. 모델이 강하면 상태를 단순하게 생각할 수 있는 대신 장애와 지연에서 응답을 제한할 수 있다. 구현·질의 종류·세션마다 보장이 다를 수도 있다.

데이터베이스의 트랜잭션 격리 수준과 분산 저장소의 단일 객체 일관성은 범위가 다르다. “강한 일관성”이라는 말만 쓰면 실시간 순서, 여러 키 원자성, 장애 중 동작 중 무엇을 뜻하는지 불분명해진다. 구체적인 읽기·쓰기 사례를 계약으로 적으면 필요한 보장이 정확해진다.

일관성 실험에서는 완료된 응답과 시작된 호출을 모두 기록해야 한다. 읽은 값의 목록만 모으면 같은 값 변화도 허용되는 겹침인지 금지된 순서인지 판단할 수 없다.

### 참고 자료

- [MIT · Distributed Systems](https://pdos.csail.mit.edu/6.824/)
- [Herlihy & Wing · Linearizability](https://www.cs.cmu.edu/~wing/publications/HerlihyWing90.pdf)
