[reinvent 2024] Amazon Aurora와 RDS 데이터를 Amazon Redshift에서 Zero-ETL 방식으로 분석하기
Summary
Amazon Aurora와 Amazon RDS를 Amazon Redshift와 연결해주는 Zero-ETL 통합 기능에 대해 살펴보는 세션입니다. Zero-ETL 통합은 애플리케이션과 데이터 소스의 데이터를 손쉽게 통합해 더 깊이 있는 인사이트를 제공합니다. 이 세션에서는 Amazon Aurora와 Amazon RDS의 Zero-ETL 통합으로 복잡한 데이터 파이프라인을 만들고 관리할 필요 없이, 관계형 데이터베이스에서 페타바이트 규모의 데이터를 Amazon Redshift를 활용해 분석하고 머신러닝에 적용할 수 있는 방법을 다룹니다.
리인벤트 2024 테크 블로그의 더 많은 글이 보고 싶다면?
Overview
들어가며
이번 칼럼에서 다룰 세션은 Redshift에서 Amazon Aurora 와 RDS 데이터를 Redshift에서 Zero ETL방식으로 어떻게 분석하는지에 대한 세션입니다.
이번 세션을 신청한 이유는 Zero ETL이 실제로 어떻게 작동하는지에 대한 정보를 얻기 위해서 였는데요
해당 세션을 통해 Zero ETL이 어떻게 실시간에 가까운 인사이트를 제공하면서 업무를 단순화할 수 있는지 알아보고 Aurora와 RDS 서비스와 관련된 Zero ETL의 최신 기능에 대해서 공유드리겠습니다.
오늘날 점점 더 많은 기업이 데이터를 경쟁력의 원천으로 삼고 있으며 이를 위해 실시간에 가까운 분석이 더욱더 중요해지고 있습니다. 실시간에 가까운 분석으로 인사이트를 빠르게 얻으려면 복잡한 ETL파이프라인을 구축해야 하는데 이는 많은 에너지가 소모되고 비즈니스 로직에 집중할 시간을 빼앗을 수 있습니다.
AWS의 Zero ETL 환경을 통해 이 문제를 어떻게 해결할 수 있는지 알아볼건데요 그 전에 Redshift 서비스에 대해 먼저 설명드리겠습니다.
Redshift는 다양한 데이터 유형을 하나의 플랫폼에서 분석할 수 있는 완전 관리형 클라우드 데이터 웨어하우징 솔루션입니다. Rich SQL과 머신 러닝 기능을 통해 데이터에서 유용한 인사이트를 도출하고, 데이터 공유 기능도 제공합니다. 또한 내장된 머신 러닝 기능을 통해 데이터베이스 리소스를 자동으로 최적화하여 사용자가 분석에 집중할 수 있게 돕습니다.
다음으로는 Zero ETL의 장점에 대해서 공유드리겠습니다.
Zero ETL의 주요 장점 중 하나는 매우 쉽게 설정하고 관리할 수 있다는 점인데요, 사용자가 기존에 ETL 파이프라인을 구축하는 데 보통 긴 시간을 소비하는데 Zero ETL은 몇 분 안에 설정이 가능합니다.
여기서 Amazon Redshift는 큰 역할을 하는데 다양한 데이터 소스를 통합할 수 있고 데이터를 Redshift에 통합한 후 다양한 AWS 서비스(EMR, Glue, Athena 등)를 통해 데이터를 분석하고 변환이 가능하다는 장점이 있습니다.
다음으로 관계형 데이터베이스의 zero ETL 작동 방식에 대해서 알아보겠습니다.
Zero ETL 통합을 설정하는 방법으로 CLI와 콘솔을 사용할 수 있는데, 콘솔에서 “Fix it for me” 기능을 사용하면 소스 데이터베이스 설정을 확인하고, 필요한 매개변수를 설정할 수 있는 옵션을 제공합니다. 해당 기능을 활용한 매개변수 통합이 준비되면 백그라운드에서 통합이 생성되고, 이 과정에서 매개변수가 설정되어 작동합니다.
Zero ETL 통합이 실행되면 데이터 유형 처리가 진행되는데, 예를들어 pg같이 redshift와 데이터 유형이 유사한 엔진에서는 그대로 이동되고, Aurora MySQL 또는 RDS MySQL과 같은 엔진은 위 슬라이드에서 보이는 것 처럼 같은 유형은 그대로 ,다른 유형은 변형되어 이동하는 식으로 수행됩니다.
초기 데이터가 이동된 후에는 자동으로 CDC 모드로 전환되어 데이터가 지속적으로 로드됩니다. 또한 스키마 작업 등으로 인해 테이블이나 인덱스 상태가 변경되더라도 이 변경 사항들이 함께 이동됩니다.
예기치 않게 소스 데이터베이스의 문제로 복제가 중단될 경우에는 특정 테이블에서 실패한 것을 자동으로 감지하고 자동으로 해당 테이블을 재동기화하거나 재설정하여 연속적인 데이터 복제 흐름을 다시 시작합니다.
AWS가 Zero ETL을 설계하는 과정에서 우선순위로 둔 요소들에 대한 설명입니다.
- 첫번째 요소는 보안입니다.
- Zero ETL에서는 모든 데이터를 전송, 저장 중 모두 보안이 유지됩니다. 예시로 “Fix it for me” 기능이 암호화가 모든 곳에서 활성화된다는 것이 있습니다.
- Zero ETL에서는 모든 데이터를 전송, 저장 중 모두 보안이 유지됩니다. 예시로 “Fix it for me” 기능이 암호화가 모든 곳에서 활성화된다는 것이 있습니다.
- 두 번째로 정확성입니다.
- 전송된 데이터는 항상 트랜잭션 일관성이 보장됩니다. 시스템은 이를 지속적으로 모니터링하여 복제되는 데이터가 항상 정확하게 유지되도록 합니다.
- 전송된 데이터는 항상 트랜잭션 일관성이 보장됩니다. 시스템은 이를 지속적으로 모니터링하여 복제되는 데이터가 항상 정확하게 유지되도록 합니다.
- 세 번째로 신뢰성입니다.
- 네 번째로는 효율성입니다.
Zero ETL은 소스 데이터베이스에 미치는 성능 영향을 최소화하는 것을 목표로 합니다.
데이터가 Redshift에 로드된 후에는 Redshift에서 제공되는 모든 기능을 사용해 데이터를 분석할 수 있습니다.
자주 사용되는 사례로는 non-hot data를 웨어하우스로 이동시키고 소스에서는 제거하는 것 입니다.마지막으로 Zero ETL은 모니터링 기능도 제공하는데요, Zero ETL과 관련된 모든 메트릭을(복제된 테이블의 수, 복제 지연(replica lag), 전송된 데이터의 양,현재 상태) CloudWatch에서 확인하실 수 있습니다.
다음으로 새로운 기능인 데이터 필터링 기능 대해 살펴보겠습니다.
MySQL 엔진의 경우 schema.table 형식의 필터링 방식(*.*)을 사용합니다. 필터링 옵션은 포함 조건과 제외 조건을 지원하는데 이를 조합하여 어떤 데이터가 Redshift로 복제될지 세부적으로 선택할 수 있습니다. Postgres 엔진의 경우 database.schema.table 형식의 필터링이 사용됩니다. 예를 들어, database1.*.*를 지정하면, 해당 데이터베이스의 모든 스키마와 테이블이 자동으로 복제합니다.
다음으로는 Aurora 엔진의 성능 개선에 대해 살펴보겠습니다.Aurora MySQL 및 Aurora Postgres에서는 enhanced binary log 를 도입해서 커밋 단계에서 빠르게 데이터 복제가 이루어지며 Redshift로 데이터를 이동시키는 속도가 크게 향상되었습니다. 또한 Aurora Postgres에서는 enhanced logical replication에 개선이 이루어졌는데, 일반적인 DDL 변경 사항을 자동으로 처리하여 Redshift에 정확히 반영되도록 개선되었습니다.
Zero ETL은 운영 데이터베이스에 미치는 영향을 최소화하면서도 수백만 건의 트랜잭션을 실시간으로 처리하고 분석할 수 있도록 설계되었는데 이를 가능하게 하는 핵심 개념 중 하나가 seeding입니다.
일반적으로 RDS MySQL에서는 데이터를 Reader 인스턴스나 Writer 인스턴스를 통해 읽어오게 되는데, 이 과정에서 대량의 데이터를 전송하면 운영 데이터베이스에 큰 부담을 줄 수 있습니다. Zero ETL은 이러한 영향을 최소화하기 위해 스냅샷 기반 복제 방식을 활용합니다. 이 방식을 통해 운영 데이터베이스의 데이터를 Redshift로 전송하는 과정에서 트랜잭션의 일관성을 보장하며, Writer 인스턴스에 미치는 영향을 최소화할 수 있습니다.
Aurora의 경우에는 더 효율적인 방식을 제공합니다. Aurora의 빠른 클론 생성 기능을 활용하여 운영 데이터베이스에 영향을 주지 않고 클론에서 메타데이터를 가져올 수 있습니다. 또한 Aurora의 분리된 스토리지 계층을 활용해 데이터를 병렬로 내보낼 수 있기 때문에 컴퓨팅 리소스에도 영향을 미치지 않습니다.
이러한 구조는 Zero ETL이 안정적이고 효율적으로 실시간 데이터 분석을 지원할 수 있도록 돕는 중요한 요소입니다.
시딩 작업이 완료된 후 이후에는 지속적으로 데이터를 따라잡아야 하는데 이 과정에서 CDC가 활용됩니다.
Aurora의 경우 데이터 변경 사항을 추적하기 위해 헤드 노드에서 직접 데이터를 읽는 대신 분리된 스토리지를 활용하여 CDC 스트리밍을 수행합니다. 이 방식은 트랜잭션이 실행되고 데이터가 저장 및 커밋되는 동안, 해당 레코드를 스트리밍 서버라는 별도의 스토리지 볼륨에 기록하는 방식으로 이루어지는데 이후 이 레코드는 CDC 스트림을 통해 변경된 데이터를 판별하여 Redshift로 전송됩니다.
또 다른 중요한 측면은 데이터를 Redshift에 어떻게 배치하고 CDC스트림을 효과적으로 수집하여 변경 사항을 적용하느냐 인데 Redshift는 리더 노드와 여러 컴퓨팅 노드로 구성된 대규모 병렬 처리 아키텍처를 기반으로 하여, 내장된 병렬 처리 기능을 활용합니다. 이를 통해, Aurora에서 Redshift로 데이터가 이동하는 동안 데이터의 특성에 맞게 미리 파티셔닝을 수행할 수 있습니다. 예를 들어, 전체 데이터를 자체적으로 복제하거나, 기본 키를 기준으로 샤딩을 하거나, Redshift 토폴로지에 맞춰 데이터를 샤딩하는 방식이 가능합니다.
마지막으로 CDC 복제에서 중요한 측면은 데이터가 계속해서 변경된다는 점입니다.
특히 OLTP워크로드에서는 업데이트가 빈번하게 일어나는데 이를 해결하기 위해 delete buffer라는 개념을 사용하여 업데이트나 삭제 작업을 추적합니다. CDC 스트림에서 업데이트를 감지하면 delete와 insert로 분리해서
delete작업은 별도로 저장, 메모리에 버퍼링하고, insert 작업은 primary table에 적용합니다. 또한 숨겨진 delete buffer를 유지하고, 사용자가 데이터를 쿼리할때 query scan operator는 두항목을 결합하여 마치 데이터가 업데이트된 것처럼 보여줍니다.
결론
이번 세션에서는 ZeroETL을 사용하여 관계형 데이터베이스에서 데이터 웨어하우스로 손쉽게 데이터를 이동하는 방식에 대해 다루는 세션이었습니다. ZeroETL 통합 기능은 백그라운드에서 최적화되어, 사용자가 복잡한 ETL 파이프라인을 신경 쓸 필요 없이 실시간 분석을 가능하게 합니다. 특히, 스냅샷 기반 복제와 CDC 스트리밍을 활용해 운영 데이터베이스에 미치는 영향을 최소화하며 Redshift에서 데이터를 빠르게 쿼리할 수 있게 해줍니다.이 세션을 통해 Zero ETL이 비즈니스 인사이트를 빠르게 도출하는 데 중요한 역할을 하며 꼭 활용해 봐야겠다는 생각이 드는 세션이었습니다.