> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 논리적 복제를 사용하여 Managed Postgres로 이전하기

> 논리적 복제를 사용하여 PostgreSQL 데이터를 ClickHouse Managed Postgres로 이전하는 방법을 알아보세요

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

export const galaxyOnClick = eventName => () => {
  try {
    if (typeof window !== "undefined" && window.galaxy && eventName) {
      window.galaxy.track(eventName, {
        interaction: "click"
      });
    }
  } catch (e) {}
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <Icon />
                <span>Beta</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Beta feature. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        Learn more.
                    </a>
                </u>
            </span>
        </div>;
};

이 가이드에서는 Postgres 네이티브 논리적 복제를 사용하여 PostgreSQL 데이터베이스를 ClickHouse Managed Postgres로 이전하는 방법을 단계별로 안내합니다.

<div id="migration-logical-replication-prerequisites">
  ## 사전 요구 사항
</div>

* 원본 PostgreSQL 데이터베이스에 액세스할 수 있어야 합니다.
* 로컬 머신에 `psql`,`pg_dump`, `pg_restore`가 설치되어 있어야 합니다. 이는 대상 데이터베이스에 빈 테이블을 만들기 위해 필요합니다. 일반적으로 PostgreSQL 설치 시 함께 제공됩니다. 설치되어 있지 않다면 [PostgreSQL 공식 웹사이트](https://www.postgresql.org/download/)에서 다운로드할 수 있습니다.
* 원본 데이터베이스는 ClickHouse Managed Postgres에서 접근할 수 있어야 합니다. 필요한 방화벽 규칙 또는 Security Group 설정이 이 연결을 허용하는지 확인하십시오. Managed Postgres 인스턴스의 egress IP는 다음을 실행해 확인할 수 있습니다:

```shell theme={null}
dig +short <your-managed-postgres-hostname>
```

<div id="migration-logical-replication-setup">
  ## 설정
</div>

논리적 복제가 동작하려면 원본 데이터베이스가 올바르게 설정되어 있어야 합니다. 주요 요구 사항은 다음과 같습니다.

* 원본 데이터베이스에서 `wal_level`이 `logical`로 설정되어 있어야 합니다.
* 원본 데이터베이스에서 `max_replication_slots`가 최소 `1`로 설정되어 있어야 합니다.
* RDS(이 가이드에서는 예시로 사용)에서는 parameter group에 `rds.logical_replication`이 `1`로 설정되어 있는지 확인해야 합니다.
* 원본 데이터베이스 사용자는 `REPLICATION` 권한을 가지고 있어야 합니다. RDS의 경우 다음을 실행하십시오:
  ```sql theme={null}
  GRANT rds_replication TO <your-username>;
  ```
* 대상 데이터베이스에 사용할 역할(Role)에는 대상 데이터베이스 객체에 대한 쓰기 권한이 있어야 합니다:
  ```sql theme={null}
  GRANT USAGE ON SCHEMA <schema_i> TO subscriber_user;
  GRANT CREATE ON DATABASE destination_db TO subscriber_user;
  GRANT pg_create_subscription TO subscriber_user;

  -- 테이블 권한 부여
  GRANT INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA <schema_i> TO subscriber_user;
  ```

원본 데이터베이스가 다음과 같이 설정되어 있는지 확인하십시오:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/logical_replication/source-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=f55dd2a25db22de1773bc129abc14714" alt="소스 PostgreSQL 복제 설정" size="md" border width="1400" height="932" data-path="images/managed-postgres/logical_replication/source-setup.png" />

<div id="migration-logical-replication-schema-dump">
  ## 소스 데이터베이스의 스키마만 덤프하기
</div>

논리적 복제를 설정하기 전에 대상 ClickHouse Managed Postgres 데이터베이스에 스키마(schema)를 먼저 생성해야 합니다. 이를 위해 `pg_dump`를 사용해 소스 데이터베이스의 스키마만 포함된 덤프를 만들 수 있습니다:

```shell theme={null}
pg_dump \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    -s \
    --format directory \
    -f rds-dump
```

여기서는 다음과 같습니다.

* `<user>`, `<password>`, `<host>`, `<port>`, `<database>`를 소스 데이터베이스 자격 증명으로 바꾸십시오.
* `-s`는 스키마만 덤프하도록 지정합니다.
* `--format directory`는 덤프를 디렉터리 포맷으로 생성하도록 지정하며, 이 포맷은 `pg_restore`에 적합합니다.
* `-f rds-dump`는 덤프 파일의 출력 디렉터리를 지정합니다. 이 디렉터리는 자동으로 생성되므로 미리 존재하지 않아야 합니다.

이 경우 테이블은 `events`와 `users` 두 개입니다. `events`에는 100만 개의 행이 있고, `users`에는 1천 개의 행이 있습니다.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/source-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=172023020275391d1773c80d096a1969" alt="소스 PostgreSQL 테이블 설정" size="xl" border width="3766" height="2312" data-path="images/managed-postgres/pg_dump_restore/source-setup.png" />

<div id="migration-pgdump-pg-restore-create-pg">
  ### Managed Postgres 인스턴스 생성
</div>

먼저 Managed Postgres 인스턴스를 설정해 두었는지 확인하십시오. 가능하면 원본과 동일한 리전에 설정하는 것이 좋습니다. [여기](/ko/products/managed-postgres/quickstart#create-postgres-database)의 빠른 시작 가이드를 따라 진행할 수 있습니다. 이 가이드에서는 다음과 같은 구성을 생성합니다.

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/create-pg-for-migration.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=966d2a5124a3a3802e8c1072112c7e9b" alt="ClickHouse Managed Postgres 인스턴스 생성" size="md" border width="1532" height="1570" data-path="images/managed-postgres/pg_dump_restore/create-pg-for-migration.png" />

<div id="migration-logical-replication-restore-schema">
  ## ClickHouse Managed Postgres에 스키마 복원하기
</div>

이제 스키마(schema) 덤프가 준비되었으므로 `pg_restore`를 사용해 ClickHouse Managed Postgres 인스턴스에 복원할 수 있습니다:

```shell theme={null}
pg_restore \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    --verbose \
    rds-dump
```

여기에서:

* `<user>`, `<password>`, `<host>`, `<port>`, `<database>`를 대상 ClickHouse Managed Postgres 데이터베이스의 자격 증명으로 바꾸십시오.
* `--verbose`는 복원 과정에서 자세한 출력을 제공합니다.
  이 명령은 데이터는 제외한 채 대상 데이터베이스에 모든 테이블, 인덱스, 뷰 및 기타 스키마 객체를 생성합니다.

이 예시에서는 이 명령을 실행한 후 두 개의 테이블이 생성되었으며, 모두 비어 있습니다:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/logical_replication/target-initial-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=cb1765a7349f5c579d6d8626b32e43dd" alt="대상 ClickHouse Managed Postgres 초기 설정" size="xl" border width="2019" height="445" data-path="images/managed-postgres/logical_replication/target-initial-setup.png" />

<div id="migration-logical-replication-setup-replication">
  ## 논리적 복제 설정
</div>

스키마가 준비되었으므로 이제 원본 데이터베이스에서 대상 ClickHouse Managed Postgres 데이터베이스로 논리적 복제를 설정할 수 있습니다. 이를 위해 원본 데이터베이스에 publication을 만들고 대상 데이터베이스에 subscription을 만듭니다.

<div id="migration-logical-replication-create-publication">
  ### 원본 데이터베이스에 publication 생성하기
</div>

원본 PostgreSQL 데이터베이스에 연결한 다음, 복제하려는 테이블이 포함된 publication을 생성하십시오.

```sql theme={null}
CREATE PUBLICATION <pub_name> FOR TABLE table1, table2...;
```

<Info>
  테이블이 많은 경우 FOR ALL TABLES publication을 생성하면 네트워크 오버헤드가 발생할 수 있습니다. 복제할 테이블만 지정하는 것이 좋습니다.
</Info>

<div id="migration-logical-replication-create-subscription">
  ### 대상 ClickHouse Managed Postgres 데이터베이스에서 subscription 만들기
</div>

다음으로, 대상 ClickHouse Managed Postgres 데이터베이스에 연결한 뒤 원본 데이터베이스의 publication에 연결할 subscription을 생성합니다.

```sql theme={null}
CREATE SUBSCRIPTION demo_rds_subscription
CONNECTION 'postgresql://<user>:<password>@<host>:<port>/<database>'
PUBLICATION <pub_name_you_entered_above>;
```

이 작업을 수행하면 원본 데이터베이스에 replication slot이 자동으로 생성되고, 지정한 테이블의 데이터를 대상 데이터베이스로 복제하기 시작합니다. 데이터 크기에 따라 이 과정에는 다소 시간이 걸릴 수 있습니다.

이 예시에서는 subscription을 설정한 후 데이터가 유입되었습니다:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/logical_replication/migration-result.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=2a22a4c41382e425bf6b6ccd7a1c4cb3" alt="논리적 복제 후 마이그레이션 결과" size="xl" border width="1920" height="658" data-path="images/managed-postgres/logical_replication/migration-result.png" />

이제 원본 데이터베이스에 새로 삽입되는 행은 거의 실시간으로 대상 ClickHouse Managed Postgres 데이터베이스에 복제됩니다.

<div id="migration-logical-replication-caveats">
  ## 주의 사항 및 고려 사항
</div>

* 논리적 복제는 데이터 변경(INSERT, UPDATE, DELETE)만 복제합니다. 스키마 변경(예: ALTER TABLE)은 별도로 처리해야 합니다.
* 복제 중단을 방지하려면 원본 데이터베이스와 대상 데이터베이스 간 네트워크 연결이 안정적인지 확인하세요.
* 대상 데이터베이스가 원본 데이터베이스의 변경 사항을 제때 반영하고 있는지 확인하려면 복제 지연을 모니터링하세요. 원본 데이터베이스에서 `max_slot_wal_keep_size`를 적절한 값으로 설정하면 계속 커지는 replication slot을 관리하고 과도한 디스크 공간 사용을 방지하는 데 도움이 됩니다.
* 사용 사례에 따라 복제 프로세스에 대한 모니터링 및 알림을 설정하는 것이 좋습니다.

<div id="migration-pgdump-pg-restore-next-steps">
  ## 다음 단계
</div>

축하합니다! `pg_dump`와 `pg_restore`를 사용하여 PostgreSQL 데이터베이스를 ClickHouse Managed Postgres로 성공적으로 마이그레이션했습니다. 이제 Managed Postgres의 기능과 ClickHouse와의 통합을 살펴볼 준비가 되었습니다. 시작에 도움이 되는 10분 분량의 빠른 시작 가이드는 다음과 같습니다.

* [Managed Postgres 빠른 시작 가이드](/ko/products/managed-postgres/quickstart)
