요약 12장. 데이터 시스템의 미래의 나머지 부분에 대해 이해함. 옳은 일 하기 사생활과 추적 감시 동의와 선택의 자유 사생활과 데이터 사용 자산과 권력으로서의 데이터 산업 혁명의 기억 법률과 자기 규제 메모 사생활과 추적 데이터 수집 자체가 윤리적 문제를 불러일으킬 수 있다. 이는 데이터를 수집하는 조직과 데이터를 제공하는 사용자 사이의 관계에 크게 영향을 미침. 사용자가 명시적으로 데이터를 제공하는 경우, 시스템은 사용자에게 서비스를 제공하며, 사용자는 고객이 됨. 하지만 시스템이 사용자의 활동을 추적하고, 이를 통해 데이터를 수집하는 경우, 이 관계는 불명확해짐. 행동 데이터 추적은 많은 온라인 서비스에서 중요함. 이는 사용자 경험을 향상시키고, 개인화된 콘텐츠를 제공하는 데 도움이 됨. 그러나, ..
요약 12장. 데이터 시스템의 미래의 나머지 부분에 대해 이해함. 정확성을 목표로 믿어라. 하지만 확인하라. 소프트웨어 버그가 발생해도 무결성 유지하기 약속을 맹목적으로 믿지 마라. 검증하는 문화 감사 기능 설계 다시 종단 간 논증 감사 데이터 시스템용 도구 옳은 일 하기 예측 분석 편견과 차별 책임과 의무 피드백 루프 메모 믿어라. 하지만 확인하라. 시스템 모델은 실제 상황을 가정하고 이를 기반으로 시스템을 설계하며, 여기에는 프로세스의 실패, 장치의 전원 중단, 네트워크 지연 등의 가능성이 포함됨. 그러나 디스크에 쓴 데이터는 fsync 이후에 안전하며, 메모리 상의 데이터는 손상되지 않고, CPU의 계산은 정확하다는 가정도 함. 이러한 가정은 대체로 합리적이며, 시스템 모델은 전통적으로 결함에 대한..
요약 12장. 데이터 시스템의 미래의 나머지 부분에 대해 이해함. 정확성을 목표로 제약 조건 강제하기 유일성 제약 조건은 합의가 필요하다 로그 기반 메시징의 유일성 다중 파티션 요청 처리 적시성과 무결성 데이터플로 시스템의 정확성 느슨하게 해석되는 제약 조건 코디네이션 회피 데이터 시스템 메모 제약 조건 강제하기 유일성 제약 조건은 합의가 필요하다 분산 설정에서 유일성 제약 조건을 강제하려면 합의가 필요함. 동일한 요청이 동시에 여러 개 존재할 경우, 시스템은 충돌하는 연산 중 하나를 수용하고 나머지를 제약 조건 위반으로 거부해야 함. 이러한 합의를 달성하는 표준적인 방법은 특정 노드를 리더로 지정하고 해당 노드가 모든 결정을 내리는 것임. 이 방법은 모든 요청이 단일 노드로 집중되는 것을 문제삼지 않고..
요약 12장. 데이터 시스템의 미래의 나머지 부분에 대해 이해함. 데이터베이스 언번들링 파생 상태 관찰하기 구체화 뷰와 캐싱 오프라인 대응 가능한 상태 저장 클라이언트 상태 변경을 클라이언트에게 푸시하기 종단 간 이벤트 스트림 읽기도 이벤트다 다중 파티션 데이터 처리 정확성을 목표로 데이터베이스에 관한 종단 간 논증 연산자의 정확히 한 번 실행 중복 억제 연산 식별자 종단 간 논증 종단 간 사고를 데이터 시스템에 적용하기 메모 파생 상태 관찰하기 데이터플로 시스템은 검색 색인, 구체화 뷰, 예측 모델 등의 파생 데이터셋을 생성하고 최신 상태로 유지하는 과정에 사용할 수 있음. 이 과정은 '쓰기 경로'로, 시스템에 정보를 기록할 때마다 일괄 처리와 스트림 처리의 여러 단계를 거친 후, 결과적으로 기록된 데..
요약 12장. 데이터 시스템의 미래의 나머지 부분에 대해 이해함. 데이터베이스 언번들링 데이터 저장소 기술 구성하기 색인 생성하기 모든 것의 메타데이터베이스 언번들링이 동작하게 만들기 언번들링 대 통합 시스템 뭐가 빠졌지? 데이터플로 주변 애플리케이션 설계 파생 함수로서의 애플리케이션 코드 애플리케이션 코드와 상태의 분리 데이터플로: 상태 변경과 애플리케이션 코드 간 상호작용 스트림 처리자와 서비스 메모 데이터베이스 언번들링 데이터베이스, 하둡, 운영체제는 모두 데이터를 저장, 처리, 질의하는 기능을 수행함. 데이터베이스는 특정 데이터 모델의 레코드로, 운영체제는 파일 시스템에 파일로 데이터를 저장함. 유닉스와 관계형 데이터베이스는 정보 관리 문제를 다른 철학으로 접근했음. 유닉스는 저수준의 하드웨어 추..
요약 12장. 데이터 시스템의 미래에 대해 이해함. 데이터 통합 파생 데이터에 특화된 도구의 결합 데이터플로에 대한 추론 파생 데이터 대 분산 트랜잭션 전체 순서화의 제약 인과성 획득을 위한 이벤트 순서화 일괄 처리와 스트림 처리 파생 상태 유지 애플리케이션 발전을 위한 데이터 재처리 람다 아키텍처 일괄 처리와 스트림 처리의 통합 메모 12장. 데이터 시스템의 미래 마지막 장에서는 미래의 관점으로 바꾸어 애플리케이션 설계와 구축 방법의 근본적 개선을 위한 아이디어와 접근법을 제시함. 미래에 대한 의견은 주관적이기에, 이 장에서는 저자의 개인적인 의견을 일인칭으로 표현함. 이 장의 목표는 생산적인 토론의 출발점이 되고, 혼란스러운 개념을 명확히 하는 데 도움을 주는 것임. 책의 목적은 신뢰할 수 있고, 확..
요약 스트림 처리의 나머지 부분에 대해 이해함. 내결함성 마이크로 일괄 처리와 체크포인트 원자적 커밋 재검토 멱등성 실패 후에 상태 재구축하기 메모 내결함성 스트림 처리자가 결함에 견딜 수 있는 방법을 고려해보자. 일괄 처리 프레임워크는 결함에 쉽게 대처할 수 있는데, 이는 입력 파일이 불변이고 각 태스크가 분리된 파일에 출력을 기록하기 때문임. 일괄 처리의 내결함성 접근법은 일부 태스크가 실패할지라도 결과가 정확하게 한 번 처리된 것처럼 보이게 함. 이 원리를 정확히 한 번 시맨틱(exactly-once semantics)이라 하지만, 결과적으로 한 번(effectively-once)이라는 용어가 그 의미를 더 잘 설명함. 스트림 처리에서도 동일한 내결함성 문제가 발생하지만, 이 문제를 다루는 방법은 ..
요약 스트림 처리의 나머지 부분에 대해 이해함. 시간에 관한 추론 이벤트 시간 대 처리 시간 준비 여부 인식 어쨋든 어떤 시계를 사용할 것인가? 윈도우 유형 스트림 조인 스트림 스트림 조인(윈도우 조인) 스트림 테이블 조인(스트림 강화) 테이블 테이블 조인(구체화 뷰 유지) 조인의 시간 의존성 메모 시간에 관한 추론 시간에 관한 추론에서 스트림 처리자는 종종 시간을 다뤄야 할 때가 있으며, 이때 주로 시간 윈도우를 사용함. 일괄 처리와 스트림 처리 프레임워크는 시간을 처리하는 방식에 차이가 있음. 일괄 처리에서 태스크는 과거에 쌓인 대량의 이벤트를 빠르게 처리하며, 시간 단위로 쪼갤 필요가 있다면 각 이벤트에 내장된 타임스탬프를 사용함. 일괄 처리를 수행하는 장비의 시스템 시계를 보는 것은 의미가 없음...
요약 데이터베이스와 스트림의 나머지 부분에 대해 이해함. 이벤트 소싱 이벤트 로그에서 현재 상태 파생하기 명령과 이벤트 상태와 스트림 그리고 불변성 불변 이벤트의 장점 동일한 이벤트 로그로 여러 가지 뷰 만들기 동시성 제어 불변성의 한계 스트림 처리에 대해 이해함. 스트림 처리의 사용 복잡한 이벤트 처리 스트림 분석 구체화 뷰 유지하기 스트림 상에서 검색하기 메시지 전달과 RPC 메모 이벤트 소싱 이벤트 소싱은 도메인 주도 설계(DDD) 커뮤니티에서 개발한 기법으로, 애플리케이션 상태 변화를 변경 이벤트 로그로 저장함. 이벤트 소싱과 변경 데이터 캡처는 비슷하지만, 추상화 레벨에서 차이가 있음. 변경 데이터 캡처는 데이터베이스에서 저수준으로 변경 로그를 추출하며, 애플리케이션은 데이터베이스를 변경 가능한..
요약 이벤트 스트림 전송 중, 파티셔닝된 로그에 대해 이해함. 로그를 사용한 메시지 저장소 로그 방식과 전통적인 메시징 방식의 비교 소비자 오프셋 디스크 공간 사용 소비자가 생산자를 따라갈 수 없을 때 오래된 메시지 재생 데이터베이스와 스트림에 대해 이해함. 시스템 동기화 유지하기 변경 데이터 캡처 변경 데이터 캡처의 구현 초기 스냅숏 로그 컴팩션 변경 스트림용 API 지원 메모 파티셔닝된 로그 파티셔닝된 로그는 네트워크 상에서의 일시적 연산과 데이터베이스의 영구적 저장 방식의 차이를 해결하기 위한 방법임. 일반적인 메시징 시스템은 메시지를 소비자에게 전달한 후 즉시 삭제하지만, 데이터베이스와 파일 시스템은 명시적으로 삭제할 때까지 영구적으로 보관됨. 이러한 차이 때문에 일괄 처리와 메시징 처리의 파생 ..
요약 스트림 처리에 대한 내용을 이해함. 이벤트 스트림 전송 메시징 시스템 생산자에서 소비자로 메시지를 직접 전달하기 메시지 브로커 메시지 브로커와 데이터베이스의 비교 확인 응답과 재전송 메모 11장. 스트림 처리 이번 장에서는 스트림 처리의 기본 개념을 소개하고 있음. 스트림 처리는 시간이 지남에 따라 점진적으로 생성되는 데이터를 처리하는 방법으로, 일괄 처리와는 달리 데이터가 한정되지 않고 점진적으로 처리됨. 일반적으로 스트림은 유닉스의 stdin과 stdout, 프로그래밍 언어의 느긋한 리스트, 자바의 FileInputStream과 같은 파일 시스템 API, TCP 연결, 인터넷 상의 오디오와 비디오 전송 등에서 사용됨. 일괄 처리의 문제점은 입력의 변화가 처리 사이클이 끝날 때까지 반영되지 않는 ..
요약 맵리듀스를 넘어 일괄처리의 대안에 대한 내용을 이해함. 중간 상태 구체화 맵리듀스 작업은 중간 상태를 파일로 기록하는데 이를 구체화라고 함. 유닉스 파이프와 비교하여 맵리듀스의 중간 상태 구체화에는 여러 단점이 있음. 그래프와 반복 처리 그래프 처리는 웹 검색 엔진 순서 결정, 추천 엔진, 머신러닝, 랭킹 시스템에서 중요하게 사용됨. 데이터플로 엔진은 비순환 방향 그래프(DAG)를 사용하여 작업의 연산자를 배열하는데, 이는 데이터 자체가 그래프 형식인 것과 다름. 맵리듀스는 완료까지 반복하는 개념을 표현하기 어려워 반복적 스타일로 구현되는 그래프 처리 알고리즘이 필요함. 고수준 API와 언어 고수준 API와 언어는 분산 일괄 처리용 수행 엔진 발전과 함께 인기를 얻었음 . 맵리듀스 작업 작성의 어려..