검색어를 입력하세요.

PostgreSQL FDW

간지뽕빨리턴님 2026. 1. 18. 00:37
반응형

PostgreSQL 15 · Windows 환경 · FDW 실무 적용 · 이종 DB 연동

PostgreSQL의 Foreign Data Wrapper(FDW)는 외부 데이터베이스를 로컬 테이블처럼 사용할 수 있도록 지원하는 기능입니다. 본 글에서는 PostgreSQL 15 Windows 환경을 기준으로 Postgres 간 연동부터 Oracle, MySQL, SQL Server 등 이종 데이터베이스를 실제 운영 환경에서 연결하고 활용하는 방법을 정리합니다.

FDW 개요 및 Oracle DB Link와의 차이

Foreign Data Wrapper(FDW)는 PostgreSQL에서 외부 데이터 소스를 외부 테이블(Foreign Table) 형태로 정의하여 SELECT, INSERT, UPDATE, DELETE를 수행할 수 있도록 해주는 기능입니다. 별도의 데이터 이관 없이도 실시간으로 외부 데이터베이스를 조회할 수 있어 시스템 통합 및 점진적 마이그레이션에 매우 유용합니다.

 

Oracle Database 역시 Database Link 기능을 통해 원격 데이터베이스 접근을 지원합니다. 다만 Oracle DB Link는 기본적으로 Oracle 간 연결에 최적화되어 있으며, 이종 데이터베이스 연동을 위해서는 Gateway 또는 별도 미들웨어 구성이 필요합니다. 반면 PostgreSQL FDW는 확장(extension) 기반 구조로 다양한 데이터베이스를 직접 연결할 수 있습니다.

 

PostgreSQL FDW는 데이터 통합, 병행 운영, 단계적 전환 환경에서 특히 높은 효용을 보입니다.

Postgres → Postgres 연결 (postgres_fdw)

PostgreSQL 간 연동은 기본 제공되는 postgres_fdw를 사용합니다. 설정 절차는 다음과 같이 고정된 순서로 진행합니다.

  1. Extension 생성
  2. Foreign Server 등록
  3. User Mapping 생성
  4. Foreign Table 생성
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
CREATE SERVER remote_pg_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '192.168.0.100', port '5432', dbname 'remote_db');
CREATE USER MAPPING FOR CURRENT_USER
SERVER remote_pg_server
OPTIONS (user 'remote_user', password 'remote_password');
CREATE FOREIGN TABLE public.remote_orders_ft (
order_id bigint,
customer_id bigint,
total_amt numeric,
created_at timestamp
)
SERVER remote_pg_server
OPTIONS (schema_name 'public', table_name 'orders');
SELECT *
FROM public.remote_orders_ft
WHERE created_at > now() - interval '7 days';
원격 PostgreSQL 접속이 되지 않는 경우 pg_hba.conf 설정, 포트 오픈, 방화벽 설정을 우선 확인합니다.

Postgres → Oracle 연결 (oracle_fdw)

Oracle 데이터베이스 연동은 oracle_fdw 확장을 사용합니다. Windows 환경에서는 Oracle Instant Client 설치 여부와 PATH 설정이 정상 동작의 핵심 요소입니다.

 

Oracle Instant Client 설치 후 PATH 환경변수에 해당 경로를 반드시 포함해야 하며, PostgreSQL 서비스 재시작이 필요합니다.

CREATE EXTENSION IF NOT EXISTS oracle_fdw;
CREATE SERVER ora_srv
FOREIGN DATA WRAPPER oracle_fdw
OPTIONS (dbserver '//ora.host.com:1521/XEPDB1');
GRANT USAGE ON FOREIGN SERVER ora_srv TO postgres;

