Chapter 12

데이터 시스템의 미래

  • 12.1 데이터 통합
  • 12.2 데이터베이스 언번들링
  • 12.3 정확성을 목표로
  • 12.4 옳은 일 하기

만능 데이터베이스는 없어. 하나의 도구가 OLTP, 검색, 캐싱, 분석을 다 잘할 수는 없잖아. 그래서 현실의 시스템은 여러 도구를 조합하는데, 문제는 이 도구들 사이의 데이터를 어떻게 일관되게 유지하느냐야. 이 책의 결론은 결국 데이터베이스를 분해하고 이벤트 스트림으로 연결하라는 거야.

기록 시스템이 하나 있고, 검색 색인, 캐시, 구체화 뷰 같은 나머지는 그로부터 파생되는 구조를 생각해봐. 각 파생의 목적이 명확해지고, 파생 함수가 결정론적이면 입력이 같으면 항상 같은 출력을 내니까 재파생도 가능하지. 이건 유닉스 철학의 확장이야 — 파이프 대신 이벤트 스트림이 서비스를 연결하는 거. 전통적인 DB가 저장 엔진, 색인, 트랜잭션을 하나로 묶었다면, 이걸 독립적인 서비스로 분리하고 Kafka 같은 이벤트 로그로 동기화하자는 거지.

정확성 측면에서 저자는 적시성무결성을 구분해. 적시성(항상 최신 상태를 보는 것)은 포기할 수 있어 — 짧은 지연은 대부분 허용 가능하니까. 하지만 무결성(데이터가 손상되지 않는 것)은 절대 포기할 수 없지. 이중 과금이나 데이터 유실은 허용 불가야. 이벤트 소싱 + 결정론적 파생으로, 강한 트랜잭션 없이도 무결성을 유지하면서 적시성은 느슨하게 하는 설계가 가능해. 로그에 기록되면 무결성이 보장되고, 파생 뷰는 비동기로 갱신하면 돼. 모든 제약이 실시간 합의를 필요로 하는 것도 아니야 — 항공권이 초과 예약되면 보상하면 되고, 잔고가 일시적으로 마이너스가 되면 나중에 과금하면 되니까.

마지막으로 저자가 던지는 질문은 기술이 아니라 윤리야. 데이터 수집은 본질적으로 감시와 같고, 사용자 데이터는 자산이 아니라 의무라는 거지. 보호해야 하고, 유출되면 피해를 입히고, 규제를 준수해야 하니까. 편향된 데이터로 학습한 예측 시스템은 차별을 자동화할 수 있고, 사용자가 서비스 약관에 동의해도 자기 데이터가 어떻게 쓰이는지 진정으로 이해하는 경우는 드물어. 기술적으로 할 수 있다는 게 해야 한다는 의미는 아니야.


정리

12장 읽고 기억할 거:

  1. 데이터베이스를 분해하고 이벤트 스트림으로 연결하라. 만능 DB 대신 각각 최적의 도구를 조합하고 이벤트 로그로 동기화하는 게 미래 방향이다
  2. 무결성은 포기할 수 없고, 적시성은 느슨하게 할 수 있다. 이벤트 소싱 + 결정론적 파생으로, 강한 트랜잭션 없이도 무결성을 유지하면서 확장 가능한 시스템을 만들 수 있다
  3. 데이터에 대한 윤리적 책임은 엔지니어의 몫이다. 데이터 수집은 감시이고, 데이터는 자산이 아니라 의무다. 기술적으로 가능하다고 해서 해야 하는 건 아니다