데이터나 소프트웨어 분야에서 일한다면, 데이터 엔지니어링이 이제는 잘 알려지지 않은 영역에서 벗어나 데이터 과학과 대등한 지위를 누리게 되었다는 사실을 깨달았을 것입니다.
실제 운영 환경에서 데이터 과학 및 분석에 필요한 기반을 구축하는 데이터 엔지니어링은 데이터와 기술 부문에서 가장 인기 있는 주제 중 하나가 되었습니다.
데이터 엔지니어링의 인기는 높아졌지만 데이터 엔지니어링이 실제로 무엇을 의미하는지, 데이터 엔지니어가 무엇을 하는지에 관해서는 여전히 혼란스러워하는 사람들이 많습니다.
데이터 엔지니어링은 기업이 데이터를 활용하는 작업(예를 들면 예측 분석, 기술 분석, 보고서 등)을 시작한 이후 어떤 형태로든 존재해 왔으며, 2010년대 데이터 과학의 부상과 함께 급격히 주목받기 시작했습니다.
데이터 엔지니어링(data engineering)과 데이터 엔지니어(data engineer)의 의미부터 살펴보겠습니다.
데이터 엔지니어링이라는 용어에는 수많은 정의가 존재합니다. 2022년 초 기준으로 ‘데이터 엔지니어링이란 무엇인가?’라는 질문에 대한 구글의 검색 결과는 91,000개 이상의 결과 값으로 나타납니다.
여기서 나름의 정의를 내리기에 앞서, 이 분야의 전문가들이 데이터 엔지니어링을 정의하는 몇 가지 예를 살펴보겠습니다.
"데이터 엔지니어링은 데이터 과학자, 데이터 분석가, 비즈니스 인텔리전스 개발자, 그리고 조직 내의 다른 전문가가 데이터를 사용할 수 있도록 만드는 일련의 작업이다.
대규모의 데이터를 수집 및 저장하면서 추가 분석을 수행할 수 있는 데이터를 준비하기 위한 시스템을 설계하고 구축하려면 데이터 엔지니어와 같은 전담 전문가가 필요하다.
간단히 말해서, 데이터 엔지니어는 조직의 데이터 인프라를 구축하고 운영해 데이터 분석가와 데이터 과학자가 추가 분석을 수행할 수 있도록 준비한다."
- 알텍스소프트의 ‘데이터 엔지니어링의 개념, 프로세스 및 도구’
"데이터 엔지니어링의 첫 번째 유형은 SQL 중심이다. 데이터의 작업 및 기본 저장소는 관계형 데이터베이스에 있다. 모든 데이터 처리는 SQL 또는 SQL 기반 언어로 수행된다. 때때로 이러한 데이터 처리는 ETL 도구를 사용해 수행된다.
데이터 엔지니어링의 두 번째 유형은 빅데이터 중심이다. 데이터 작업 및 기본 스토리지는 하둡(Hadoop), 카산드라(Cassandra), HBase와 같은 빅데이터 기술에 기반한다. 모든 데이터 처리는 맵리듀스(MapReduce), 스파크(Spark), 플링크(Flink)와 같은 빅데이터 프레임워크에서 수행된다.
SQL이 사용되는 동안 기본 처리는 자바, 스칼라, 파이썬과 같은 프로그래밍 언어로 이뤄진다."
- 제시 앤더슨
"기존 역할과 관련해 데이터 엔지니어링 분야는 소프트웨어 엔지니어링에서 더 많은 요소를 가져오는 비즈니스 인텔리전스와 데이터 웨어하우징의 상위집합으로 생각할 수있다. 이 분야는 확장된 하둡 생태계, 스트림 처리, 규모에 따른 컴퓨팅에 대한 개념과 함께 소위 ‘빅데이터’ 분산 시스템의 운영에 관한 전문화를 통합한다."
- 막심 보슈만
"데이터 엔지니어링은 데이터의 이동, 조작, 관리에 관한 모든 것이다."
- 루이스 개빈
다양한 사람이 데이터 엔지니어링을 어떻게 정의하는가에 관한 공통된 맥락을 풀어보면 ‘데이터 엔지니어가 데이터를 가져와 저장하고, 데이터 과학자나 분석가 등이 사용할 수 있도록 준비한다’라는 패턴이 보입니다.
즉, 데이터 엔지니어링은 원시 데이터(raw data)를 가져와 분석 및 머신러닝과 같은 다운스트림 사용 사례를 지원하고, 고품질의 일관된 정보를 생성하는 시스템과 프로세스의 개발, 구현 및 유지 관리를 의미합니다.
데이터 엔지니어링은 보안, 데이터 관리, 데이터 운영, 데이터 아키텍처, 오케스트레이션, 소프트웨어 엔지니어링의 교차점이기도 합니다.
데이터 엔지니어는 원천 시스템에서 데이터를 가져오는 것부터 시작해, 분석 또는 머신러닝과 같은 사용 사례에 데이터를 제공하는 것으로 끝나는 데이터 엔지니어링 수명 주기를 관리합니다.
근시안적으로 기술에 집착하면 더 큰 그림을 놓치기 쉽습니다. 데이터 엔지니어링 라이프사이클을 토대로 데이터 엔지니어의 역할을 파악할 수 있는 전체적인 맥락을 살펴볼께요.
[그림 1] 데이터 엔지니어링 수명 주기
기술에서 벗어나, 데이터 자체와 데이터가 제공해야 하는 최종 목표에 관한 논의로 접근해 봅시다. 데이터 엔지니어링 수명 주기의 단계는 다음과 같습니다.
● 데이터 생성, generation
● 데이터 저장, storage
● 데이터 수집, ingestion
● 데이터 변환, transformation
● 데이터 서빙, serving
데이터 엔지니어링 수명 주기는 전체 수명 주기에 걸쳐 중요한 아이디어인 드러나지 않는 요소라는 개념을 포함합니다. 여기에는 보안, 데이터 관리, 데이터옵스, 데이터 아키텍처, 오케스트레이션, 소프트웨어 엔지니어링이 포함됩니다.
데이터 엔지니어링은 데이터 과학과 어떤 관련이 있을까요? 데이터 엔지니어링이 데이터 과학의 하위 분야라는 주장과 함께 일부 논쟁이 벌어지고 있습니다. 그런 논쟁에서 우리는 데이터 엔지니어링이 데이터 과학 및 분석과 별개라고 가정해 봅니다.
이들은 서로를 보완하지만, 분명히 다른 개념입니다. 데이터 엔지니어링은 데이터 과학의 업스트림에 위치합니다. 데이터 엔지니어는 데이터 과학자가 사용할 입력값을 제공하며, 데이터 과학자는 이렇게 입력된 값들을 유용한 결과로 변환한다는 의미입니다.
[그림 2] 데이터 엔지니어링은 데이터 과학의 업스트림에 위치
데이터 과학 욕구 단계를 살펴봅시다. 2017년 모니카 로가티는 기사를 통해 다음과 같은 계층 구조를 발표했습니다. 이 계층 구조는 AI와 머신러닝(ML)이 데이터 이동 및 저장, 수집, 인프라와 같은 더 ‘평이한’ 영역에 근접했음을 보여줍니다.
[그림 3] 데이터 과학 욕구 단계
많은 데이터 과학자가 ML 모델을 구축하고 튜닝하기를 원하지만, 실제 작업 시간의 70~80%는 계층 구조상 하위 세 부분(데이터 수집, 데이터 정리, 데이터 처리)에 시간을 소비하는 것으로 추정되며, 분석과 ML에 할애하는 시간은 극히 일부에 불과합니다.
로가티는 기업이 AI나 ML과 같은 영역을 다루기 전에 견고한 데이터 기반(계층 구조의 하위 3개 수준)을 구축해야 한다고 주장합니다.
데이터 과학자는 보통 상용 제품 수준의 데이터 시스템을 엔지니어링하도록 훈련받지 않으며, 데이터 엔지니어의 기술적 지원과 리소스의 부족 때문에 이러한 작업을 닥치는 대로 수행합니다.
이상적인 환경에서 데이터 과학자는 분석, 실험 및 ML과 같은 피라미드의 최상위 계층에 90% 이상의 시간을 집중해야 합니다. 데이터 엔지니어가 계층 구조의 최하단에 있는 작업에 집중할 때, 데이터 과학자가 성공할 수 있는 견고한 기반을 구축할 수 있습니다.
데이터 과학이 고급 분석과 ML을 주도하는 가운데, 데이터 엔지니어링은 데이터를 얻는 것과 데이터에서 가치를 얻는 것 사이의 경계를 넘나듭니다. 우리는 데이터 엔지니어링이 데이터 과학과 똑같이 중요하고 가시성을 지니며, 데이터 엔지니어가 데이터 과학을 실제 현장에서 성공하도록 만드는 데 중요한 역할을 수행하리라 믿고 있습니다.
[그림 4] 데이터 엔지니어는 데이터를 수집하고 데이터로부터 가치를 제공
데이터 엔지니어의 기술 역량(스킬셋, skill set)에는 보안, 데이터 관리, 데이터옵스, 데이터 아키텍처 및 소프트웨어 엔지니어링과 같은 데이터 엔지니어링의 ‘드러나지 않는 요소’가 포함됩니다.
이러한 기술 역량을 사용하려면, 데이터 도구들을 평가하는 방법과 데이터 엔지니어링 수명 주기 전반에 걸쳐 이 도구들이 어떻게 조합되는지를 이해해야 합니다.
원천 시스템에서 어떻게 데이터가 생성되는지, 데이터를 처리하고 선별한 후에 분석가와 데이터 과학자가 이를 어떻게 소비하고 가치를 창출할지 파악하는 것도 중요합니다.
마지막으로, 데이터 엔지니어는 수많은 복잡한 가변적 요소를 처리하고 비용, 민첩성, 확장성, 단순성, 재사용성, 상호 운용성의 축에 따라 지속해서 최적화를 수행해야 합니다.
[그림 5] 데이터 엔지니어링의 균형 잡기
앞서 설명한 바와 같이, 최근까지 데이터 엔지니어는 데이터 솔루션을 구축하기 위해 몇몇 강력하고 모놀리식한 기술을 사용하는 방법을 알고 이해해야 했습니다.
이러한 기술을 활용하려면 소프트웨어 엔지니어링, 네트워킹, 분산 컴퓨팅, 스토리지 또는 기타 저수준의 세부 사항을 정교하게 이해해야 합니다. 이들은 클러스터 관리와 유지 보수, 오버헤드 관리, 파이프라인 작업과 변환 작업 생성 등의 업무를 담당합니다.
오늘날 데이터 도구 환경은 관리 및 구현하기에 훨씬 간편해졌습니다. 최신 데이터 도구는 워크플로를 상당히 추상화하고 단순화합니다.
그 결과 데이터 엔지니어는 비즈니스에 가치를 제공하는, 가장 단순하고 비용 효율적인 업계 최고 수준의 서비스 간 균형을 맞추는 데 주력하고 있습니다. 또한 데이터 엔지니어는 새로운 트렌드가 출현함에 따라 진화하는 민첩한 데이터 아키텍처를 구축하리라 예상됩니다.
그렇다면 데이터 엔지니어가 하지 않는 일은 무엇일까요?
보통 데이터 엔지니어는 ML 모델을 직접 구축하거나, 보고서 또는 대시보드를 만들거나, 데이터 분석을 수행하거나, 주요 성능 측정 지표(KPI)를 구축하거나, 소프트웨어 애플리케이션을 개발하지는 않습니다. 다만 데이터 엔지니어가 이해관계자에게 최선의 서비스를 제공하려면 이러한 영역에 관한 적절한 기능적 이해가 필요합니다.
이 글은 <견고한 데이터 엔지니어링> 도서 내용 일부를 발췌 편집하여 작성되었습니다. 실용적인 데이터 엔지니어링의 A부터 Z까지, 이에 대한 보다 자세한 내용은 하기 링크에서 살펴보실 수 있습니다.
이전 글 : 현장에서의 기록, ‘데이터 엔지니어’에게 아찔했던 순간
다음 글 : 테크니컬 라이터는 무슨 일을 하나요?
최신 콘텐츠