1.1 데이터 엔지니어링이란?
책에서는 다양한 사람들의 의견을 종합하여 다음과 같이 정의하고 있다.
raw data를 통해 분석, 머신러닝과 같은 방식을 지원하고, 고품질의 일관된 정보를 생성하는 시스템의 개발, 구현, 유지 관리를 수행하며 기술적인 입장에서는 보안, 데이터 관리, 데이터 운영, 데이터 아키텍처, 오케스트레이션, 소프트웨어 엔지니어링의 교차점이다.
데이터 엔지니어는 위의 일을 수행하는 사람으로 정의할 수 있다.
데이터 엔지니어링 수명 주기
책에서 강조하는 중요한 아이디어로 기술의 영역이 아닌 데이터 자체와 데이터가 제공해야하는 최종 목표에 관한 이야기를 나눈다.
수명 주기의 단계는 다음과 같다.
- 데이터 생성
- 데이터 저장
- 데이터 수집
- 데이터 변환
- 데이터 서빙

역사
역사는 그대로 반복되지 않지만, 그 흐름은 분명 반복된다. - 마크 트웨인
위의 말을 기반으로 보면 데이터 엔지니어링을 이해하기 위해서는 해당 분야가 어떻게 발전했는지에 관한 맥락부터 잘 파악해야 한다.
데이터웨어하우징에서 웹
1980년부터 2000년대 까지의 이야기로 데이터 엔지니어의 탄생을 둔다. 1989년 빌 인먼에 의해 데이터 웨어 하우스라는 용어가 공식적으로 생성되었고 이는 IBM의 엔지니어들이 관계형 데이터베이스, 구조적 질의 언어를 개발한 이후 대중화되었다.
이러한 데이터 시스템의 성장에 따라 기업 Report, BI를 위한 툴과 데이터 파이프라인이 필요했는데 데이터 웨어하우징은 이러한 막대한 양의 데이터를 지원하며 다수의 프로세서를 사용하는 새로운 대규모 병렬 처리 데이터베이스의 형태로 나타났다. 즉, 이는 오늘날의 데이터 엔지니어링의 선구자이며 중심적인 역할을 수행하게 된 계기가 된 것이다.
1990년 중반, 아마존, 야후와 같은 웹 기업이 생성되며 인터넷이 주류를 이루고 거대한 인프라 비용, 라이선스 부담 등이 발생하며 웹 어플리케이션은 어마어마한 데이터의 규모를 발생시켰다.
현대 데이터 엔지니어링의 탄생
2000년대 초, 모놀리식 관계형 디비와 데이터 웨어하우스에 의존하며 시스템을 한계까지 몰아붙이다가 대규모 컴퓨팅 클러스터에서의 분산 저장 및 연산을 구현하는 혁신을 통해 빅데이터 시대를 일으키게 되었다.
빅데이터 인간의 행동 및 상호 작용과 관련한 패턴, 경향, 연관성을 밝히고자 계산적으로 분석될 수 있는 큰 데이터셋 데이터의 3V로 간결하게 설명되기도 한다.(속도, 다양성, 크기)
또한, 이 당시에 구글에서 Google File System에 관련하여 논문과 데이터 처리 패러다임인 MapReduce에 대해 논문을 발표하여 이러한 것들이 추후의 대규모 데이터 처리와 관련한 오픈 소스들의 생태계의 가능성을 넓히고 테라바이트, 페타바이트 규모의 데이터를 처리할 수 있게 되었다.
빅데이터 엔지니어링
맵리듀스 출현과 함께 코드 우선 엔지니어링의 유행과 함게 다양한 데이터 도구(하둡, 얀, HDFS 등)의 등장으로 핵심 기술 개발에서 데이터 전달로 강조점이 옮겨졌다. 즉, 빅데이터 엔지니어가 복잡한 도구를 유지 관리하는 관점에서 오픈소스의 등자오가 다양한 서드파티의 등장으로 인해 빅데이터를 추상화, 단순화, 사용 가능성의 발견의 관점으로 옮겨진 것이다.
데이터 수명 주기를 위한 엔지니어링
해당 책에서 논의하고자 하는 데이터 엔지니어를 의미한다. 이는 저수준의 데이터 프로그래밍에 집중하는 것이 아닌 보안, 데이터 관리, 데이터옵스, 데이터 아키텍처, 오케스트레이션과 같은 영역에 점점 집중해야한다는 것이다. 또한, ‘가장 큰 데이터’를 보유하는 것에 초점을 맞추기 보다 데이터 관리와 통제, 사용 및 발견의 용이성, 품질 향상에 더 많은 관심을 요구한다.
데이터 엔지니어링 vs 데이터 과학
해당 책에서는 데이터 엔지니어링을 데이터 과학의 업스트림에 위치한다고 본다. 즉, 데이터 엔지니어는 데이터 과학자가 사용할 입력값을 제공하고 데이터 과학자는 이를 이용해 유용한 결과로 변환하는 것을 의미한다.

