# pg_flo – PostgreSQL 데이터를 실시간으로 스트리밍, 변환 및 재라우팅

> Clean Markdown view of GeekNews topic #17585. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17585](https://news.hada.io/topic?id=17585)
- GeekNews Markdown: [https://news.hada.io/topic/17585.md](https://news.hada.io/topic/17585.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-04T20:34:37+09:00
- Updated: 2024-11-04T20:34:37+09:00
- Original source: [pgflo.io](https://www.pgflo.io/)
- Points: 9
- Comments: 1

## Summary

pg_flo는 PostgreSQL 데이터베이스 간 데이터를 실시간으로 스트리밍하고 변환하며 재라우팅하는 솔루션으로, 논리적 복제를 통해 거의 실시간으로 데이터 변경 사항을 스트리밍합니다. 이 솔루션은 대량 복사로 초기 데이터 동기화를 빠르게 수행하고, 정규 표현식을 기반으로 변환을 적용하여 민감한 데이터를 마스킹하거나 열 값에 따라 필터링할 수 있습니다. 또한, NATS 메시지 브로커를 사용하여 유연성과 확장성을 제공하며, 변환과 필터링은 데이터가 목적지에 도달하기 전에 적용됩니다.

## Topic Body

- PostgreSQL 데이터베이스 간에 데이터를 이동하고 변환하는 가장 쉬운 방법을 제공   
- **실시간 스트리밍**  : PostgreSQL 논리적 복제를 사용하여 거의 실시간으로 데이터 변경 사항을 스트리밍  
- **대량 복사** : 병렬 처리 가능한 대량 복사로 초기 데이터 동기화를 빠르게 수행  
- **강력한 변환** : 정규 표현식을 기반으로 변환을 적용하고, 민감한 데이터를 마스킹하며, 열 값에 따라 필터링  
- **유연한 라우팅** : 테이블 간 데이터를 매끄럽게 라우팅하며, 다른 이름의 테이블이나 동일한 테이블로 사용자 정의 열 매핑을 통해 라우팅  
- **변환 규칙 예시**  
  - 이메일 주소 마스킹: 이메일 열을 마스킹 문자로 변환.  
  - 전화번호 형식화: 정규 표현식을 사용하여 전화번호 형식 변환.  
- **테이블 라우팅 및 열 매핑**  
  - 유연한 테이블 라우팅: 사용자 테이블을 고객 테이블로 라우팅하며, ID와 사용자 이름을 고객 ID와 고객 이름으로 매핑함.  
  - 다중 테이블 라우팅: 주문 테이블을 거래 테이블로 라우팅하며, ID와 총 금액을 거래 ID와 금액으로 매핑함.  
- **일반적인 사용 사례**  
  - PostgreSQL DB 간에 실시간 데이터 복제   
  - 데이터 변환을 포함한 ETL 파이프라인 구성   
  - 데이터 리라우팅, 마스킹, 필터링   
  - 다운타임 없이 데이터베이스 마이그레이션 실행   
  - PostgreSQL에서 이벤트 스트리밍  
- **작동 방식**  
  - pg_flo는 PostgreSQL의 논리적 복제 시스템을 활용하여 데이터 변경 사항을 캡처하고 스트리밍함.  
  - NATS를 메시지 브로커로 사용하여 WAL에서 읽기를 복제기 및 작업자 프로세스와 분리하여 유연성과 확장성을 제공함.  
  - 변환과 필터링은 데이터가 목적지에 도달하기 전에 적용됨.

## Comments



### Comment 30719

- Author: neo
- Created: 2024-11-04T20:34:38+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42034237) 
- pg_flo 프로젝트는 매우 흥미로워 보이며, 특히 S3로의 아카이브와 저렴한 도구 버전이 매력적임
  - Debezium과 같은 도구는 대규모 데이터(TBs) 대신 소규모 데이터(GBs)로 작업할 수 있어 로컬 테스트가 용이함
  - Kafka와 Debezium을 사용하는 것은 단기적인 노력이며, 번거로움을 평가 중임
  - 팀에서 평가 중인 다른 솔루션으로는 peerdb가 있음

- PostgreSQL 논리적 복제를 사용하여 메인 데이터베이스에서 데이터를 정리하고 S3로 아카이브하는 프로젝트를 진행 중임
  - 일부 테이블은 읽기 작업을 위해 보조 Postgres 인스턴스에서 사용 가능해야 하며, 이때 복제가 필요함
  - 메인 데이터베이스에서 두 가지 삭제 작업이 문제임
    - 첫 번째 삭제는 데이터 정리를 위한 것이며, 복제된 데이터베이스에 반영되지 않기를 원함
    - 두 번째 삭제는 롤백을 위한 것이며, 데이터 상태를 변경하므로 복제되어야 함
  - 이러한 두 가지 삭제 작업을 구분하여 롤백 삭제만 복제할 수 있는 방법이 있는지 궁금함

- Postgres CDC 솔루션을 조사 중이며, pg_flo가 도움이 될 수 있을지 궁금함
  - 실패 모드에 대해 설명해줄 수 있는지 궁금함
  - 예를 들어, NATS 서버(또는 워커/복제자) 노드가 죽으면 어떻게 되는지 알고 싶음
  - Postgres에서 ElasticSearch/ClickHouse로 데이터를 이동하는 것이 얼마나 어려운지 궁금함

- Debezium의 대안이 될 수 있기를 바람
  - Debezium은 처음에 전체 CDC 상태를 Kafka로 복사해야 하며, Kafka 보존 시간을 무한대로 설정해야 하는데, 이는 많은 Kafka 서비스 시스템에서 허용되지 않음

- pglogical은 Postgres 내부에서 실행될 수 있지만, pg_flo는 확장이 아닌 외부 서비스로 보임
  - 이는 실제로 이점일 수 있음
  - Azure Postgres, Supabase, Neon 등 Postgres as a service 인스턴스와 함께 pg_flo를 사용할 수 있을지 궁금함
  - 벤더가 승인하지 않은 확장을 설치할 필요 없이 WAL을 읽을 수 있는지 궁금함

- 이 도구를 사용해보는 것이 매우 기대됨
  - 네트워크 연결 끊김/불안정성 중간에 복사를 처리할 수 있는지 궁금함

- Sequin과 비교했을 때 어떻게 다른지 궁금함
  - CDC 이벤트 기반 워크플로우를 가능하게 하면서도 임의로 이벤트 스트림을 필요에 따라 재생할 수 있는 도구를 찾고 있음

- 비슷한 도구를 찾고 있었는데, 완벽한 타이밍임
  - 다양한 변환을 통해 대량 복사(예: 야간)를 수행하고, 지속적으로 스트리밍하지 않는 것이 지원되는지 궁금함

- S3에 백업하는 것보다 복제를 사용하는 것이 더 나을지 궁금함

- 매우 멋진 도구임
