Jost Do It.

그냥 IT해.

서버 및 환경/Data

견고한 데이터 엔지니어링 01장

그냥하Jo. 2025. 3. 4. 10:42

01장 데이터 엔지니어링 상세

 

1. 데이터 엔지니어링이란

  • 데이터 엔지니어링에 관한 다양한 사람들의 정의들
    1. 조직 내 다른 전문가가 데이터를 사용할 수 있도록 만드는 일련의 작업
      • 데이터 엔지니어는 조직의 데이터 인프라를 구축하고 운영해 데이터 분석가와 데이터 과학자가 추가 분석을 수행할 수 있도록 준비한다.
    2. 데이터 엔지니어링의 유형은 SQL 중심빅데이터 중심으로 나뉜다.
    3. 데이터 엔지니어링 분야는 소프트웨어 엔지니어링에서 더 많은 요소를 가져오는 비지니스 인텔리전스와 데이터 웨어하우징의 상위집합(superset)으로 ‘빅데이터’ 분산 시스템 운영에 관한 전문화를 통합한다.
    4. 데이터 엔지니어링은 데이터의 이동, 조작, 관리에 관한 모든 것

 

1-1. 데이터 엔지니어링 정의

  • 데이터 엔지니어링
    • 원시 데이터 (raw data)를 가져와 분석 및 ML 같은 다운스트림 사용 사례를 지원
    • 고품질의 일관된 정보를 생성하는 시스템과 프로세스를 개발, 구현, 및 유지관리하는 작업
    • 보안, 데이터 관리, 데이터 운영, 데이터 아키텍처, 오케스트레이션, 소프트웨어 엔지니어링의 교차점
  • 데이터 엔지니어(DE)
    • 데이터 엔지니어링 수명 주기를 관리
      • 데이터 엔지니어링 수명 주기: 원천 시스템에서 데이터를 가져와 분석 or ML 사용사례에 데이터를 제공하는 과정

 

1-2. 데이터 엔지니어링 수명 주기

  • 데이터 엔지니어링 수명 주기(data engineering lifecycle)
    • 데이터 자체와 데이터가 제공해야 하는 최종 목표

 

  • 데이터 엔지니어링 수명 주기 단계
    1. 데이터 생성(generation)
    2. 데이터 저장(storage)
    3. 데이터 수집(ingestion)
    4. 데이터 변환(transformation)
    5. 데이터 서빙(serving)
  • 데이터 엔지니어링의 드러나지 않는 요소(undercurrent)
    • 보안
    • 데이터 관리
    • 데이터옵스
    • 데이터 아키텍처
    • 오케스트레이션
    • 소프트웨어 엔지니어링

 