CREATE USER MAPPING FOR postgres
SERVER ora_srv
OPTIONS (user 'SCOTT', password 'tiger');
CREATE FOREIGN TABLE public.ora_emp_ft (
empno numeric(4,0),
ename varchar(10),
sal numeric(7,2)
)
SERVER ora_srv
OPTIONS (schema 'SCOTT', table 'EMP', key 'EMPNO');
SELECT *
FROM public.ora_emp_ft;
oracle_fdw DLL 로딩 오류는 대부분 Instant Client 경로 미인식 문제입니다. 서비스 계정 기준 PATH 설정까지 반드시 확인합니다.

MySQL / SQL Server 등 기타 데이터베이스 연결 전략

MySQL은 mysql_fdw, SQL Server는 tds_fdw 또는 ODBC FDW를 활용할 수 있습니다. Windows 환경에서는 ODBC 드라이버 기반 접근 방식이 현실적인 선택이 되는 경우가 많습니다.

 

전용 FDW가 안정적으로 제공되는 경우에는 이를 우선 검토하며, 설치나 유지 관리가 어려운 경우 ODBC 기반 접근 방식을 선택하는 것이 운영 측면에서 유리합니다.

성능 설계 및 최적화 전략

FDW는 네트워크를 통해 원격 쿼리를 수행하므로 성능 설계가 매우 중요합니다. 무분별한 사용은 오히려 시스템 전체 성능 저하로 이어질 수 있습니다.

  • WHERE 조건을 최대한 명확히 작성하여 원격 필터링을 유도합니다.
  • 필요한 컬럼만 조회하여 데이터 전송량을 최소화합니다.
  • 외부 테이블에 대해 ANALYZE를 수행하여 실행 계획 품질을 개선합니다.
  • 대량 집계나 통계 쿼리는 원격 DB에서 View로 정리한 후 연결합니다.
  • 빈번한 조회 데이터는 주기적 적재 또는 구체화 전략을 병행합니다.
FDW는 실시간 조회에 적합하며, 리포트·집계성 데이터는 배치 전략과 병행하는 것이 이상적입니다.

보안 설계 시 고려 사항

FDW는 외부 데이터베이스 접근 권한을 내부로 확장하는 구조이므로 보안 설계가 필수적입니다.

  • User Mapping 계정은 최소 권한 원칙으로 운영합니다.
  • 읽기 전용 목적이라면 SELECT 권한만 부여합니다.
  • 운영 계정과 연동 계정을 분리하여 사용합니다.
  • Foreign Server 사용 권한은 필요한 사용자에게만 부여합니다.
  • 접속 이력 및 쿼리 로그를 통해 접근을 추적합니다.

실전 운영 및 장애 대응 전략

실제 운영 환경에서는 외부 데이터베이스 장애가 곧바로 내부 서비스 장애로 전파될 수 있습니다. 이를 방지하기 위한 사전 설계가 중요합니다.

  • FDW 쿼리 실패 시 서비스 영향도를 사전에 정의합니다.
  • 타임아웃 및 재시도 정책을 애플리케이션 레벨에서 고려합니다.
  • 외부 장애 발생 시 대체 경로 또는 캐시 데이터 활용을 준비합니다.
  • 중요 배치 작업은 FDW가 아닌 직접 적재 방식으로 분리합니다.
  • 연결 빈도 및 실패율을 지속적으로 모니터링합니다.

마무리

PostgreSQL Foreign Data Wrapper는 단순한 외부 테이블 기능을 넘어 이종 데이터베이스를 유연하게 통합할 수 있는 강력한 도구입니다. 특히 Oracle 중심의 기존 환경에서 PostgreSQL로 점진적 전환을 고려하는 경우, FDW는 매우 현실적인 연결 해법이 됩니다.

 

다만 FDW는 만능이 아니며 성능, 보안, 장애 전파 측면을 충분히 고려한 설계가 필요합니다. 실시간 조회는 FDW로, 대량 처리와 핵심 리포트는 별도 적재 구조로 분리하는 전략이 장기적으로 안정적인 운영을 가능하게 합니다

커피 한 잔의 힘

이 글이 도움이 되셨다면, 커피 한 잔으로 응원해주세요!
여러분의 작은 후원이 더 좋은 콘텐츠를 만드는 큰 힘이 됩니다.