이 페이지에서는 "ETL"이라는 데이터 엔지니어링 용어에 대해 설명드리려 합니다.
또한, 저희 회사는 데이터 분석 기반 구축을 위한 ETL 기능을 갖춘 "TROCCO"를 제공합니다. ETL 도구의 사용을 검토하고 계시다면 언제든지 문의해 주세요.
ETL"은 "Extract / Transform / Load"의 세 단어의 첫 글자를 딴 약어입니다. 이 세 단어는 데이터 분석에서 데이터 처리 프로세스를 나타내며, 한국어로 번역하면 아래와 같은 의미가 됩니다.
데이터 처리를 위해 임의의 장소에서 데이터를 "추출"하고, 프로그램 등을 통해 "변환"한 후, 임의의 장소(DWH 등)에 "저장"하는 일련의 데이터 처리 과정을 나타냅니다.
앞서 설명한 대로, "ETL"이 데이터 처리 프로세스의 일련의 흐름을 나타내고 있음을 이해했다면. 여기에서는 데이터 분석에서 ETL의 위치에 대해 좀 더 자세히 설명하겠습니다.
일반적인 데이터 기반을 정비할 때 사용되는 데이터 계층(청록색)과, 이를 연계 및 연결하기 위한 기술(주황색)을 아래 그림에 나타내어 보았습니다.
그림의 중앙에 있는 데이터 레이크, DWH(데이터 웨어하우스), 데이터 마트의 3단계 구조를 만드는 것이 일반화되었습니다. 이번에는 3단계 구조의 세부 사항은 생략하지만, 이들의 근원이 되는 데이터가 바로 "데이터 소스"입니다.
데이터 소스는 다양한 형태로 기업 내에 존재하며, 예를 들어 범용 DB(RDBMS)에 저장되어 있을 수도 있고, Salesforce와 같은 SaaS형 서비스에 저장되어 있을 수도 있습니다.
이러한 데이터 소스를 분석에 활용하려면(DWH 등에 저장할 때) ETL이 필요합니다.
또한, 그림에 ETL이 두 군데 나타나 있지만, 각각의 처리 내용에 큰 차이는 없으며 출력 대상의 위치나 형식만 다릅니다.
한편, "DWH→데이터 마트" 부분에서는 "ELT"라는 새로운 용어가 등장합니다. 이는 ETL의 "Transform / Load" 순서를 바꾼 데이터 처리 방식입니다.
데이터 처리는 DWH에 데이터를 로드하기 전에 변환 처리를 수행하는 "ETL"과, DWH에 데이터를 로드한 후 변환 처리를 수행하는 "ELT"의 두 가지 방식이 있으며, 전자는 프로그래밍 언어를 사용하여 변환 처리를 수행하는 반면, 후자는 DWH에서 SQL을 사용해 처리를 수행하는 차이점이 있습니다.
ETL의 구현은 크게 다음의 세 가지 단계로 나눌 수 있습니다.
1과 3 단계에서는 데이터 소스의 위치와 형식에 따라 매번 프로그램을 작성해야 하므로, 가장 많은 구현 과정이 필요합니다. 예를 들어, Google 광고에서 데이터를 가져올 때는 Google 광고의 API 문서를 참고하여 라이브러리나 SDK를 사용해 프로그램을 작성해야 하지만, MySQL에서 데이터를 가져올 때는 완전히 다른 문서와 라이브러리를 사용해야 하므로 처음부터 다시 구현해야 합니다.
게다가 일반적으로 데이터 분석에서 사용하는 데이터 소스는 데이터 분석 기반의 발전에 따라 점점 늘어나기 때문에, 미래에는 이 부분의 구현 노력이 상당히 많아질 것으로 예상됩니다.
2단계에서는 ETL 처리 서버에 가져온 데이터에 대해 다음과 같은 처리를 구현합니다.
Decode와 Parse 단계에서는 로컬로 가져온 데이터를 처리 가능한 형태로 변환합니다. 데이터 소스마다 데이터 형식이 다양할 것으로 예상되기 때문에, 압축 파일을 해제하고 행렬 형식의 데이터로 분석 및 변환할 필요가 있습니다.
Transform 단계에서는 데이터에 대해 필요한 변환을 수행합니다. 불필요한 데이터를 제거하거나, 입력 형식이 일관되지 않은 필드를 정규화하는 등, 다양한 처리가 이루어집니다. 참고로, 단순히 데이터 레이크에 데이터를 넣기만 하는 경우에는 이 단계를 생략할 수도 있습니다.
마지막 Format과 Encode 단계에서는 전송 목적지에 맞는 파일 형식과 압축 형식으로 변환합니다.
이러한 작업들은 일반적인 웹 애플리케이션을 구현하는 감각으로 프로그램을 작성하면 문제가 발생하는 경우가 많습니다. 데이터 분석용 데이터는 보통 매우 큰 크기를 가지며, 처리 시간이 지나치게 오래 걸리는 문제(예: 일일 배치 작업임에도 처리 시간이 24시간을 초과하는 경우)가 발생하기 때문입니다. 따라서 데이터 양이 증가할 경우를 고려해 병렬 분산 처리를 수행하거나, ETL용 프레임워크나 도구를 검토할 필요가 있습니다.
ETL의 구현 방법은 크게 다음 세 가지 유형으로 분류되는 경우가 많습니다.
Full Scratch 개발은 말 그대로 0부터 프로그램을 구현하는 방법입니다 . 프레임워크 등을 사용하지 않고, 필요에 따라 라이브러리나 SDK 등을 활용하여 구현합니다. 소량의 데이터나 단발성 데이터 연동에는 이 방법을 사용할 수 있지만, 데이터 양이 증가하면 문제 발생 가능성이 높고 에러 처리와 같은 운영 측면이 충분히 고려되지 않을 수 있어, 장기간 사용하는 배치 작업에는 권장하지 않습니다.
한편, ETL용 프레임워크를 사용하여 Scratch 개발을 하는 방법도 있습니다. ETL용 프레임워크로는 오픈 소스로 사용할 수 있는 Spark나 Embulk 등이 유명합니다.
Spark는 가능한 한 인메모리에서 처리를 수행하기 때문에 처리 속도가 빠르며, 병렬 분산 처리를 구현할 수 있다는 점이 장점입니다. 그러나 거의 모든 구현을 직접 프로그래밍해야 하므로, 난이도와 작업 공수가 상당히 높아집니다.
Embulk는 프로그램을 작성하지 않고 YAML 형식의 설정 파일만으로 ETL을 구현할 수 있는 오픈 소스로, 쉽게 시작할 수 있다는 점과 비교적 낮은 구현 난이도 및 작업 공수가 장점입니다. 다만, 변환 처리를 간단하게 구현할 수 있지만, 모든 것을 YAML 형식으로 작성해야 하므로 여전히 난이도가 있는 편입니다. 또한, Embulk를 실행하기 위해 Java 실행 환경을 준비해야 하며, 이에 따른 작업 과정정도 어느 정도 필요합니다.
이러한 문제제를 거의 모두 해결할 수 있는 방법이 바로 "SaaS형 서비스를 이용"하는 것입니다. 일본에는 "ETL 및 워크플로우용 서비스 TROCCO(트로코)"라는 SaaS형 서비스가 있으며, 웹 브라우저에서 100종 이상의 데이터 소스와 연동하여 변환 처리를 구현할 수 있습니다. 게다가, 일제 ETL 프레임워크인 Embulk를 기반으로 하고 있어 강력한 전송 처리가 가능합니다.
또한, 구현이 쉬워질 뿐 아니라 실행 환경도 제공되므로 복잡한 분산 처리 등을 고려할 필요가 없습니다. 오류 처리 설정도 TROCCO에서 가능하여, 예를 들어 "처리가 길어지면 Slack에 알림을 보내기" 같은 작업을 화면에서 몇 번의 클릭만으로 설정할 수 있습니다.
지금까지 ETL의 의미와 구현 방법에 대해 설명했습니다.
데이터 분석 기반이 성장함에 따라 ETL 파이프라인의 수가 증가할 것이므로, 구현에 상당한 작업이 필요할 것으로 예상됩니다. 본래 목표인 "데이터 분석"에 집중하기 위해서라도 ETL 구현 수고를 줄이는 것은 필수적입니다. SaaS형 서비스나 오픈 소스 프레임워크의 적극적인 활용을 권장합니다.
TROCCO®는 ETL/데이터 전송, 데이터 마트 생성, 작업 관리, 데이터 거버넌스 등 데이터 엔지니어링 분야를 포괄하는 분석 기반 구축 및 운영 지원 SaaS입니다.