Postgres 데이터를 Iceberg로 실시간 변환!
Postgres WAL 변경 사항을 S3의 Iceberg 테이블로 실시간 스트리밍하는 Streambed 소개
ETL 없이 운영 DB 부하를 줄이고 분석 쿼리 오프로드 가능
Postgres 와이어 프로토콜 지원으로 `psql` 등 표준 클라이언트로 직접 쿼리 가능
Go 언어로 구현되었으며, CDC 및 데이터 파이프라인 구축에 대한 논의 활발
Postgres WAL 스트리밍 기반 CDC 아키텍처
Streambed는 Postgres의 WAL(Write-Ahead Logging) 변경 사항을 논리적 복제(Logical Replication)를 통해 실시간으로 스트리밍하는 방식을 채택했습니다. 이는 별도의 애플리케이션 수정 없이도 데이터 변경 사항(Inserts, Updates, Deletes)을 안정적으로 캡처할 수 있게 합니다. 캡처된 WAL 메시지는 내부적으로 버퍼링된 후 S3에 Parquet 파일 형태로 기록되며, 동시에 Iceberg 메타데이터 커밋을 수행하여 데이터의 일관성을 유지합니다. 이 아키텍처는 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 분석 쿼리가 운영 DB에 미치는 영향을 최소화하는 것을 목표로 합니다.
Iceberg 및 S3 통합과 쿼리 서버
데이터는 S3에 Parquet 형식으로 저장되며, Apache Iceberg 메타데이터를 사용하여 테이블 관리를 수행합니다. 이는 다양한 분석 엔진과의 호환성을 제공하며, 특히 Streambed는 내장 쿼리 서버(Embedded Query Server)를 통해 Postgres 와이어 프로토콜을 지원합니다. 이를 통해 사용자는 `psql`과 같은 표준 Postgres 클라이언트를 사용하여 S3에 저장된 Iceberg 테이블을 마치 Postgres 테이블처럼 직접 쿼리할 수 있습니다. 이는 ETL(Extract, Transform, Load) 과정을 생략하고 ELT(Extract, Load, Transform) 패턴을 지향하는 현대적인 데이터 분석 워크플로우를 가능하게 합니다.
성능 및 실용성에 대한 커뮤니티 논쟁
커뮤니티에서는 Streambed의 CDC(Change Data Capture) 구현의 신뢰성과 실제 분석 워크로드에서의 성능에 대한 질문이 제기되었습니다. 특히, 복잡한 분석을 위해서는 결국 데이터 변환(Transformation) 단계가 필요하므로 'ETL이 필요 없다'는 주장에 대해 ELT 패턴의 한계를 지적하는 의견이 있었습니다. 또한, 실제 운영 환경에서의 처리량(Throughput) 및 종단 간 지연 시간(End-to-End Latency)에 대한 구체적인 성능 지표 제시 요구가 있었습니다.
Postgres 와이어 프로토콜 지원의 활용 사례
Streambed가 제공하는 Postgres 와이어 프로토콜 호환 쿼리 서버는 디버깅 목적이나 기존 BI 도구와의 쉬운 통합을 위한 것으로 해석됩니다. 많은 조직이 이미 Iceberg 호환 쿼리 엔진을 보유하고 있지만, 별도의 엔진 설정 없이 `psql`로 즉시 데이터를 탐색할 수 있다는 점은 개발 초기 단계나 소규모 팀에게 매력적일 수 있습니다. 다만, 대규모 분석 환경에서는 DuckDB와 같은 내장 엔진의 성능 한계에 대한 고려가 필요하다는 의견도 존재합니다.
Go 언어 기반 CDC 구현의 복잡성
Go 언어로 CDC 로직을 직접 구현하는 것은 상당한 기술적 난이도를 수반합니다. 특히 WAL 디코딩 및 복제 과정에서 발생할 수 있는 엣지 케이스(Edge Cases)를 안정적으로 처리하는 것이 중요합니다. 개발자는 Go 언어 생태계 내에서 신뢰할 수 있는 CDC 라이브러리가 부족하다는 점을 언급하며, Streambed의 소스 코드 분석을 통해 CDC 구현의 복잡성과 해결 방식을 배우고 싶다는 관심을 보였습니다.