아래 내용은 견고한 데이터 엔지니어링(조 라이스, 맷 하우슬리 지음)의 7장의 내용 일부를 정리한 것이다.
7.1 데이터 수집이란?
원천시스템에서 스토리지로 데이터가 이동하는 것으로, 데이터 엔지니어링 수명 주기에서 중간 단계에서 이루어 진다.
데이터 파이프라인이란? 데이터 파이프라인은 데이터 엔지니어링 수명 주기의 단계를 통해 데이터를 이동시키는 아키텍처, 시스템 및 프로세스의 조합
7.2 수집 단계의 주요 엔지니어링 고려사항
- 수집 시스템을 설계,구축 할때 고민해봐야 할 질문들
- 수집 데이터의 사용 사례
- 데이터 재사용성
- 데이터 목적지
- 갱신 주기
- 데이터 양
- 데이터 형식
- 데이터 품질
- 데이터 처리 필요 여부
- 수집 아키텍처를 설계할 때 고려해야 하는 요소
- 유한 데이터 vs 무한 데이터
- 빈도
- 동기 수집 vs 비동기 수집
- 직렬화와 역질렬화
- 처리량과 확장성
- 신뢰성과 내구성
- 페이로드
- 푸시 vs 풀 vs 폴링 패턴
위의 요소들 중 몇가지를 자세히 알아본다.
7.2.3 동기 수집 vs 비동기 수집
- 동기 수집
- 원천, 수집, 대상이 복잡한 의존성을 가지며 밀접하게 결합
- 중간 프로세스가 실패하면 전체프로세스를 다시 실행
- 구형 ETL시스템에서 흔히 볼 수 있음
- 비동기 수집
- 개별 이벤트 수준으로 작동 가능
- 원천과 처리 프로세스 사이에 버퍼를 두면 이벤트 속도의 급상승으로 인한 부담을 줄일 수 있음
7.2.6 신뢰성과 내구성
- 신뢰성: 수집 시스템의 높은 가동 시간과 적절한 장애 조치 기능
- 내구성: 데이터가 손실되거나 손상되지 않도록 함
- 데이터 손실에 따른 영향과 비용을 바탕으로 리스크를 평가하여 신뢰성과 내구성 결정에 따른 비용과 이점 평가
- 모든 시나리오에서 신뢰성있고 내구성 있게 데이터를 수집할 수 있다고 가정하지 않아야 함
7.2.7 페이로드
- 페이로드는 수집하려는 데이터셋이며 종류, 형태, 스키마, 데이터 유형, 메타데이터 등의 특성을 갖음
- 종류: 유형과 형식으로 구분
- 유형: 표, 이미지, 비디오, 텍스트
- 형식: csv, 파케이, JPG, PNG
- 스키마와 데이터 유형
- 스키마는 필드와 해당 필드 내의 데이터 유형을 설명
- 업스트림 스키마 변경에 자동으로 대응할 수 있도록 하고, 자동화만큼 담당자와의 커뮤니케이션이 중요
- 스키마 레지스트리는 스키마 및 데이터 유형의 무결성을 유지하는데 사용되는 메타데이터 저장소
- 메타데이터는 데이터에 대한 데이터로, 설명이 없는 데이터는 가치가 없을 수 있음
7.3 배치 수집 고려사항
- 시간 간격 배치 수집
- 데이터 웨어하우징을 위한 비즈니스 ETL에서 널리 사용됨
- 특정 시간에 처리되는 패턴
- 크기 기반 데이터 수집
- 스트리밍 기반 시스템에서 스토리지로 데이터를 이동할 때 매우 일반적
- 특정 크기에 맞춰서 데이터를 수집
- 일반적인 배치 수집 패턴
- 스냅숏 또는 차등 추출
- 파일 기반 익스포트 및 수집
- ETL vs ELT
- 입력, 갱신 및 배치 크기
- 데이터 마이그레이션
7.3.4 입력, 갱신 및 배치 크기
- 작업중인 데이터베이스 또는 데이터 스토어에 대한 적절한 갱신 패턴을 이해해야함
- 아파치 드루이드/피놋: 높은 삽입 속도
- 빅쿼리: 단일행 입력에는 성능이 떨어지나 스트리밍 버퍼를 통한 공급에는 매우 우수 등
7.4 메시지 및 스트림 수집에 관한 고려사항
- 이벤트 데이터 수집할 때 고려할 문제
- 스키마의 진화
- 늦게 도착하는 데이터
- 주문 및 복수 전달
- 재생
- 유효 시간
- 메세지 크기
- 에러 처리와 데드레터 큐
- 소비자 풀 앤 푸시
- 위치
7.4.2 늦게 도착하는 데이터
- 늦게 도착하는 데이터가 다운스트림 시스템에 미치는 영향에 유의해야 함
- 늦게 도착하는 데이터가 더이상 처리되지 않는 컷오프 시간을 설정해야 함
7.4.7 에러 처리와 데드레터 큐
- 간혹 이벤트가 성공적으로 수집되지 않는 이벤트는 다시 라우팅 해 데드레터 큐라는 별도 위치에 저장해야 함
- 문제가 있는 이벤트와 아닌 이벤트를 구분
- 에러 수정 후, 일부 메세지 재처리 가능
7.5 데이터 수집 방법
- 데이터 수집 방법 예시
- 직접 데이터베이스 연결
- 변경 데이터 캡처
- API
- 메시지 큐와 이벤트 스트리밍 플랫폼
- 관리형 데이터 커넥터
- 객체 스토리지로 데이터 이동
- EDI
- 데이터베이스와 파일 익스포트
- 공통 파일 형식의 실질적 문제
- 셸
- SSH
- SFTP 및 SCP
- 웹훅
- 웹 인터페이스
- 웹 스크레이핑
- 데이터 마이그레이션용 전송 어플라이언스
- 데이터 공유
7.5.1 직접 데이터베이스 연결
- 네트워크 연결을 통해 쿼리하고 읽으며, 일반적으로 ODBC 또는 JDBC를 사용
- ODBC는 드라이버를 사용해 표준 ODBC API에 발행된 명령을 데이터베이스에 발행된 명령어로 변환
- OS 및 아키텍처 네이티브 바이너리로 제공
- JDBC는 자바 드라이버로 원격 데이터베이스에 접속해 표준 JDBC API와 데이터베이스 네이티브 네트워크 인터페이스 사이의 변환 계층 역할
- 모든 JVM언어 및 JVM 프레임워크와 호환되는 단일 JDBC 드라이버 제공 가능
- 최근에는 데이터베이스가 파케이 등의 형식으로 직접 데이터를 내보내는 네이티브 파일 익스포트를 제공하고, 클라우드 데이터웨어하우스에서 직접 RestAPI를 제공
7.5.2 변경 데이터 캡처
- 배치 지향 CDC
- 마지막으로 캡처한 시간 기준으로 필터 타임스탬프를 설정하고 쿼리를 사용해서 수집
- 특정 시점 이후 변경된 행을 판별 할수는 있으나, 배치 시간 사이 모든 변경사항을 얻을 수 는 없음
- 연속 CDC
- 데이터베이스에 대한 각 쓰기를 이벤트로 처리
- 일반적인 방법 중 하나는 데이터 베이스 이진로그를 사용하는 로그기반 CDC
- CDC와 데이터베이스 복제
- CDC는 데이터베이스 간 복제에도 사용할 수 있으며, 이벤트를 스트림에 버퍼링하여 두번째 데이터베이스에 비동기적으로 복제함
- 일반적으로 같은 유형의 데이터베이스를 사용
- 느슨하게 결합된 아키텍처의 장점을 갖고 있으나, 약간의 지연시간이 있음
- CDC 고려사항
- CDC는 많은 리소스를 소비함
- 배치 CDC는 부하를 야기할 수 있으므로 주의
7.5.9 공통 파일 형식의 실질적 문제
- CSV는 스키마 정보를 기본적으로 인코딩 하거나 중첩구조를 지원안함
- 적절한 수집을 보장하기 위해서는 타깃 시스템에서 파일 인코딩 및 스키마 정보 설정
- JSON은 데이터를 내부 중첩 구조를 사용해 저장
- 열형식(파케이, 애로, ORC)를 사용하면 컬럼형 데이터베이스에서 포맷간에 열을 직접 변환할 수 있어 효율적으로 익스포트 할 수 있음
- 에로파일 형식은 데이터를 처리 엔진 메모리에 직접 매핑하도록 설계되어 데이터레이크 환경에서 높은 성능을 제공
7.6 함께 일할 담당자
7.6.1 업스트림 이해관계자
- 주로 소프트웨어 엔지니어
- 소프트웨어 엔지니어를 데이터 엔지니어링의 결과의 이해관계자로 초대함으로써 품질을 개선시키고 소프트웨어 엔지니어의 공헌을 알려야 함
7.6.2 다운스트림 관계자
- 데이터 과학자, 분석가, 최고기술 책임자 등 데이터 실무자와 기술 리더 혹은 비즈니스 이해관계자
- 단순하지만 비즈니스에 핵심적인 부문에서도 데이터 엔지니어가 데이터 수집에 참여하여 더 많은 기회를 얻을 수 있도록 함
- 데이터 실무자는 데이터 중심 비즈니스에 최적인 구조에 관한 지침을 경영진에게 제공 할 수 있어야 함
7.7 드러나지 않는 요소
7.7.2 데이터 관리
- 스키마 변경
- 신중한 명령및 제어 검토 프로세스는 민첩성을 저해하는 장애 요소
- 깃 버전제어와 같은 접근법으로 스키마 변경을 관리
- 메인테이블 변경 전 개발 버전에 먼저 조정
- 데이터 윤리, 개인정보보호, 컴플라이언스
- 기밀 데이터 암호화 전, 기밀데이터가 꼭 필요한지 자문
- ID를 익명화 하기 위한 토큰화 등은 가능하면 데이터 수집시에 데이터 해싱
- 매우 민감한 데이터는 직접처리를 줄이고 비접촉 운영환경을 구축해야함
- 암호화 키에대한 접근을 엄격하게 관리
7.7.3 데이터 옵스
- 모니터링
- 이벤트 생성, 수집, 프로세스 및 처리시간 등 시간의 다양한 측면을 추적
- 가동시간, 지연시간 및 처리되는 데이터 볼륨 부터 모니터링
- 장애 발생에 따른 대응조치를 설정해야 함
- 데이터 품질 테스트
- 잘못된 데이터를 사용해 의사결정을 내리는 것은 데이터 재앙
- 데이터는 엔트로픽 성질이 있어, 예기치 않게 변경되는 경우가 많음
- 소프트웨어 엔지니어와 협력해 데이터 변경이력을 캡처하는 로그, null 검사 등, try/catch 예외처리 등의 소프트웨어 모범사례를 준수해야 함
'Data Engineering' 카테고리의 다른 글
DuckDB를 사용해서 Iceberg 테이블에 쿼리 실행하기 (0) | 2024.09.15 |
---|---|
견고한 데이터 엔지니어링 - 원천 시스템에서의 데이터 생성 (0) | 2024.05.26 |
견고한 데이터 엔지니어링 - 우수한 데이터 아키텍처의 원칙 (0) | 2024.05.12 |
견고한 데이터 엔지니어링 - 데이터 엔지니어링이란? (0) | 2024.04.20 |
Airflow Dag 작성 Best practice (0) | 2023.11.05 |