개발독서 14

빅데이터를 지탱하는 기술 (5.2~5.3 배치/스트리밍 형의 데이터 플로우)

[5부 빅데이터의 파이프라인]5-2 배치 형의 데이터 플로우1) MapReduce의 시대는 끝났다 ― 데이터 플로우와 워크플로2) MapReduce를 대신할 새로운 프레임워크 ― DAG에 의한 내부 표현3) 데이터 플로우와 워크플로를 조합하기4) 데이터 플로우와 SQL을 나누어 사용하기 ― 데이터 웨어하우스의 파이프라인과 데이터 마트의 파이프라인5-3 스트리밍 형의 데이터 플로우1) 배치 처리와 스트림 처리로 경로 나누기2) 배치 처리와 스트림 처리 통합하기3) 스트림 처리의 결과를 배치 처리로 치환하기 ― 스트림 처리의 두 가지 문제에 대한 대처4) 아웃 오브 오더의 데이터 처리 5-4 정리 5부 빅데이터의 파이프라인 5-2 배치 형의 데이터 플로우 1) MapReduce의 시대는 끝났다 ― 데이..

빅데이터를 지탱하는 기술 (3.3~4.2 데이터 마트의 구축 & 벌크 형과 스트리밍 형의 데이터 수집 & 메시지 배송의 트레이드 오프)

[3부 빅데이터의 분산 처리]3-3 데이터 마트의 구축1) 팩트 테이블 ― 시계열 데이터 축적하기2) 집계 테이블 ― 레코드 수 줄이기3) 스냅샷 테이블 ― 마스터의 상태를 기록하기4) 이력 테이블 ― 마스터 변화 기록하기[마지막 단계] 디멘전을 추가하여 비정규화 테이블 완성시키기[4부 빅데이터의 축적]4-1 벌크 형과 스트리밍 형의 데이터 수집1) 객체 스토리지와 데이터 수집 ― 분산 스토리지에 데이터 읽어들이기2) 벌크 형의 데이터 전송 ― ETL 서버의 설치 필요성3) 스트리밍 형의 데이터 전송 ― 계속해서 전송되어 오는 작은 데이터를 취급하기 위한 데이터 전송4-2 [성능×신뢰성] 메시지 배송의 트레이드 오프1) 메시지 브로커 ― 스토리지의 성능 문제를 해결하는 중간층의 설치2) 메시지 배송을 확..

빅데이터를 지탱하는 기술 (1.3~1.5 스크립트 언어에 의한 특별 분석과 데이터 프레임 & BI 도구와 모니터링)

[1부 빅데이터의 기초 지식]1-3 [속성 학습] 스크립트 언어에 의한 특별 분석과 데이터 프레임1) 데이터 처리와 스크립트 언어 ― 인기 언어인 파이썬과 데이터 프레임2) 데이터 프레임, 기초 중의 기초 ― ‘배열 안의 배열’로부터 작성3) 웹 서버의 액세스 로그의 예 ― pandas의 데이터 프레임으로 간단히 처리4) 시계열 데이터를 대화식으로 집계하기 ― 데이터 프레임을 그대로 사용한 데이터 집계5) SQL의 결과를 데이터 프레임으로 활용하기1-4 BI 도구와 모니터링1) 스프레드시트에 의한 모니터링 ― 프로젝트의 현재 상황 파악하기2) 데이터에 근거한 의사 결정 ― KPI 모니터링3) 변화를 파악하고 세부 사항을 이해하기 ― BI 도구의 활용4) 수작업과 자동화해야 할 것의 경계를 판별하기1-5 ..

[켄트 벡의 Tidy First?] 9~16장 - 더 나은 소프트웨어 설계를 위한 32가지 코드 정리법

[Part 1 코드 정리법]09 설명하는 상수 10 명시적인 매개변수11 비슷한 코드끼리 12 도우미 추출 13 하나의 더미 14 설명하는 주석 15 불필요한 주석 지우기 [Part 2 관리]16 코드 정리 구분  Part 1 코드 정리법 09 설명하는 상수 - 리터럴 상수(literal constant)는 상징적인 상수(symbolic constant)로 만들기=> 리터럴 상수? 소스 코드에 기록된 텍스트 표현한 것=> 상징적인 상수? 변수처럼 고정 값 클래스 중 하나를 취할 수 있는 기호를 써서 상수를 정의한 것// 코드정리 전if response.code = 404// 코드정리 후PAGE_NOT_FOUND := 404if response.code = PAGE_NOT_FOUND - 같은 리터럴 상수가..

데이터 중심 애플리케이션 설계 (7장 트랜잭션)

[2부 분산 데이터]07장: 트랜잭션1. 애매모호한 트랜잭션의 개념1.1 ACID의 의미1.2 단일 객체 연산과 다중 객체 연산2. 완화된 격리 수준2.1 커밋 후 읽기2.2 스냅숏 격리와 반복 읽기2.3 갱신 손실 방지2.4 쓰기 스큐와 팬텀3. 직렬성3.1 실제적인 직렬 실행3.2 2단계 잠금(2PL)3.3 직렬성 스냅숏 격리(SSI)[정리: 여러 장비로 분산해 저장하는 데이터]- 트랜잭션=> 애플리케이션이 어떤 동시성 문제와 어떤 종류의 하드웨어와 소프트웨어 결함이 존재하지 않는 것처럼 동작할 수 있게 도와주는 추상층=> 트랜잭션이 없으면 다양한 방법으로 데이터가 일관성이 깨질 수 있음- 동시성 제어 - 경쟁 조건1) 더티읽기: 한 클라이언트가 다른 클라이언트가 썼지만 아직 커밋되지 않은 데이터를 ..

