외부 데이터

외부 데이터 (Foreign Data) 다루기

PostgreSQL 안에 없는 데이터를, 마치 우리 데이터베이스 안에 있는 것처럼 일반 SQL로 조회하고 싶다면 어떻게 해야 할까요? 그럴 때 쓰는 게 바로 외부 데이터(Foreign Data)예요. PostgreSQL은 SQL/MED 규격의 일부를 구현해서, 외부 데이터 소스에 일반 SQL 질의로 접근할 수 있게 해 줘요. 참고로 여기서 말하는 외부 데이터는 데이터베이스 안의 제약 조건인 외래 키(Foreign Key)와는 완전히 다른 개념이에요.

출처: 공식문서

외부 데이터 래퍼 (Foreign Data Wrapper)

외부 데이터에 접근하려면 외부 데이터 래퍼(FDW) 가 필요해요. 래퍼는 외부 데이터 소스와 통신하는 라이브러리인데, 접속 방법이나 데이터를 얻는 세부 사항을 우리에게 숨겨 줘요. 덕분에 우리는 "이 소스에 이렇게 연결해" 정도만 알려주면, 실제 통신은 래퍼가 알아서 처리해요.

몇 가지 래퍼는 contrib 모듈로 이미 제공되고 있고, 서드파티 제품으로 제공되는 것도 있어요. 기존 래퍼로 부족하다면 직접 작성할 수도 있어요.

만들고 붙이는 순서: 서버 → 테이블

실제로 외부 데이터를 쓰려면 두 단계로 객체를 만들어야 해요.

  1. 외부 서버(Foreign Server): 특정 외부 데이터 소스에 어떻게 연결할지를 정의하는 객체예요. 연결에 필요한 옵션들이 여기 담겨요.
  2. 외부 테이블(Foreign Table): 원격 데이터의 구조를 정의하는 테이블이에요. 일반 테이블처럼 질의에 쓸 수 있지만, PostgreSQL 서버에는 실제 저장 공간이 없어요. 질의할 때마다 래퍼에게 데이터를 가져오라고 시키고, 갱신 명령이면 외부 소스로 데이터를 보내라고 시켜요.

인증이 필요할 땐 사용자 매핑

외부 데이터 소스에 접근할 때 인증이 필요할 수 있어요. 이 정보는 사용자 매핑(User Mapping) 으로 제공할 수 있는데, 현재 PostgreSQL 역할(role)에 따라 사용자 이름이나 비밀번호 같은 추가 정보를 담을 수 있어요. 역할별로 다른 자격 증명을 붙여주고 싶을 때 딱 맞는 도구예요.

더 알아보기 (Learn more)

  • 래퍼·서버·매핑·테이블 생성 명령: CREATE FOREIGN DATA WRAPPER, CREATE SERVER, CREATE USER MAPPING, CREATE FOREIGN TABLE
  • 원격 스키마를 한 번에 가져오기: IMPORT FOREIGN SCHEMA
  • 직접 래퍼를 작성하려면: Chapter 58. Writing A Foreign Data Wrapper