1-3. 데이터 엔지니어의 진화

  • 1980 - 2000년: 데이터 웨어하우징에서 웹으로
    • 비지니스 데이터 웨어하우스(business data warehouse)와 데이터 웨어하우스(data warehouse) 용어의 출현
    • 데이터 웨어하우징(DW): 시장에서 발생하는 대량 데이터를 처리하고 지원하는 시스템
      • 다수의 프로세서를 사용하는 대규모 병렬 처리 데이터베이스(MPP) 출현으로 확장성 있는 분석을 가능케 함
      • 데이터 웨어하우스와 BI(Business Intelligence) 엔지니어링은 오늘날의 데이터 엔지니어링의 선구자격
  • 2000s: 현대 데이터 엔지니어링의 탄생
    • 90s까지 전통적 모놀리식 RDBMS와 DW는 시스템적 한계사항까지 도달
      • 차세대 시스템은 비용효율적, 확장성과 가용성, 안정성을 갖춰야 했음
    • 대규모 컴퓨팅 클러스터의 출현으로 분산 연산과 분산 저장이 가능케됨 → 빅데이터 시대의 도래
    • 빅데이터: 데이터의 3V (속도 velocity, 다양성 variety, 크기 volume) 특징을 띈 대규모 데이터
    • 아마존의 출현
      • 아마존 웹서비스(AWS)가 외부 서비스로 오픈되면서 퍼블릭 클라우드 서비스가 출현함
      • 가상 하드웨어의 대여함으로써 기업들의 하드웨어, 소프트웨어 관리 리소스를 줄여줌
  • 2000 - 2010s: 빅데이터 엔지니어링
    • 하둡, 오픈소스 빅데이터 도구의 성숙으로 대부분 기업은 최고 수준의 기술업체와 동일한 최첨단 데이터 도구에 접근이 가능해짐
    • 배치 컴퓨팅에서 이벤트 스트리밍으로의 전환 혁신이 발생함 (일/시간 단위의 비실시간성 → 실시간 분석으로 변경)
    • 빅데이터 엔지니어 (big data engineer)의 탄생
      • 대규모 데이터 제공을 위해 상용 하드웨어의 대규모 클러스터를 유지 관리
      • 데이터 도구의 폭발적 증가가 영향을 미침
      • 코드 우선 (code-first) 엔지니어링의 유행
      • 빅데이터에 대한 이해도가 낮아 작은 데이터 문제에도 하둡 클러스터 등 빅데이터 도구를 사용하는 경우들이 발생
      • 빅데이터 엔지니어는 복잡한 도구 유지, 관리에 큰 시간을 들이면서도 비지니스의 통찰력과 가치를 파악하는데엔 장점을 발휘하지 못함
    • 단순화(simplification)로의 회귀
      • 개발자들과 업체들은 빅데이터를 추상화하고 단순화하면서도 사용 가능한 방법을 찾기 시작함
      • 대부분 회사들은 더이상 데이터의 사이즈에 집착하지 않고 데이터 자체를 분석해 문제를 해결하는걸 목표로 함
  • 2020s: 데이터 수명 주기를 위한 엔지니어링
    • 데이터 엔지니어는 기존 모놀리식 프레임워크(저수준 세부 정보) 툴에서 분산/모듈/관리/추상화 도구로 이동시키고 있다.
      • 모던 데이터 스택(modern data stack): 상용 오픈 소스들 및 서드 파티 제품들의 모음
    • 데이터 엔지니어링궁긍적 비지니스 목표를 달성하기 위해 다양한 기술을 조립하고 연결하는 상호 응용 분야로 발전하고 있음

  •  
    • 과거와 비교해 다양한 데이터 툴들이 태동하고 있으며, 데이터 엔지니어들은 이를 회사 환경에 맞게 조립하고 연결하여 사용하고 있음
    • 데이터 수명 주기 엔지니어(data lifecycle engineer)의 출현
      • 추상화와 단순화를 통해 세부사항에 큰 신경을 쓰지 않게 됨
      • 여전히 저수준 데이터 프로그래밍 기술을 유지하고 사용할 능력이 있어야 하지만 예전에 비해 많은 시간을 들이지 않게 됨
      • 대신 보안, 데이터 관리, 데이터옵스, 데이터 아키텍처, 오케스트레이션 및 일반 데이터 수명 주기 관리 등 가치 사슬의 상위 영역까지로 역할이 확대됨
    • 데이터 엔지니어의 태도 변화
      • 과거에는 “가장 큰 데이터”를 잘 보유하고 관리하는 것이 목표
      • 현재는 오픈 소스 프로젝트와 서비스 데이터 관리 및 통제, 사용 및 발견의 용이성, 데이터 품질 향상에 큰 관심을 기울이고 있음
      • 파이프라인 설계 시 개인정보보호, 익명화, 데이터 가비지 수집 및 규정 준수에도 큰 관심과 고민을 가짐

 

1-4. 데이터 엔지니어링과 데이터 과학

  • 데이터 엔지니어링은 데이터 과학의 업스트림 (상위역할)
    • 데이터 엔지니어는 데이터 과학자가 사용할 데이터를 제공하며, 데이터 과학자는 데이터를 유용한 결과로 변환하게 됨
    • 데이터 엔지니어와 데이터 과학 및 분석은 별개의 역할
    • 서로를 보완하지만 다른 개념으로 바라봐야 함
  • 데이터 과학 욕구 단계를 통해 데이터 엔지니어의 출현 이유를 살펴볼 수 있다.

  •  
    • 기존 데이터 과학자(DS)는 ML 모델 구축 및 튜닝에 집중하고 싶지만, 실제론 70-80%의 시간을 계층 구조의 하위 부분(데이터 수집, 정리, 처리)에 시간을 사용하는 것으로 추정
    • DS는 상용 제품 수준의 데이터 시스템을 처리하는 엔지니어링 훈련을 받는 경우가 적은데도 전처리 작업을 수행해야 하는 경우가 많다.
    • 이상적 환경에서 DS는 분석, 실험 및 ML 튜닝같은 피라미드 최상위 계층에 90% 이상의 시간을 할애해야 한다.
    • DE가 계층 구조 최하단 작업에 집중한다면 DS가 더 의미있는 활동을 할 수 있도록 지원할 수 있을 것이다.

 

 

