전체 글 38

03 일반적인 데이터 파이프라인 패턴

03 일반적인 데이터 파이프라인 패턴 ETL 과 ELT 두 패턴 모두 데이터 웨어하우스에 데이터를 공급하고 분석가나 보고 도구가 이를 유용하게 쓸 수 있게 하는 데이터 처리에 대한 접근 방식 추출(Extract) 로드 및 변환을 준비하기 위해 다양한 소스에서 데이터를 수집 로드(Load) 원본 데이터(ELT의 경우) 또는 완전히 변환된 데이터(ETL의 경우)를 최종 대상으로 가져옴 변환(Transform) 파이프라인이 제공하는 모든 사용 사례에 유용하게 쓸 수 있게 각 소스 시스템의 원본 데이터를 결합하고 형식을 지정하는 단계 ETL을 넘어선 ELT의 등장 대부분의 데이터 웨어하우스는 비용 효율적인 방식으로 대규모 데이터세트에 대한 대량 변환을 저장하고 실행할 수 있는 확장성이 뛰어난 열 기반 데이터베이..

02 최신 데이터 인프라

02 최신 데이터 인프라 최신 데이터 인프라의 핵심 구성 요소 데이터 소스의 다양성 클라우드 데이터 웨어하우스와 데이터 레이크 데이터 수집 도구 데이터 변환 및 모델링 도구 워크플로 오케스트레이션 플랫폼 데이터 소스의 다양성 소스시스템 소유권 소스 시스템이 위치하는 곳이 어디인지 이해하는 것은 중요함 타사 데이터 소스에 위치한 데이터에 액세스하려고 한다면 액세스 방법에 제한이 있을 수 있음 내부적으로 구축된 시스템은 액세스 방법뿐만 아니라 데이터를 사용자가 필요로 하는 형태에 맞추어 정의하는 등 더 많은 기회를 분석팀에 제공할 수 있음 수집 인터페이스 및 데이터 구조 새로운 데이터 수집을 구축할 때 데이터 엔지니어가 가장 먼저 알아볼 것은 소스 데이터를 얻는 방법과 형식 데이터에 대한 인터페이스 Post..

01 데이터 파이프라인 소개

01 데이터 파이프라인 소개 데이터 파이프라인이란? 다양한 소스에서 새로운 가치를 얻을 수 있는 대상으로 데이터를 옮기고 변환하는 일련의 과정 일반적으로 데이터 추출, 데이터 가공, 데이터 유효성 검사를 표함한 여러 단계로 구성됨 데이터를 최종 목적지로 전달하기 전에 머신러닝 모델을 학습하거나 실행하는 단계가 있기도 함 데이터 엔지니어가 파이프라인을 구축! 데이터의 유효성과 적시성 보장 테스트, 경고, 비상 계획 수립하기 데이터 과학자와, 분석가와 협업 데이터 엔지니어의 기술스택 SQL과 데이터 웨어하우징 기초 파이썬 그리고/또는 자바 분산 컴퓨팅 기본 시스템 관리 목표 지향적 사고방식 왜 데이터 파이프라인을 구축할까? 적절한 데이터가 제공되도록 보장하여 나머지 분석 조직이 가장 잘 하는 일, 통찰력 제..

[요약 정리] 5-3. 스트리밍 형의 데이터 플로우

5-3. 스트리밍 형의 데이터 플로우 배치 처리와 스트림 처리로 경로 나누기 배치처리 도달한 데이터를 우선 분산 스토리지에 보관하고, 그것을 정기적으로 추출함으로써 데이터 처리를함 데이터가 영속적으로 보존되기 때문에 몇 번이고 재실행 할 수 있음 장기적인 데이터 분석을 예상하여 집계 효율이 높은 열 지향 스토리지를 구축할 수 있음 배치 처리의 사이클이 올때까지는 데이터를 볼 수 없어 실시간 집계에는 적합하지 않음 스트림처리 데이터가 도달하는 것과 거의 동시에 처리가 시작됨 처리 내용은 미리 정해 둘 필요가 있으며, 과거로 거슬러 올라가 재실시하는 것은 고려하지 않음 처리한 결과는 시계열 데이터에 적합한 데이터 스토어에 보관하거나, 기존 실시간 시스템에 전송 처리 내용을 변경하면 새롭게 도닥한 데이터에는 ..

[요약 정리] 5-2. 배치형의 데이터 플로우

5-2. 배치형의 데이터 플로우 MapReduce의 시대는 끝났다 - 데이터 플로우와 워크플로 데이터 플로우 - 다단계의 데이터 처리를 그대로 분산 시스템의 내부에서 실행할 수 있음 워크플로 - 외부 도구에 의존 MapReduce의 구조 분할된 데이터를 처리하는 Map, 그 결과를 모아서 집계하는 Reduce, Map과 Reduce를 반복하면서 목적하는 결과를 얻을 때까지 계속해서 데이터를 변환해 나가는 구조가 MapReduce Map과 Reduce의 하나의 사이클이 끝나지 않으면 다음 처리로 이동하지 않음 MapReduce를 대신할 새로운 프레임워크 - DAG에 의한 내부 표현 노드와 노드가 화살표로 연결된다 (방향성) 화살표를 아무리 따라가도 동일 노드로는 되돌아 오지 않는다 (비순환) 데이터 플로우..

[요약 정리] 5-1. 워크플로 관리

