< 1. 데이터 엔지니어링 상세 >

 

- 데이터 엔지니어링 분야는 소프트웨어 엔지니어링에서 더 많은 요소를 가져오는 비즈니스 인텔리전스와 데이터 웨어하우징의 상위집합(superset)으로 생각할 수 있다.

- 데이터 엔지니어링은 원시 데이터를 가져와 분석 및 머신러닝과 같은 다운스트림 사용 사례를 지원하는, 고품질의 일관된 정보를 생성하는 시스템과 프로세스의 개발, 구현 및 유지 관리이다.

- 데이터 엔지니어링은 보안, 데이터 관리, 데이터 운영, 데이터 아키텍처, 오케스트레이션, 소프트웨어 엔지니어링의 교차점이다.

- 데이터 엔지니어링의 수명주기(data engineering lifecycle)는 다음과 같다. 데이터 생성(generation), 데이터 저장(storage), 데이터 수집(ingestion), 데이터 변환(transformation), 데이터 서빙(serving)

- 빅데이터의 5V는 다음과 같다.

- 속도(velocity) : 필요한 시간내에 처리 가능해야 한다.

- 다양성(variety) : 정형/비정형/반정형 데이터 모두 처리 가능해야 한다.

- 크기(volume) : 대규모 데이터를 저장, 정리, 검색 할 수 있어야 한다.

- 정확성(veracity) : 데이터 품질이 좋아야 한다.

- 가치(value) : 데이터로부터 가치, 인사이트를 얻을 수 있어야 한다.

- 전통적인 기업의 지휘 통제 접근 방식과는 대조적으로 탈중앙화(decentralization)와 민첩성(agility)에 중점을 두고 있다.

- 데이터 엔지니어링이 데이터 과학 및 분석과 별개(seperate)라고 가정한다.

- 데이터 엔지니어링은 데이터를 얻는 것과 데이터에서 가치를 얻는 것 사이의 경계를 넘나든다.

- 데이터 엔지니어의 기술 역량(skill set)에는 보안, 데이터 관리, 데이터 옵스, 데이터 아키텍처 및 소프트웨어 엔지니어링과 같은 데이터 엔지니어링의 '드러나지 않는 요소(undercurrent)'가 포함된다.

- 원천 시스템에서 어떻게 데이터가 생성되는지, 데이터를 처리하고 선별한 후에 분석가와 데이터 과학자가 이를 어떻게 소비하고 가치를 창출할지 파악하는 것도 중요하다.

- 데이터 엔지니어는 수많은 복잡한 가변적 요소를 처리하고 비용, 민첩성, 확장성, 단순성, 재사용성, 상호 운용성의 축에 따라 지속해서 최적화를 수행해야 한다.

- 데이터 엔지니어는 소프트웨어 엔지니어링, 네트워킹, 분산 컴퓨팅, 스토리지, 기타 저수준의 세부 사항을 정교하게 이해해야 한다.

- 데이터 엔지니어는 클러스터 관리와 유지 보수, 오버헤드 관리, 파이프라인 작업과 변환 작업 생성 등의 업무를 담당한다.

- 데이터 엔지니어가 하지 않는 일은 무엇일까? ML 모델을 직접 구축하거나, 보고서 혹은 대시보드를 만들거나, 데이터 분석을 수행하거나, 주요 성능 측정 지표(KPI)를 구축하거나, 소프트웨어 애플리케이션을 개발하지 않는다.

- 데이터 성숙도(data maturity)는 조직 전체에 걸쳐 더 높은 데이터 활용률(utilization), 기능(capability), 통합(integration)을 향해 나아가는 과정이다. 중요한 것은 데이터가 경쟁 우위로 활용되는 방식이다.

- 데이터 성숙도 모델에는 데이터 관리 성숙도(data management maturity. DMM) 등 여러 종류가 있으며, 데이터 엔지니어링에 유용하면서도 단순한 모델을 하나만 고르기는 쉽지 않다.

- 내가 설계한 데이터 아키텍처 내에서 작동할 데이터를 확인하고 검수(audit)한다.

- 조기에 성공을 거두면 조직 내에서 데이터의 중요성이 확립될 것이다.

- 조기 성과는 기술 부채를 야기할 수 있다는 점 역시 명심해야한다.

- 구분되지 않는 과중한 업무들을 감당하지 않도록 주의하다. 불필요한 기술적 복잡성에 얽매이지 말자. 가능하다면 기성 턴키 솔루션(turnkey solution)을 사용하자.

- 확장성 있고 견고한 데이터 아키텍처를 구축하는 것이 데이터 엔지니어의 목표이다.

- 확장의 주요 병목 현상은 클러스터 노드, 스토리지 또는 기술이 아니라 데이터 엔지니어링 팀이다. 팀의 처리량을 확장하려면 배포와 관리가 쉬운 솔루션에 집중하자.

- 새로운 데이터 원천을 매끄럽게(seamless) 배포하고 실질적인 가치를 창출할 수 있다.

- 데이터 엔지니어는 사용자와 시스템이 항상 데이터를 활용할 수 있도록 돕는 적절한 제어와 실질 사례를 구현한다.