데이터 중심 애플리케이션 설계 (6장 파티셔닝)

[2부 분산 데이터]06장: 파티셔닝1. 파티셔닝과 복제2. 키-값 데이터 파티셔닝2.1 키 범위 기준 파티셔닝2.2 키의 해시값 기준 파티셔닝2.3 쏠린 작업부하와 핫스팟 완화3. 파티셔닝과 보조 색인3.1 문서 기준 보조 색인 파티셔닝3.2 용어 기준 보조 색인 파티셔닝4. 파티션 재균형화4.1 재균형화 전략4.2 운영: 자동 재균형화와 수동 재균형화5. 요청 라우팅5.1 병렬 질의 실행 [정리: 여러 장비로 분산해 저장하는 데이터]- 파티셔닝=> 대용량 데이터셋을 더 작은 데이터셋으로 쪼개는 것=> 저장/처리할 데이터가 너무 많아 장비 한 대로 처리하는 게 불가능해지면 파티셔닝이 필요=> 핫스팟이 생기지 않게 하면서 데이터와 질의 부하를 여러 장비에 균일하게 분배하도록 해야 함* 핫스팟? 불균형적으..

데이터 중심 애플리케이션 설계 (5장 복제)

[2부 분산 데이터]1. 고부하로 확장1.1 비공유 아키텍처1.2 복제 대 파티셔닝5장 복제1. 리더와 팔로워1.1 동기식 vs 비동기식 복제1.2 새로운 팔로워 설정1.3 노드 중단 처리1.4 복제 로그 구현2. 복제 지연 문제2.1 자신이 쓴 내용 읽기2.2 단조 읽기2.3 일관된 순서로 읽기2.4 복제 지연을 위한 해결책3. 다중 리더 복제3.1 다중 리더 복제의 사용 사례3.2 쓰기 충돌 다루기3.3 다중 리더 복제 토폴로지4. 리더 없는 복제4.1 노드가 다운됐을 때 데이터베이스에 쓰기4.2 정족수 일관성의 한계4.3 느슨한 정족수와 암시된 핸드오프4.4 동시 쓰기 감지 [정리: 여러 장비로 분산해 저장하는 데이터]- 복제의 용도1) [고가용성] 한 장비(또는 여러 장비나 전체 데이터센터)가 다..

데이터 중심 애플리케이션 설계 (4장 부호화와 발전)

[1부 데이터 시스템의 기초]4장 부호화와 발전1. 데이터 부호화 형식1.1 언어별 형식1.2 JSON과 XML, 이진 변형1.3 스리프트와 프로토콜 버퍼1.4 아브로1.5 스키마의 장점2. 데이터플로 모드2.1 데이터베이스를 통한 데이터플로2.2 서비스를 통한 데이터플로: REST와 RPC2.3 메시지 전달 데이터플로 [정리: 데이터 중심 애플리케이션 설계를 뒷받침하는 근본 개념을 설명]- 데이터 구조를 네트워크나 디스크 상의 바이트열로 변환하는 다양한 방법=> 부호화의 세부 사항은 효율성, 애플리케이션의 아키텍처, 배포의 선택 사항에도 영향- 많은 서비스가 새로운 버전의 서비스를 동시에 모든 노드에 배포하는 방식보다 한 번에 일부 노드에만 서서히 배포하는 순회식 업그레이드가 필요=> 순회식 업그레이드..

데이터 중심 애플리케이션 설계 (3장 저장소와 검색)

[1부 데이터 시스템의 기초]2장 저장소와 검색1. 데이터베이스를 강력하게 만드는 데이터 구조1.1 해시 색인1.2 SS테이블과 LSM 트리1.3 B 트리1.4 B 트리와 LSM 트리 비교1.5 기타 색인 구조2. 트랜잭션 처리나 분석?2.1 데이터 웨어하우징2.2 분석용 스키마: 별 모양 스키마와 눈꽃송이 모양 스키마3. 칼럼 지향 저장소3.1 칼럼 압축3.2 칼럼 저장소의 순서 정렬3.3 칼럼 지향 저장소에 쓰기3.4 집계: 데이터 큐브와 구체화 뷰 [정리: 데이터 중심 애플리케이션 설계를 뒷받침하는 근본 개념을 설명]*이번 장을 통해 선택한 DB의 문서를 이해할 수 있는 충분한 어휘와 개념을 갖출 수 있음1. DB가 어떻게 저장과 검색을 다루는지?- DB에 데이터를 저장할 때 어떤 일이 일어날까?-..

데이터 중심 애플리케이션 설계 (2장 데이터 모델과 질의 언어)

- 관계형 DB에서 다대다 관계를 표현할 때 어려움을 겪은 적이 있었는지? => Node.js에서 다대다 관계를 표현하기 위해 ORM을 사용할 때 TypeORM의 경우 테이블 간 가상의 연결 테이블을 만들어 주지만, Sequelize에서는 실제로 연결 테이블을 만들어줘야 하는 불편함이 있음  [1부 데이터 시스템의 기초]2장 데이터 모델과 질의 언어1. 관계형 모델과 문서 모델1.1 NoSQL의 탄생1.2 객체 관계형 불일치1.3 다대일과 다대다 관계1.4 문서 데이터베이스는 역사를 반복하고 있나?1.5 관계형 데이터베이스와 오늘날의 문서 데이터베이스2. 데이터를 위한 질의 언어2.1 웹에서의 선언형 질의2.2 맵리듀스 질의3. 그래프형 데이터 모델3.1 속성 그래프3.2 사이퍼 질의 언어3.3 SQL의..