5-1. 워크플로 관리 [기초 지식] 워크플로 관리 - 데이터의 흐름을 일원 관리하기 워크플로 관리 → 정해진 업무를 원활하게 진행하기 위한 구조 워크플로 관리 도구 정기적으로 태스크를 실행하고 비정상적인 상태를 감지하여 그것에 대한 해결을 돕는 것 워크플로 관리 도구와 태스크 태스크 → 데이터 파이프라인의 실행 과정에서는 데이터를 잇달아 이동하면서 정해진 처리를 반복함. 이때 실행되는 개별 처리 기본 기능과 빅데이터에서 요구되는 기능 워크플로 관리 도구의 기본 기능 태스크를 정기적인 스케줄로 실행하고 그 결과 통지하기 태스크 간의 의존 관계를 정하고, 정해진 순서대로 빠짐없이 실행하기 태스크의 실행 결과를 보관하고, 오류 발생 시에는 재실행할 수 있도록 하기 하둡에서의 잡을 손쉽게 호출하거나 집계 결과..

[요약 정리] 4-4. 비구조화 데이터의 분산 스토리지

4-4. 비구조화 데이터의 분산 스토리지 [기본 전략] NoSQL 데이터베이스에 의한 데이터 활용 분산 스토리지는 필요에 따라 얼마든지 확장할 수 있는 확장성과 데이터를 구조화하지 않고도 저장할 수 있는 유연성이 요구됨 객체 스토리지 장점 임의의 파일을 저장할 수 있음 객체 스토리지 단점 일단 파일을 써넣으면 그것을 통째로 교체하는 방법밖에 없음. 수시로 변경하는 용도로 적합하지 않음 쓰기 빈도가 높은 데이터는 별도 RDB에 저장하고 정기적으로 스냅샷을 하거나 분산 데이터베이스에 저장 중요한 데이터는 트랜잭션 처리에 대해 고려된 데이터베이스에 기록하는 것이 원칙 열 지향 스토리지를 만듦으로써 집계는 고속화되지만, 작성에 시간이 걸림 용도에 최적화된 데이터 저장소 → NoSQL 데이터베이스 분산 KVS -..

[요약 정리] 4-3. 시계열 데이터의 최적화

4-3. 시계열 데이터의 최적화 프로세스 시간과 이벤트 시간 - 데이터 분석의 대상은 주로 이벤트 시간 이벤트 시간 - 클라이언트 상에서 메시지가 생성된 시간, 데이터 분석의 대상이 되는 시간 프로세스 시간 - 서버가 처리하는 시간 프로세스 시간에 의한 분할과 문제점 - 최대한 피하고 싶은 풀스캔 보다 실태에 가까운 집계 결과를 얻기 위해서는 이벤트 시간보다 며칠 정도 지난 시점에서 소급해 집계해야 함 → 특정한 날에 발생한 모든 이벤트를 수집하려면 며칠동안 기다려야 함 분산 스토리지에 데이터를 넣은 단계에서는 프로세스 시간을 사용하는 것이 보통 → 원하는 데이터를 찾으려면 많은 파일을 열어야 함 다수의 파일을 모두 검색하는 쿼리를 풀스캔이라 함, 시스템의 부하를 크게 높이는 요인 시계열 인덱스 - 이벤..

[요약 정리] 4-2. [성능x신뢰성] 메시지 배송의 트레이드 오프

4-2. 메시지 배송의 트레이드 오프 메시지 브로커 - 스토리지의 성능 문제를 해결하는 중간층의 설치 대량의 메시지를 안정적으로 받기 위해서는 빈번한 쓰기에도 견딜 수 있도록 성능이 매우 높고 필요에 따라 성능을 올릴 수 있는 스토리지가 필요함 빅테이터의 메시지 배송 시스템에는 종종 데이터를 일시적으로 축적하는 중산층이 설치됨 → 메시지 브로커 Apache Kafka, Amazon Kinesis 푸쉬형과 풀형 - 확장성 향상과 파일 사이즈의 적정화 푸시형 - 송신측의 제어로 데이터를 보내는 방식 풀형 - 수신측의 주도로 데이터를 가져오는 것 메시지 브로커는 데이터의 쓰기 속도를 조정하기 위한 완충 부분이며, 푸시형에서 풀형으로 메시지 배송의 타이밍을 변환함 메시지 브로커에 데이터를 넣는 것을 생산자(pr..

[요약 정리] 4-1. 벌크형과 스트리밍형의 데이터 수집

4-1. 벌크형과 스트리밍형의 데이터 수집 객체 스토리지와 데이터 수집 - 분산 스토리지에 데이터 읽어들이기 분산형의 데이터베이스가 이용되는 경우도 있지만 기본이 되는 것은 대량으로 파일을 저장하기 위한 '객체 스토리지' 객체 스토리지에서의 파일 읽고 쓰기는 네트워크를 거쳐서 실행 데이터는 항상 여러 디스크에 복사되기 때문에 일부 하드웨어가 고장 나더라도 데이터가 손실되진 않음 →데이터의 양이 늘어나도 성능이 떨어지는 일이 없도록 고안되어 있음 소량의 데이터에서는 비효율적 → 데이터 양에 비해 통신 오버헤드가 너무 큼 데이터 수집 수시로 객체 스토리지에 기록하면 대량의 작은 파일이 생성돼서 시간이 지남에 따라 성능을 저하시키는 요인이 됨 작은 데이터는 적당히 모아 하나의 큰 파일로 만들기 반대로 파일 크..