2. 데이터 엔지니어링 기술과 활동

  • 데이터 엔지니어링에 요구되는 기술역량(skill set)
    • 데이터 도구들을 평가하는 방법
    • 데이터 엔지니어링 수명 주기 전반에 도구들이 어떻게 조합되는지에 대한 이해도
    • 원천 시스템에서 데이터가 어떻게 생성되는지에 대한 파악
    • 데이터 처리, 선별 후 DS가 어떻게 소비하고 가치를 창출하는지 과정을 파악
    • 가변적 요소를 처리하고 비용, 민첩성, 확장성, 단순성, 재사용성, 상호 운용성을 비교하며 최적화를 수행
    • 여러 단순하고 추상화된 데이터 도구들을 조합해 민첩한 데이터 아키텍처를 구축할 수 있는 능력
    • 기존 이해 관계자의 주업무를 이해해서 적절한 기능적 이해를 통해 최선의 서비스를 제공

 

2-1. 데이터 성숙도와 데이터 엔지니어

  • 데이터 성숙도(data maturity): 조직 전체에 걸쳐 더 높은 데이터 활용률(utilization), 기능(capability), 통합(integration)을 통해 나아가는 과정
    • 데이터 성숙도는 기업의 규모와는 상관없이 기업이 데이터 경쟁 우위를 얼마나 중요시 하는지로 결정됨
  • 이 책에서는 데이터 성숙도 모델 (DMM, data management maturity)을 단순화해 아래 3단계로 표현한다.
    1. 데이터 시작하기
    2. 데이터 확장하기
    3. 데이터 선도하기

 

1단계: 데이터 시작하기

데이터를 시작하는 기업이 있는 단계

  • 데이터 엔지니어는 DS나 소프트웨어 엔지니어 등 여러가지 모두를 수행하는 제너럴리스트임
  • 목표는 빠르게 움직여서 견인력을 얻고 부가가치를 창출하는 것
  • 시작단계부터 ML에 뛰어드는 것은 비추함
  • DE는 아래 사항에 중점을 둬야 함
    • 기업의 목표를 지원하는 데이터 아키텍처를 정의하고 설계
    • 데이터 아키텍처 내에서 작동할 데이터를 확인하고 검수
    • 견고한 데이터 기반을 구축
  • 데이터 시작하기 단계의 DE에게 주는 팁
    • 기술 부채를 줄일 계획을 세워야 함
    • 내부에서만 작업하지 말고 다른 부서 사람들과도 대화를 해라
    • 역할과 관련없는 과중한 업무를 감당하지 마라
    • 불필요한 기술 복잡성에 얽매이지 마라
    • 경쟁 우위를 창출할 수 있는 경우만 맞춤형 솔루션과 코드를 구현해라

2단계: 데이터 확장하기

어느정도 프로세스를 갖춘 기업으로 임시적으로 데이터 요청을 하지 않고 공식적인 데이터 요청 관행 프로세스가 존재하는 기업

  • 확장성 있는 데이터 아키텍처 구축 및 데이터 중심의 기업으로의 도모를 계획해야 함
  • DE의 목표
    • 공식적 데이터 관행 수립
    • 확장성 있고 견고한 데이터 아키텍처 구축
    • 데브옵스 및 데이터옵스 관행 채택
    • ML 지원 시스템 구축
    • 과중한 업무를 피하고 경쟁우위를 확보할 때만 커스터마이징
  • DE가 살펴볼 문제점들
    • 모든 기술적 의사결정은 고객에게 제공되는 가치에 따라 판단되야 한다.
      • 무조건 최첨단 기술이라고 좋은게 아님. 최첨단 기술은 들이는 시간과 에너지에 비해 좋은 output이 나오지 못할 가능성
    • 팀의 처리량 확장을 위해서는 배포와 관리가 쉬운 솔루션에 집중해야 함
    • 데이터의 실질적 유용성에 대해 다른팀과 소통하고 타팀에 데이터 사용과 활용법에 대한 교육이 필요함

3단계: 데이터 선도하기