[!데이터 과학 욕구 단계] >
> 주로 데이터 과학자는 최상위 단계의 시간을 다루고 데이터 엔지니어가 하위 개념들을 다루게 된다. 기업은 이러한 최상위 계층을 다루기 이전 수집, 이동/저장, 탐색/변환의 견고한 기반을 다루어야한다고 한다.
1.2 데이터 엔지니어링 기술 및 활동
해당 책에서 데이터 엔지니어가 되기 위해서는 다음의 내용들을 중요시 한다.
- 보안
- 데이터 관리
- 데이터옵스
- 데이터 아키텍처
- 소프트웨어 엔지니어링
- 데이터 엔지니어링 수명에 걸친 도구들의 조합 방법
- 데이터 생성, 처리, 선별 후 소비 가치 파악
- 복잡한 요소 처리 및 최적화 수행
데이터 성숙도
조직 전체에 걸쳐 더 높은 데이터 활용률, 기능, 통합을 향해 나아가는 과정
[!데이터 성숙도 모델] >
1. 데이터로 시작하기
기업 애매모호하고 느슨한 목표를 가진 경우로 데이터 아키텍처와 인프라 이방에서 개발의 초기 단꼐에 있는 상태이다.
해당 단계의 데이터 엔지니어 제너럴리스트로 데이터 과학자, 소프트웨어 엔지니어 등의 여러 역할을 수행한다. 즉, 빠르게 움직이고, 견인력을 얻어 부가가치를 창출하는 것이 목표이다.
중점 사항을 정리하자면 다음과 같다.
- 관계자로부터 지원을 받기 위해 기업의 목표를 지원할 아키텍처 설계
- 데이터 아키텍처 내에서 작동할 데이터 확인 및 검수
- 가치를 창출할 보고서, 모델을 생성할 수 있는 견고한 데이터 기반 구성 (해당 과정에서 보고서, 모델의 생성을 이룰 수도 있음)
TIP
> - 데이터를 이용한 가시적인 성공의 중요성
> - 향후 서비스 제공과 관련해 기술 부채를 줄이기 위한 노력
> - 고립되지 않은 환경에서 다양한 피드백(외부, 경영 이해관계자의 관점) 수용
> - 경쟁 우위의 경우만 맞춤형 솔루션 및 코드 구축
> - 불필요한 기술적 복잡성에 얽매이지 말기.
2. 데이터로 확장하기
해당 과정에서는 확장성 있는 데이터 아키텍처를 구축하고, 기업 관점에서 데이터 중심인 미래를 계획하게 되기에 데이터 엔지니어는 해당 과정에서 스페셜리스트로의 역할을 수행해야 한다. 즉, 데이터 엔지니어링 수명 주기의 측면에 초점을 맞춰야하는 것이다.
중점 사항을 정리하자면 다음과 같다.
- 공식적인 데이터 관행 수립
- 확장성을 겸비하며 견고한 데이터 아키텍처 구축
- 데브옵스 고려
- ML을 지원하는 시스템 구축
3. 데이터로 선도하기
해당 단계를 통해 데이터 엔지니어가 작성한 자동화된 파이프라인을 통해 BI도구 활용, ML을 수행할 수 있게 된다. 즉, 실질적인 가치를 창출할 수 있다는 것이다. 해당 부분에서는 2단계보다 더 전문화되며 이전 단계와 함께 다음의 작업 중점사항이 존재한다.
- 새로운 원시 데이터의 매끄러운 사용을 위한 자동화 구축
- 경쟁 우위를 점하기 위한 데이터 활용 BI도구, 시스템 구축에 주력
- 기업적 측면의 데이터관리 집중
- SW 엔지니어, ML 엔지니어, 분석가와 협업
- 데이터를 조직 전체에 노출하고 전파하는 도구 배포
데이터 엔지니어의 전환 방법
데이터 엔지니어가 성공하기 위한 필수적인 지식으로 정의상 데이터, 정의상 기술 모두를 이해해야한다.
데이터 측면 데이터 관리의 다양한 모범 사례 이해
기술 측면 도구들의 다양한 옵션, 상호 작용 및 상충 관계 이해
최종적으로 데이터 엔지니어는 데이터 분석가, 과학자의 요구사항과 조직 전체에 걸친 데이터의 광범위한 의미를 이해하고 기술적인 부분을 이해해야한다. 즉, 종합적인 실무라고 볼 수 있다.
비즈니스 책임
데이터 엔지니어의 직무 외에서도 필요한 거시적 책임으로 책에서는 다음의 내용들이 소개되고 있다.
- 비기술자 및 기술자와의 커뮤니케이션 방법 파악
- 비즈니스 요건과 제품 요건을 살펴보고 수집하는 방법
- 에자일, 데브옵스, 데이터옵스의 문화적 기반 이해
- 지속적 학습
이를 굳이?라고 생각할 수 있지만 데이터 엔지니어는 항상 전체적인 큰 그림을 이해하고 비즈니스 가치를 극대화하는 방법을 파악하여 데이터를 처리해야한다. 이러한 과정에서 위의 비즈니스 책임들을 명시한 채로 경력을 쌓아간다면 기술적 능력에만 의존하는 데이터 엔지니어와 차별화될 수 있다.
기술 책임
아키텍처와 구성 기술은 데이터 엔지니어링 수명 주기를 지원하는 구성 요소로 데이터 엔지니어는 패키지 혹은 자체 개발한 패키지를 통해 성능과 비용을 높은 수준으로 최적화할 수 있어야 한다.
최근에는 고수준의 추상화에 주력하며 SaaS 제품을 이용하기도 하지만 실제 상용 제품 수준의 코드를 작성하지 못하는 데이터 엔지니어는 추후 충분한 어려움을 겪게 될 수 있기에 다음의 기술적인 부분을 이해할 필요가 있다.
- SQL
- Python
- JVM 언어
- Bash
[!추상화에서 빌드로 이어지는 데이터 엔지니어링의 역할] > 초기에는 시판되는 기성 제품, 고나리형 서비스와 도구들을 통해 데이터 엔지니어링 수명 주기를 관리한다. 이러한 개발자는 데이터 성숙도와 관계없이 산업계 전반에 걸쳐 다양한 회사에서 근무하며 단순한 아키텍처 유지를 통해 시간 낭비를 방지한다. 이러한 개발자를 추상화된 데이터 엔지니어로 보면 구축을 중점으로하는 데이터 엔지니어는 기업의 핵심 역량과 경쟁 우위를 확장하며 도구들을 구축하게 된다. 즉, 성숙도 범위에서 2~3단계에 해당하게 되는 것이다. > 이 두 특성의 개발자는 상황마다 다르게 필요로 하지만 하나의 단계로 이해하면 좋을 것 같다.
> 주로 데이터 과학자는 최상위 단계의 시간을 다루고 데이터 엔지니어가 하위 개념들을 다루게 된다. 기업은 이러한 최상위 계층을 다루기 이전 수집, 이동/저장, 탐색/변환의 견고한 기반을 다루어야한다고 한다.