PostgreSQL 시계열 데이터베이스 고가용성(HA) 구축 방안 – TimescaleDB + Patroni
- mcseoper
- 4월 7일
- 2분 분량
최종 수정일: 5월 4일
들어가며
IoT 센서, 서버 모니터링, 금융 거래 로그 등 시계열(Time-Series) 데이터는 매초 수만 건씩 쌓입니다. 이 데이터는 빠른 적재와 실시간 분석을 요구합니다. PostgreSQL은 안정성과 확장성을 갖춘 RDBMS입니다. 그러나 대규모 시계열 워크로드를 처리하려면 전용 확장과 고가용성(HA) 아키텍처가 필수입니다.
본 글에서는 TimescaleDB 확장과 Patroni + etcd 기반의 자동 페일오버 클러스터를 결합하여 운영 환경에서 검증된 고가용성 시계열 아키텍처를 소개합니다.
왜 TimescaleDB인가?
TimescaleDB는 PostgreSQL 위에서 동작하는 시계열 전용 확장입니다. 기존 SQL 문법을 그대로 사용하면서도 시계열에 최적화된 기능을 제공합니다. 핵심 기능은 다음과 같습니다.
하이퍼테이블(Hypertable): 시간 기반 자동 파티셔닝으로 INSERT 성능을 극대화합니다. 오래된 데이터를 자동으로 청크(Chunk) 단위로 관리합니다. 수십억 건의 레코드도 일반 테이블처럼 쿼리할 수 있습니다.
연속 집계(Continuous Aggregates): 실시간 집계 뷰를 자동 갱신하여 대시보드 쿼리 응답 시간을 수 초 이내로 유지합니다. 매번 원본 데이터를 스캔하지 않으므로 CPU와 I/O 부하를 대폭 줄입니다.
네이티브 압축: 오래된 청크를 열 지향(Columnar) 압축하여 스토리지 비용을 90% 이상 절감합니다. 압축된 데이터도 SQL로 직접 조회 가능하므로 별도의 아카이브 파이프라인이 불필요합니다.

[그림] TimescaleDB 기반 DBMS 테이블 구성 전략
Patroni + etcd 기반 고가용성 아키텍처
TimescaleDB는 PostgreSQL의 스트리밍 복제(Streaming Replication)를 그대로 활용할 수 있습니다. Patroni를 이용한 자동 페일오버 구성이 자연스럽게 적용됩니다.
아키텍처의 핵심 구성 요소는 다음과 같습니다.
Patroni: 각 PostgreSQL 노드에 에이전트로 설치되어 리더 선출, 자동 페일오버, 복제본 관리를 담당합니다. Primary 장애 감지 시 30초 이내에 Standby를 새 Primary로 승격시킵니다.
etcd 클러스터: 3노드 이상의 etcd가 분산 합의(Raft)를 통해 클러스터 상태를 저장합니다. 리더 정보와 구성 메타데이터를 안전하게 관리하며, etcd 자체도 고가용성을 보장합니다.
HAProxy / PgBouncer: 애플리케이션 연결을 자동으로 현재 Primary로 라우팅합니다. 읽기 전용 쿼리는 Standby로 분산하여 Primary의 부하를 줄이고 전체 클러스터의 처리량을 높입니다.

[그림] Patroni + etcd 기반 PostgreSQL HA 클러스터 구성도
권장 배포 구성
운영 환경에서 권장하는 최소 구성은 다음과 같습니다. PostgreSQL + TimescaleDB 노드 3대(Primary 1 + Standby 2)에 Patroni 에이전트를 설치합니다. 별도의 etcd 3노드 클러스터로 상태를 관리합니다. 앞단에 HAProxy 2대를 Active-Standby(Keepalived VIP)로 구성하면 단일 장애점(SPOF)이 제거됩니다.
Patroni의 patroni.yml 설정에서 `synchronous_mode: true`를 활성화하면 동기식 복제가 적용됩니다. 이를 통해 데이터 손실 없는(Zero Data Loss) 페일오버가 가능합니다. 다만 동기 복제는 쓰기 지연이 발생할 수 있습니다. 시계열 데이터의 특성에 따라 비동기 복제와 적절히 선택해야 합니다.
시계열 워크로드 성능 튜닝 포인트
고가용성 아키텍처 위에서 최적의 성능을 얻기 위한 주요 튜닝 포인트입니다.
청크 간격 최적화: 데이터 유입 속도에 맞춰 청크 간격(chunk_time_interval)을 조정합니다. 일반적으로 하루에 수GB 이상이면 1시간~6시간, 그 이하면 1일~7일이 적절합니다.
압축 정책 설정: `compress_after` 파라미터로 일정 기간이 지난 청크를 자동 압축합니다. 예를 들어 7일 이전 데이터를 자동 압축하면 스토리지를 크게 절약하면서도 쿼리 성능에 미치는 영향은 최소화됩니다.
WAL 설정 튜닝: 시계열 대량 쓰기 환경에서는 `wal_buffers`, `max_wal_size`를 충분히 크게 설정합니다. `checkpoint_completion_target`을 0.9로 유지하여 체크포인트 스파이크를 방지합니다.
보존 정책(Retention Policy): `drop_chunks` 함수를 활용하여 오래된 데이터를 자동 삭제합니다. 보관 기간을 비즈니스 요구사항에 맞게 설정하면 디스크 공간을 효율적으로 관리할 수 있습니다.
결론
PostgreSQL + TimescaleDB + Patroni/etcd 조합은 오픈소스만으로 엔터프라이즈급 시계열 고가용성 환경을 구축할 수 있는 검증된 아키텍처입니다. 별도의 상용 라이선스 없이도 자동 페일오버, 동기/비동기 복제, 읽기 분산, 자동 압축 및 보존 정책까지 구현할 수 있습니다. 이를 통해 TCO(총소유비용)를 크게 절감할 수 있습니다.
나래정보기술은 다년간의 DBMS 성능 튜닝 경험을 바탕으로, 고객사의 시계열 데이터 환경에 최적화된 아키텍처 설계와 SQL 성능 튜닝 컨설팅을 제공합니다. 시계열 데이터베이스 고가용성 구축에 관심이 있으시다면 언제든지 문의해 주시기 바랍니다.



댓글