시스템 설계의 두 가지 추상화: 숨기기 vs 줄이기
The Two Abstractions of System Design: Hide or Reduce
분산 시스템과 TLA+ 모델링에서 '추상화'가 왜 그렇게 어려운지에 대한 의문에서 출발한 글입니다. 저자는 CS 교육에서 가르치는 '모듈성 추상화'(캡슐화로 내부를 숨기는 것)와 모델링/수학에서 말하는 '모델링 추상화'(관심 있는 속성만 남기고 나머지를 줄이는 것)가 본질적으로 다르다고 주장합니다. 특히 동시성 측면에서 모듈성 추상화는 동시성을 숨기려 하지만, 모델링 추상화는 오히려 동시성을 드러내고 활용합니다. Lamport 시계, 합의, 선형화 가능성, 로그 기반 데이터베이스, MapReduce 등이 모델링 추상화의 예시로 제시됩니다.
모듈성 추상화는 캡슐화하고, 수직적 경계를 그리며, 아래 계층을 숨긴다. 모델링 추상화는 교차적이다: 시스템을 행동 평면을 따라 슬라이스하여 조사 중인 속성에 절대적으로 관련된 것만 남기며, 그것조차 '어떻게'가 아닌 '무엇'의 형태로 남긴다.