- 현재 상태에 안주하는 것은 중대한 위협 요소이다. 조직이 3단계에 도달하면 항상 유지 보수와 개선에 집중해야 하며, 그렇지 않으면 이전 단계로 후퇴할 위험이 있다.

- 공식화된 경로는 없지만, 데이터 엔지니어가 성공하는 데 필수적인 지식이 있다. 데이터 엔지니어는 정의상 데이터와 기술을 모두 이해해야 한다.

- 데이터 측면에서는 데이터 관리의 다양한 모범 사례를 알아야 한다.

- 기술 측면에서는 데이터 엔지니어가 도구들의 다양한 옵션, 상호 작용 및 상충 관계를 알아야 한다.

- 그러려면 소프트웨어 엔지니어링, 데이터 옵스 및 데이터 아키텍처를 이해해야 한다.

- 요약하자면, 데이터 엔지니어는 데이터 소비자(데이터 분석가 및 데이터 과학자)의 요구 사항과 조직 전체에 걸친 데이터의 광범위한 의미를 이해해야 한다.

- 데이터 엔지니어링은 전체적이고 종합적인 실무이며, 최고의 데이터 엔지니어는 비즈니스 및 기술적 관점에서 그들의 책임을 판단한다.

- 조직 전체 사람들과 관계를 맺고 신뢰를 확립할 수 있어야 한다.

- 조직의 계층 구조는 어떤지, 누가 누구에게 보고하는지, 사람들이 어떻게 소통하는지, 어떤 사일로(silos)가 존재하는지 등의 사안에 관심을 둘 것을 권장한다.

- 뛰어난 가치를 제공하면서도 비용을 절감할 수 있다면 매우 성공적일 것이다.

- 가치 실현 시간, 총소유비용 및 기회비용에 맞게 최적화하는 방법을 알아보자.

- 데이터 팀은 다른 이해관계자와의 커뮤니케이션을 바탕으로 성공하는 경우가 많으며, 따라서 성공이나 실패 여부가 기술적인 이슈에 따라 결정되는 경우는 거의 없다.

- 조직을 탐색하고, 요건을 파악하고, 비용을 관리하고, 지속해서 학습하는 방법을 알면 경력을 쌓고자 기술적 능력에만 의존하는 데이터 엔지니어와 차별화할 수 있다.

- 데이터 엔지니어는 상용 제품 수준의 소프트웨어 엔지니어링 기술을 갖추어야하며, 다양한 언어에 능숙해져야 한다.

- 이제 엔지니어는 관리형 오픈 소스와 단순한 플러그 앤 플레이 Saas(Software-as-a-service) 제품을 사용한다.

- 데이터 엔지니어는 이제 고수준의 추상화에 주력하거나, 오케스트레이션 프레임워크 내에서 파이프라인을 코드로 작성하는 작업에 더 집중한다.

- SQL 은 데이터베이스와 데이터 레이크의 가장 일반적인 인터페이스다.

- 다양한 개발이 진행되면서 데이터 엔지니어링 수명 주기에서 SQL 의 효용성이 대폭 향상했다.

- 스파크 SQL, 구글 빅쿼리, 하이브 및 기타 여러 데이터 도구는 선언적이고 집합론적인 SQL 시맨틱(semantic)을 사용해 대량의 데이터를 처리할 수 있다.

- 데이터 엔지니어링 팀의 처리량에 있어 '시간'이 주요 제약 사항이라는 점을 고려하면, 엔지니어는 단순함과 높은 생산성을 겸비한 도구를 채택해야 한다.

- 숙련된 엔지니어는 SQL 이 작업에 적합한 도구가 아닌 경우를 인식하고 적절한 대안을 선택해 코드화할 수 있다.

- 새로운 기술이 등장했을 때, 그 흐름에 동참하지 못하면 도태될 것이다.

- 변화하지 않는 것을 이해할 수 있도록 기본에 충실하되, 분야가 어느 방향으로 전개될지를 파악할 수 있도록 지속적인 개발에 관심을 기울이자.

- 외부 대면(external-facing) 데이터 엔지니어가 구축한 시스템에는 애플리케이션에서 데이터 파이프라인으로 그리고 다시 애플리케이션으로 향하는 피드백 루프가 있다.

- 외부 대면 쿼리 엔진은 내부 대면 시스템보다 훨씬 더 큰 동시성 부하를 처리하는 경우가 많다.

- 엔지니어는 사용자가 실행할 수 있는 쿼리에 엄격한 제한을 두어 단일 사용자가 인프라에 미치는 영향을 제한해야 한다.

- 보안은 외부 쿼리에서 훨씬 더 복잡하고 민감한 문제이며, 특히 쿼리되는 데이터가 멀티테넌트(multitenant)인 경우라면 더욱 그렇다. 여기서 말하는 '쿼리되는 데이터가 멀티테넌트인 경우'는 '많은 고객의 데이터가 단일 테이블에 저장되는 경우'를 의미한다.

- 내부 대면(internal-facing) 데이터 엔지니어는 일반적으로 비즈니스 및 내부 이해 관계자의 요구 사항에 중요한 활동에 집중한다. 예를 들면 대시보드 및 보고서 작성, ML 모델용 데이터 파이프라인 및 데이터 웨어하우스 생성, 유지 보수 등이 포함된다.

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts