마이크로서비스간 데이터 동기화를 위해 Kafka를 활용한 CDC 구현과 그 구현의 데이터 정합성을 검사하기 위해서 RDS PostgreSQL의 Table을 S3로 복사하고 이를 Athena로 쿼리할 수 있도록 구성하는 방법을 설명합니다.
먼저 타깃 DB로의 데이터를 옮길 필요가 있을 때 흔히 CDC와 함께 고려되는 것은 ETL 솔루션인데 그것이 어떤 것인지 간단히 알아보도록 합시다. CDC와 ETL은 소스 DB의 데이터를 선별해 타깃 DB로 옮긴다는 방식에서는 같지만, 두 솔루션의 용도와 목적은 판이하게 다릅니다.
CDC는Changed Data Capture의 약자로 데이터베이스의 변경된 내용만 추출하여 다른 시스템 간 데이터 복제 및 활용을 할 수 있게 하는 솔루션입니다. 반면 ETL은추출, 변환, 적재(Extract, transform, load)의 의미를 담고 있습니다. 즉 다양한 소스 시스템으로부터 필요한 데이터를 추출(extract) 하여 변환(transformation) 작업을 거쳐 저장하거나 분석을 담당하는 시스템으로 전송 및 적재(loading) 하는 모든 과정을 포함하고 있습니다.
CDC vs ETL 장단점 비교
CDC
운영 환경에서 큰 부하 없이 DB 복제 가능
장애 발생 시 일부 데이터에 대한 정합성 보장이 어려움
ETL
한 번에 많은 데이터를 처리하므로 데이터 변환 및 정합성 확보에 유리
소스 DB 부하를 고려하면 실시간 처리가 어려움
AWS Glue - 2017년부터 제공 - 완전 관리형 ETL 서비스 - 대표기능 --데이터를 읽어와 자동으로 table scheme을 생성해주는 Data Catalog --데이터 수집 및 변환 코드를 자동으로 생성하고 실행해주는 ETL Job (Apache Spark 기반)
AWS S3 - 높은 내구성과 가용성, 확장성 - 보안과 컴플라이언스 - 유연한 관리: Tiering 및 lifecycle 정책 적용 가능
AWS Athena - 표준 SQL을 사용해서 Amazon S3의 데이터를 분석하는 대화식 쿼리 서비스 - 서버리스 서비스로서 설정 및 관리해야 할 인프라가 없음 - 쿼리 실행에 대해서만 지불하며, 압축을 통해서 쿼리당 30~90% 비용 절감 가능
JDBC Crawler: DB에서 AS-IS 테이블들의 Schema를 자동으로 읽어서 Data Catalog에 저장합니다.
JDBC Crawler: DB에서 TO-BE 테이블들의 Schema를 자동으로 읽어서 Data Catalog에 저장합니다.
ETL Jobs: 미리 설정된 시간에 trigger에 의해 실행되며, Data Catalog를 참조하여 DB 테이블을 S3에 복사합니다.
S3 Crawler: S3의 데이터를 읽어서 자동으로 생성한 테이블 Schema를 Data Catalog에 저장합니다.
Athena: Data Catalog의 테이블 Schema를 이용하여 S3의 테이블 데이터를 SQL 쿼리로 조회합니다.
Data Target 항목에서는 ‘Create tables in your data target’을 선택한 후 아래와 같이 입력하고 Next를 클릭합니다.
Data store: Amazon S3
Format: Parquet
Target path: <테이블 별 저장 path
‘Save job and edit script’ 버튼을 클릭합니다.
아래와 같은 python 스크립트가 자동으로 생성됩니다.
import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job