PostgreSQL · 2026-02-07

PostgreSQL postgres_fdw 실무 적용 사례

postgres_fdw를 이용한 외부 데이터 연동 절차와 설정 예제, 성능 고려사항을 포함한 실무 참고자료

작성일 : 2026-02-07 ㆍ 작성자 : 관리자
post
목차

개요

postgres_fdw는 PostgreSQL 간에 외부 테이블을 연결해 로컬처럼 조회할 수 있게 해주는 확장 모듈이다. 분산 데이터 접근, 마이그레이션, 리포팅 환경에서 자주 사용된다. 이 글은 처음 접하는 사람도 이해하기 쉽도록 설치부터 성능 고려까지 단계별로 설명한다.

기본 개념

기본 흐름은 다음과 같다.

  • 확장 설치: 로컬 DB에 postgres_fdw 확장 추가
  • 서버 정의: 원격 PostgreSQL 접속 정보를 등록
  • 사용자 매핑: 로컬 사용자와 원격 접속 계정 연결
  • 외부 테이블 생성 또는 스키마 임포트
  • 쿼리 실행 및 성능 튜닝

설치와 초기 설정

로컬 DB에서 먼저 확장을 생성한다.

CREATE EXTENSION IF NOT EXISTS postgres_fdw;

그다음 원격 서버 정보를 등록한다.

CREATE SERVER remote_pg
  FOREIGN DATA WRAPPER postgres_fdw
  OPTIONS (host '192.0.2.10', port '5432', dbname 'remotedb');

원격에 접속할 계정 정보를 로컬 사용자에 매핑한다.

CREATE USER MAPPING FOR local_user
  SERVER remote_pg
  OPTIONS (user 'remote_user', password 'secret');

외부 테이블 생성 예제

원격 테이블을 직접 정의하거나 IMPORT FOREIGN SCHEMA로 가져올 수 있다. 수동 정의 예제는 다음과 같다.

CREATE FOREIGN TABLE remote_orders (
  id bigint,
  customer_id integer,
  total numeric
)
SERVER remote_pg
OPTIONS (schema_name 'public', table_name 'orders');

스키마 전체를 가져오는 방법:

IMPORT FOREIGN SCHEMA public
  FROM SERVER remote_pg
  INTO local_schema
  LIMIT TO (orders, customers);

기본 사용법과 쿼리

외부 테이블은 로컬 테이블처럼 SELECT, JOIN, INSERT(조건부 업스트림 허용) 등이 가능하다. 예를 들어 로컬 주문과 원격 주문을 조인할 수 있다.

SELECT l.id, r.total
FROM local_sales l
JOIN remote_orders r ON l.remote_id = r.id
WHERE r.total > 100;

실행계획(EXPLAIN)을 통해 푸시다운 여부를 확인한다. 복잡한 연산이 원격으로 푸시되는지 확인하면 성능을 판단하는 단서가 된다.

성능 고려사항 (postgres fdw 성능)

성능은 네트워크 지연, 원격 서버 부하, 통계 정보 유무에 민감하다. 주요 고려사항은 다음과 같다.

  • 쿼리 푸시다운 여부 확인: WHERE, JOIN, 집계의 일부가 원격으로 푸시되면 네트워크 전송량이 줄어든다.
  • use_remote_estimate 옵션: 로컬 플래너가 원격 통계를 사용하도록 설정하면 더 나은 계획을 얻을 수 있다.
  • fetch_size 조정: 대량 페이징 조회 시 fetch_size를 늘려 round-trip 횟수를 줄인다.
  • 원격 인덱스와 통계: 원격 테이블에 적절한 인덱스와 ANALYZE를 수행해 원격 쿼리 성능을 개선한다.
  • 연결 수 관리: 대규모 동시접속은 원격 DB에 부담을 주므로 커넥션 풀러 사용을 고려한다.

옵션 적용 예

외부 테이블 생성 시 성능 관련 옵션을 지정할 수 있다.

CREATE FOREIGN TABLE remote_bulk (
  id bigint,
  data text
)
SERVER remote_pg
OPTIONS (schema_name 'public', table_name 'big_table', fetch_size '1000');

문제 해결과 주의사항

자주 마주치는 문제와 해결책은 다음과 같다.

  • 타입 불일치: 로컬과 원격 컬럼 타입이 다르면 CAST나 컬럼 정의로 맞춰야 한다.
  • 권한 오류: 원격 계정에 필요한 SELECT 권한이 있는지 확인한다.
  • 네트워크 지연: 대량 조회 시 LIMIT, WHERE 절로 전송량을 줄인다.
  • 트랜잭션 경계: 분산 트랜잭션은 성능과 일관성 문제를 야기하므로 주의한다.

성능 측정 팁

성능을 평가할 때는 다음 절차를 권장한다.

  • EXPLAIN(ANALYZE)로 원격 호출 횟수와 실행 시간을 확인
  • 네트워크 RTT와 대역폭을 측정해 병목 요소 파악
  • 다양한 fetch_size와 쿼리 리라이팅으로 최적 조합 탐색
  • 원격 서버에서 ANALYZE 수행으로 통계 최신화

마무리

postgres_fdw는 잘만 사용하면 강력한 도구다. 설정은 간단하지만 성능 최적화에는 원격 통계, 쿼리 푸시다운 여부, 네트워크 특성을 종합적으로 고려해야 한다. 소개한 설정 예제와 성능 포인트를 토대로 실제 환경에서 테스트 후 적용하면 안정적인 외부 데이터 연동을 구현할 수 있다.

postgres_fdw 설정 예제 foreign data wrapper postgres 사용법 postgres fdw 성능 postgres_fdw postgres 외부테이블 postgres 데이터 연동 FDW 튜닝 분산 쿼리