데이터 중심의 기업으로 DE의 자동화된 파이프라인과 시스템으로 직원들은 셀프서비스 분석과 ML 수행이 가능함

  • DE의 작업 목표
    • 이전 단계 목표점들을 계속해서 고도화하고 구축함
    • 새로운 데이터의 매끄러운 배포와 사용을 위한 자동화 구축
    • 데이터 관리 및 데이터 옵스 등 데이터의 “기업적” 측면에 집중
      • 데이터 관리에는 데이터 거버넌스와 품질 관리도 포함됨
    • 데이터 카탈로그, 데이터 계보 도구(data lineage), 메타데이터 관리 시스템을 포함해 데이터를 조직 전체에 노출하고 전파하는 도구를 배포
    • ML 엔지니어, 데이터분석가, 소프트웨어 엔지니어 등과 효율적인 협업
    • 사람들과 협업하고 토론할 수 있는 커뮤니티 환경 구축
  • DE가 살펴볼 문제점들
    • 현재 상태에 안주하지 마라. 항상 유지보수 및 개선에 집중해야 한다.
    • 통일되지 않은 기술의 산만함은 오히려 위협요소이다. 경쟁 우위를 제공하는 경우에만 직접 구축한 기술을 활용해라.

 

2-2. 데이터 엔지니어의 배경과 기술

DE는 데이터기술 모두를 이해해야 한다.

  • 데이터 측면에선 데이터 관리의 다양한 모범사례를 이해
  • 기술 측면에선 데이터 엔지니어가 사용할 도구들의 다양한 옵션, 상호작용과 상충관계를 이해해야 함
    • 소프트웨어 엔지니어링, 데이터 옵스, 데이터 아키텍처에 대한 이해 필요

 

2-3. 비지니스 책임

거시적 책임은 데이터 엔지니어 뿐만 아니라 데이터와 기술 분야 모든 종사자들에게 중요한 문제

  • 비기술자 및 기술자와의 커뮤니케이션 방법 파악
    • 커뮤니케이션이 핵심임
  • 비지니스 요건과 제품 요건을 살펴보고 수집하는 방법 이해
    • 구축할 방향을 파악하고 이해관계자가 이에 동의하는지 확인
  • 애자일, 데브옵스, 데이터옵스 문화에 대한 이해
  • 비용 관리
    • 최대한 절감된 비용으로 동일한 가치를 누리도록
  • 지속적 학습
    • 흐름에 뒤쳐지지 않고 학습할 필요성

성공적인 DE는 전체의 큰 그림을 이해하고 비지니스 가치를 극대화할 방법을 파악해야 한다.

  • 데이터 팀은 다른 이해관계자와 커뮤니케이션을 바탕으로 성공하는 경우가 많다.
  • 기술만으로 성공하는 경우는 거의없다.

 

2-4. 기술 책임

  • 성능과 비용을 효율적으로 최적화하는 아키텍처 구축방법을 이해해야 한다.
  • 아키텍처와 구성 기술은 데이터 엔지니어링 수명 주기를 지원하는 구성요소임
  • 데이터 엔지니어는 상용 제품 수준의 소프트웨어 엔지니어링 기술을 가져야 함
  • 코드베이스의 상세한 아키텍처를 깊게 들여다 볼 수 있는 기술을 가지는게 필요
    • 특정 기술 요구 사항 발생 시 기업에 기술적 우위를 제공할 수 있음
    • 실제 상용 제품 수준 코드를 작성할 능력이 없으면 어려움을 겪을 것
    • SQL, 파이썬, 자바, 스칼라, JVM(자바가상머신), 배시 등에 대한 이해가 필요
    • R, js, 고, 러스트, C/C++, 줄리아 등 보조적인 프로그래밍 언어에 대한 이해가 필요할 수 있음 (기업의 주언어에 따라 달라짐).
  • 유능한 데이터 엔지니어는 SQL에 매우 익숙해져야 함
    • 스파크, 프랑크 등 프레임 워크 내에서나 오케스트레이션을 통한 여러 도구 결합이 발생할 경우, SQL을 다른 작업과 함께 구성하는데 필요한 전문 지식 습득이 필요함
    • 숙련된 경우 SQL이 작업에 적합하지 않은 케이스들을 인식할 시, 적절한 대안을 제시하고 코드화 할 수 있음
  • 기본에 충실하면서도 분야의 변화 방향을 빠르게 캐치해야 함
    • 지속적인 개발에 관심을 기울여야 함
    • 새로운 기술이 데이터 엔지니어링 수명 주기에 어떤 도움을 줄 수 있는지 이해할 필요

 

