티스토리 뷰
Photo by Lesley Davidson on Unsplash
데이터 중심 애플리케이션 설계 라는 책을 읽고 있다.
알라딘 링크: http://aladin.kr/p/t1Nzd
책에서 설명해주는 ACID의 개념이 그동안 어렴푸시 이해했던 부분을 명확하게 밝혀주는 기분이 들어 책의 내용을 정리하며 나의 것으로 만들어보려 한다. 아래는 책의 223p-227p의 내용이다.
ACID의 의미
"1983년 테오 하더(Theo Harder)와 안드레아스 로이터(Andreas Reuter)는 데이터베이스에서 내결함성 메커니즘을 나타내는 정확한 용어를 확립하기 위해 ACID를 만들었다." 223p
그런데 문제는 현실 세계에서 ACID에 대한 기준이 모호하다는 것이다.
Atomicity - 원자성
클라이언트가 쓰기 작업 몇 개를 한 묶음으로 처리하려 하는데 그 중에 일부만 처리되고 나머지 처리에 결함이 생기면 모두 처리되지 않은 것으로 되돌려야 한다. 다르게 말하면, "여러 쓰기 작업이 하나의 원자적인 트랜잭션으로 묶여 있는데 결함 때문에 완료(commit) 될 수 없다면 취소(abort)되고 데이터베이스는 이 트랜잭션에서 지금까지 실행한 쓰기를 무시하거나 취소해야 한다." 224p
저자는 이런 점에서 atomicity보다는 abortability가 더 나은 단어라고 말한다. (나도 동감한다). 하지만 이미 대세는 atomicitiy로 굳어졌으니 바꿀 수는 없다.
Consistency - 일관성
"ACID 일관성의 아이디어는 항상 진실이어야 하는, 데이터에 관한 어떤 선언(불변식-invariant)이 있다는 것이다." 225p
즉, 시작부터 항상 진실이어야 하는 것이 있고, 트랜잭션 이후의 상태 역시 진실이어야 한다는 것이다. 책에서는 복식부기의 대변과 차변이 항상 같아야 하는 것으로 예를 들었다.
중요한 것은 이러한 보장은, 데이터베이스와 애플리케이션으로 구분해 볼 때에, 애플리케이션의 책임이라는 것이다. 데이터베이스의 입장에서는 애플리케이션이 하라는 대로 저장, 변경, 삭제를 할 뿐, "좋은 상태, 진실인 상태"를 유지하는 것은 애플리케이션의 책임이다.
"원자성, 격리성, 지속성은 데이터베이스의 속성인 반면 (ACID에서의) 일관성은 애플리케이션의 속성이다." 225p
Isolation - 격리성
"ACID에서 격리성은 동시에 실행되는 트랜잭션은 서로 결리된다는 것을 의미한다." 226p
동시성에서 발생하는 문제에 대한 내결함성 보장이라고 보면 되겠다. mutex를 떠올려도 되겠다. 하지만 진짜 제대로된 직렬성 격리(serializable isolation)은 현실에서 거의 사용되지 않는다. 성능이 떨어지기 때문이다. 그래서 상대적으로 보장성이 약한 "스냅숏 격리" 또는 "완화된 격리수준"등등으로 구현한다.
우리는 자본주의 사회에 살고있다.
Durability - 지속성
"지속성은 트랜잭션이 성공적으로 커밋됐다면 하드웨어 결함이 발생하거나 데이터베이스가 죽더라도 트랜젝션이 성공적으로 커밋됐다면 하드웨어 결함이 발생하거나 데이터베이스가 죽더라도 트랜잭션에서 기록한 모든 데이터는 손실되지 않는다는 보장이다." 226p
단순하게 말하자면 하드디스크에 저장되었다는 것을 보장해준다는 것으로 생각해보면 이해가 쉽겠다.
하지만 "완벽한 지속성"은 존재하지 않는다. 다양한 층위에서의 다양한 결함 가능성이 있다. 정전, 네트워크 고장, 하드디스크 배드 섹터 등등
'development' 카테고리의 다른 글
Hyrum's Law (2) | 2021.05.27 |
---|---|
LeetCode 문제풀이는 실무에 도움이 되는가? (3) | 2021.04.28 |
Slice, Array의 인덱스 표기에 대하여 - feat. Dijkstra (0) | 2021.02.05 |
Endian 이란 무엇일까? (0) | 2021.02.03 |
클린 애자일 - 6장 애자일해지기 (0) | 2021.01.19 |
- Total
- Today
- Yesterday
- golang
- 인텔리제이
- folklore
- OpenAI
- 독서
- bun
- strange
- 영화
- Shortcut
- go
- ChatGPT
- 독서후기
- agile
- 2023
- 잡학툰
- github
- Bug
- 제이펍
- 체호프
- 클린 애자일
- websocket
- Gin
- API
- intellij
- pool
- postgres
- notion
- 노션
- JIRA
- solid
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |