데이터 엔지니어가 되려고 하는 나는 가장 기본을 놓치고 있었다.
새로운 기술, 흥미로운 오픈소스를 공부하는 것 이전에 가장 중요한 ETL의 개념을 놓치고 있었다.
누군가 ETL이 뭔지 설명해달라는 물음에 제대로 답하지 못했다면 긴장해서가 아니라 잘 모르고 있는 것임을 인정해야 한다.
보통 데이터 엔지니어의 가장 주요한 업무는 결국 ETL이라고 생각한다.
나는 놓치고 있던 데이터 엔지니어링의 기본 중의 기본 ETL을 정리해보려고 한다.
여러 곳에서 ETL이란 무엇인가를 잘 설명해주고 있는데,
나는 스파크를 만들었던 개발자들이 설립한 Databricks라는 곳에서 정의되고 설명해놓은 것을 토대로 간결하게 요약해 보았다.
https://databricks.com/kr/glossary/extract-transform-load
ETL이란? (Extract - Transform - Load)
ETL이란 추출, 변환과 로드를 뜻하며 데이터 엔지니어가 다양한 소스로부터 데이터를 추출, 데이터를 사용 가능하고 믿을 수 있는 리소스로 변환, 그 데이터를 시스템에 로드하여 최종 사용자가 액세스하고 다운스트림 방식으로 사용하여 비즈니스 문제를 해결할 수 있게 처리하는 과정을 말한다.
ETL의 핵심은 데이터 조직이 신뢰할 수 있는 데이터를 만들어 주는 것이다.
비즈니스 의사 결정을 위한, 혹은 서비스 개선을 위해 필요한 데이터는 반드시 데이터 엔지니어의 손길을 꼭 거쳐야만 한다.
데이터 조직의 숨은 조력자 데이터 엔지니어의 가장 큰 역할은 바로 신뢰할 수 있는 데이터를 만들어 주는 일이 될 것이다.
ETL Process
추출 Extract
소스에서 데이터를 추출하는 것을 Extract라고 한다.
소스는 대개 비즈니스 시스템, API, 센서 데이터, 마케팅 툴과 트랜잭션 데이터베이스 등 여러 가지 종류로 이루어져 있다.
추출을 수행하는 방법은 크게 세 가지로 나눌 수 있다.
- 부분 추출 – 데이터를 얻는 가장 쉬운 방법은 레코드가 변경되면 소스 시스템이 알려주는 것.
- 업데이트 알림 포함을 포함한 부분 추출 - 시스템에 따라 업데이트가 발생해도 알림을 제공할 수 없는 경우가 있다. 다만 변경된 레코드를 지목하여 그러한 레코드의 추출을 제공할 수 있다.
- 전체 추출 - 어느 데이터가 변경되었는지 전혀 파악할 수 없는 시스템인 경우, 시스템에서 데이터를 추출할 가능성이 있는 유일한 방식은 전체 추출뿐이다. 이 방식을 취하면 마지막 추출의 사본을 같은 형식으로 추출하여 변경 사항을 확인해야 한다.
변환 Transform
소스에서 추출된 원시 데이터를 변환하여 다양한 애플리케이션에서 사용할 수 있는 형식으로 지정한다. 이 단계에서는 데이터를 정리, 매핑, 변환(대개 특정 스키마로)하여 운영 요구사항에 부합하도록 설정한다.
보통은 데이터를 대상 데이터 소스에 바로 로드하는 것이 아니라, 준비(staging) 데이터베이스에 업로드하는 것이 보편적이다. 이 단계를 거치면 혹시나 무언가 계획에서 어긋난다 하더라도 금세 롤백할 수 있다. 이 단계를 진행하면서 규정 준수 목적으로 감사 보고서를 생성할 수도 있고, 각종 데이터 문제점을 진단하여 복구할 수도 있다.
원문을 퍼오면서 간략하게 요약해보려고 했는데 요약할 거리가 없다.. b
시스템 디자인에서 고려해야 하는 사항 중 하나인 인터페이스 디자인은 주요 객체를 파악하고, 데이터의 모양을 정하고 그에 맞는 DB를 선택하는 과정을 말한다. 이 과정이 바로 변환(Transform) 단계를 위한 설계가 될 것이다.
로드 Load
마지막으로, 로드 기능은 변환한 데이터를 준비 영역에서 대상 데이터베이스에 쓰는(저장) 프로세스를 말하며, 이 데이터베이스는 기존에 존재하던 것이어도 되고 아니어도 된다. 이 단계는 각각 ETL 툴을 써서, 아니면 맞춤형 코드를 써서 수행하면 된다.
'Development > Data Engineering' 카테고리의 다른 글
tweepy 로 트위터 API V2 스트리밍 하기 (1) | 2022.05.25 |
---|---|
[Apache Flink] 플링크 v1.15 TableEnviroment execute() 메서드 삭제 (0) | 2022.05.12 |
[Docker] M1 맥 도커 confluentinc/cp-kafka 대체 이미지 (0) | 2022.04.28 |
[Apache Spark] 아파치 스파크 RDD란? (0) | 2022.04.19 |
[Apache Airflow] 아파치 에어플로우란? (0) | 2022.04.16 |
댓글