2-5. A에서 B로 이어지는 데이터 엔지니어링 역할의 연속성

  • 기업의 데이터 성숙도에 따라 데이터 엔지니어는 두가지 유형으로 나뉨
    1. A형 데이터 엔지니어 (Abstraction, 추상화)
    • 데이터 아키텍처를 최대한 추상적이고 단순하게 유지해 시간 낭비를 피함
    • 과중한 작업을 피하고 기성제품, 관리형 서비스와 도구들을 이용해 데이터 엔지니어링 수명 주기를 관리
    • 보통 데이터 성숙도 수준과 상관 없이 산업 전반에 걸쳐 다양한 회사에서 근무
    1. B형 데이터 엔지니어 (Build, 구축)
    • 기업의 핵심 역량과 경쟁 우위를 확장
    • 활용할 데이터 도구와 시스템을 구축
    • 보통 2단계나 3단계 회사에서 근무하거나 초기 데이터가 독특해서 맞춤형 데이터 도구가 필요한 회사에서 근무
  • 보통 A형 데이터 엔지니어가 기반 확립을 위해 먼저 채용되고, B형 데이터 엔지니어는 후에 사내에서 교육하거나 인재를 고용함
    • 두 유형의 인재가 모두 같은 사람일수도 있음

 

 

3. 조직 내 데이터 엔지니어

3-1. 내부 vs 외부 대면 데이터 엔지니어

  • 서비스 사용 사례에 따라 데이터 엔지니어 주요 업무는 다음과 같이 나뉨
    1. 외부 대면
    2. 내부 대면
    3. 혼합형
  1. 외부 대면 데이터 엔지니어 (external-facing)
    • 외부용 애플리케이션 사용자와 연계함.
      • 보통 IoT, SNS, E-commerce 플랫폼 사용자
    • 애플리케이션 발생 트랜젝션 및 이벤트 데이터를 수집, 저장, 처리 시스템을 설계, 구축, 관리함

  • 외부 대면 DE가 구축한 시스템은 애플리케이션과 데이터 파이프라인간 피드백 루프를 가짐
  • 외부 대면 시스템의 이슈
    • 내부 대면 시스템보다 훨씬 더 큰 동시성 부하를 처리하는 경우가 많다.
    • 외부대면 DE는 사용자가 실행할 수 있는 쿼리에 훨씬 엄격한 제한을 둬서 사용자가 인프라에 미치는 영향을 최소화해야 한다.
      • 쿼리되는 데이터가 많은 고객 데이터가 단일 테이블에 저장되는 멀티테넌트(multitenant) 경우는 더 신경써야 함.

2. 내부 대면 데이터 엔지니어 (internal-facing)

  • 비지니스 및 내부 이해관계자 요구사항에 집중
    • BI 대시보드, 보고서, 비지니스 프로세스, 데이터 과학, ML 모델용 데이터 파이프라인(ETL), DW생성 및 유지 보수 등이 포함
  • 외부 대면업무와 내부 대면 업무는 혼합될 수 있음
    • 내부 대면 데이터는 일반적으로 외부 대면 데이터의 근간(raw data)임.

 

3-2. 데이터 엔지니어와 기타 기술 역할

  • 데이터 엔지니어는 데이터 생산자(data producer)와 데이터 소비자(data consumer) 사이의 허브 역할
  1. 데이터 생산자 (업스트림 이해관계자)
    1. 소프트웨어 엔지니어
    2. 데이터 아키텍트
    3. 데브옵스 엔지니어 or 사이트 신뢰성 엔지니어(SRE)
  2. 데이터 소비자 (다운스트림 이해관계자)
    1. 데이터 분석가
    2. 데이터 과학자
    3. ML 엔지니어

 

3-3. 데이터 엔지니어와 비지니스 리더십

  • 기업 내 최고 경영진, 그리고 타직군과 데이터간 관계를 설명한 챕터
  • 최고경영진 부류
    • 최고경영자(CEO)
    • 최고 정보 책임자(CIO)
    • 최고 기술 책임자(CTO)
    • 최고 데이터 책임자(CDO)
    • 최고 분석 책임자(CAO)
    • 최고 알고리즘 책임자(CAO-2)
  • 그외 직군과의 소통
    • 프로젝트 매니저
    • 제품 관리자
    • 기타 관리 역할