

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# pg\$1transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport"></a>

*Raunak Rishabh, Jitender Kumar, Amazon Web Services*

## 요약
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-summary"></a>

이 패턴은 **pg\$1transport** 확장 프로그램을 사용하여 PostgreSQL DB 인스턴스용 두 Amazon Relational Database Service(Amazon RDS) 간에 매우 큰 데이터베이스를 마이그레이션하는 단계를 설명합니다. 이 확장 프로그램은 각 데이터베이스를 이동하기 위한 물리적 전송 메커니즘을 제공합니다. 최소한의 처리로 데이터베이스 파일을 스트리밍함으로써 가동 중단을 최소화하면서 DB 인스턴스 간에 대규모 데이터베이스를 매우 빠르게 마이그레이션할 수 있는 방법을 제공합니다. 이 확장 프로그램은 대상 DB 인스턴스가 소스 DB 인스턴스에서 데이터베이스를 가져오는 풀링 모델을 사용합니다.

## 사전 조건 및 제한 사항
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-prereqs"></a>

**사전 조건 **
+ 두 DB 인스턴스 모두 동일한 메이저 버전의 PostgreSQL을 실행해야 합니다.
+ 데이터베이스는 대상에 없어야 합니다. 그렇지 않으면 전송이 실패합니다.
+ 소스 데이터베이스에서 **pg\$1transport**이외의 확장 프로그램을 활성화하지 않아야 합니다.
+ 모든 소스 데이터베이스 객체는 기본 **pg\$1default** 테이블스페이스에 있어야 합니다.
+ 소스 DB 인스턴스의 보안 그룹은 대상 DB 인스턴스에서 들어오는 트래픽을 허용해야 합니다.
+ [psql](https://www.postgresql.org/docs/11/app-psql.html) 또는 [pgAdmin](https://www.pgadmin.org/)과 같은 PostgreSQL 클라이언트를 설치하여 Amazon RDS PostgreSQL DB 인스턴스와 함께 사용합니다. 클라이언트는 로컬 시스템에 설치하거나 Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스를 사용할 수 있습니다. 이 패턴에서는 EC2 인스턴스에서 psql을 사용합니다.

**제한 사항**
+ Amazon RDS for PostgreSQL의 서로 다른 주요 버전 간에는 데이터베이스를 전송할 수 없습니다.
+ 소스 데이터베이스의 액세스 권한 및 소유권은 대상 데이터베이스로 전송되지 않습니다.
+ 읽기 전용 복제본 또는 읽기 전용 복제본 또는 읽기 전용 복제본의 상위 인스턴스에서 전송 가능 데이터베이스를 사용할 수 없습니다.
+ 이 방법으로 전송하려는 데이터베이스 테이블에서는 **reg** 데이터 유형을 사용할 수 없습니다.
+ DB 인스턴스에서는 동시에 최대 32개의 전송(가져오기 및 내보내기 포함)을 실행할 수 있습니다.
+ 테이블의 이름을 바꾸거나 테이블을 포함/제외할 수 없습니다. 모든 것이 그대로 마이그레이션됩니다.

**주의**
+ 확장 프로그램을 제거하기 전에 백업을 생성합니다. 왜냐하면 확장 프로그램을 제거하면 데이터베이스 작동에 중요한 종속 객체 및 일부 데이터도 제거되기 때문입니다.
+ **pg\$1transport** 작업자 수와 `work_mem` 값을 결정할 때는 소스 인스턴스의 다른 데이터베이스에서 실행되고 있는 인스턴스 클래스와 프로세스를 고려합니다.
+ 전송이 시작되면 소스 데이터베이스의 모든 연결이 종료되고 데이터베이스가 읽기 전용 모드로 전환됩니다.

**참고**  
전송이 한 데이터베이스에서 실행되고 있는 경우 동일한 서버의 다른 데이터베이스에는 영향을 주지 않습니다.** ** 

**제품 버전**
+ Amazon RDS for PostgreSQL 10.10 이상 및 Amazon RDS for PostgreSQL 11.5 이상입니다. 최신 버전 정보는 Amazon RDS 설명서의 [DB 인스턴스 간 PostgreSQL 데이터베이스 전송](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)을 참조하세요.

## 아키텍처
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-architecture"></a>

![\[Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d5fb7ea3-32b7-4602-b382-3cf5c075c7c9/images/aec4d8d2-37a8-4136-9042-f9667ac4aebb.png)


## 도구
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-tools"></a>
+ **pg\$1transport**은 각 데이터베이스를 이동하기 위한 물리적 전송 메커니즘을 제공합니다. 물리적 전송은 최소한의 처리로 데이터베이스 파일을 스트리밍함으로써 기존의 덤프 및 로드 프로세스보다 훨씬 빠르게 데이터를 이동하고 가동 중단을 최소화합니다. PostgreSQL 전송 가능 데이터베이스는 대상 DB 인스턴스가 소스 DB 인스턴스에서 데이터베이스를 가져오는 풀링 모델을 사용합니다. 이 패턴에 설명된 대로 소스 및 대상 환경을 준비할 때 이 확장 프로그램을 DB 인스턴스에 설치합니다.
+ [psql](https://www.postgresql.org/docs/11/app-psql.html)을 사용하면 PostgreSQL DB 인스턴스에 연결하여 작업할 수 있습니다. [시스템에 **psql**을 설치하려면 PostgreSQL 다운로드](https://www.postgresql.org/download/) 페이지를 참조하세요.

## 에픽
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-epics"></a>

### 타겟 파라미터 그룹 생성
<a name="create-the-target-parameter-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 시스템에 대한 파라미터 그룹을 생성합니다. | 대상 파라미터 그룹으로 식별되는 그룹 이름을 지정합니다, 예를 들면, `pgtarget-param-group`입니다. 자세한 지침은 [ Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)를 참조하세요. | DBA | 
| 파라미터 그룹의 파라미터를 수정합니다. | 다음 파라미터를 설정합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)이 파라미터에 대한 자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)를 참조하세요. | DBA | 

### 소스 파라미터 그룹 생성
<a name="create-the-source-parameter-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 시스템에 대한 파라미터 그룹을 생성합니다. | 소스 파라미터 그룹으로 식별되는 그룹 이름을 지정합니다, 예를 들면, `pgsource-param-group`입니다. 자세한 지침은 [ Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)를 참조하세요. | DBA | 
| 파라미터 그룹의 파라미터를 수정합니다. | 다음 파라미터를 설정합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)이 파라미터에 대한 자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)를 참조하세요. | DBA | 

### 대상 환경 준비
<a name="prepare-the-target-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스를 전송할 신규 Amazon RDS for PostgreSQL DB 인스턴스를 생성합니다. | 비즈니스 요구 사항에 따라 인스턴스 클래스와 PostgreSQL 버전을 결정합니다. | 데이터베이스 관리자, 시스템 관리자, 데이터베이스 아키텍트 | 
| EC2 인스턴스로부터의 DB 인스턴스 포트 연결을 허용하도록 대상의 보안 그룹을 수정합니다. | 기본적으로 PostgreSQL 인스턴스의 포트는 5432입니다. 다른 포트를 사용하는 경우 EC2 인스턴스에 대해 해당 포트에 대한 연결이 열려 있어야 합니다. | DBA, 시스템 관리자 | 
| 인스턴스를 수정하고 새로운 타겟 파라미터 그룹을 할당합니다. | 예를 들어 `pgtarget-param-group`입니다. | DBA | 
| 대상 Amazon RDS DB 인스턴스를 다시 시작합니다. | `shared_preload_libraries`과 `max_worker_processes`파라미터는 정적 파라미터이므로 인스턴스를 재부팅해야 합니다. | DBA, 시스템 관리자 | 
| psql을 사용하여 EC2 인스턴스에서 데이터베이스에 연결합니다. | 다음 명령을 사용합니다. <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | DBA | 
| pg\$1transport 확장 프로그램을 생성합니다. | `rds_superuser` 역할이 있는 사용자로서 다음 쿼리를 실행합니다.<pre>create extension pg_transport;</pre> | DBA | 

### 소스 환경 준비
<a name="prepare-the-source-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 인스턴스 및 대상 DB 인스턴스로부터의 DB 인스턴스 포트 연결을 허용하도록 소스의 보안 그룹을 수정 | 기본적으로 PostgreSQL 인스턴스의 포트는 5432입니다. 다른 포트를 사용하는 경우 EC2 인스턴스에 대해 해당 포트에 대한 연결이 열려 있어야 합니다. | DBA, 시스템 관리자 | 
| 인스턴스를 수정하고 새로운 소스 파라미터 그룹을 할당합니다. | 예를 들어 `pgsource-param-group`입니다. | DBA | 
| 소스 Amazon RDS DB 인스턴스를 다시 시작합니다. | `shared_preload_libraries`과 `max_worker_processes`파라미터는 정적 파라미터이므로 인스턴스를 재부팅해야 합니다. | DBA | 
| psql을 사용하여 EC2 인스턴스에서 데이터베이스에 연결합니다. | 다음 명령을 사용합니다. <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | DBA | 
| pg\$1transport 확장 프로그램을 만들고 데이터베이스에서 전송할 다른 모든 확장 프로그램을 제거합니다. | 소스 데이터베이스에 **pg\$1transport**이외의 확장 프로그램이 설치되어 있는 경우 전송이 실패합니다. 이 명령은 해당 `rds_superuser` 역할을 가진 사용자가 실행해야 합니다. | DBA | 

### 전송 수행
<a name="perform-the-transport"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 모의 실행을 수행합니다. | `transport.import_from_server` 함수를 사용하여 먼저 모의 실행을 다음과 같이 실시합니다.<pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');</pre>이 함수의 마지막 파라미터(`true`로 설정)는 모의 실행을 정의합니다.이 함수는 주요 전송을 실행할 때 나타날 수 있는 모든 오류를 표시합니다. 주요 전송을 실행하기 전에 오류를 해결합니다. | DBA | 
| 모의 실습이 성공하면 데이터베이스 전송을 시작합니다. | `transport.import_from_server` 함수를 실행하여 전송을 실시합니다. 소스에 연결하고 데이터를 가져옵니다. <pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);</pre>이 함수의 마지막 파라미터(`false`로 설정)는 모의 실습이 아님을 나타냅니다. | DBA | 
| 전송 후 단계를 실시합니다. | 데이터베이스 전송이 완료된 후:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html) | DBA | 

## 관련 리소스
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-resources"></a>
+ [Amazon RDS 설명서](https://docs.aws.amazon.com/rds/)
+ [pg\$1transport 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#PostgreSQL.TransportableDB.Setup)
+ [RDS PostgreSQL 전송 가능한 데이터베이스를 사용한 데이터베이스 마이그레이션](https://aws.amazon.com/blogs/database/migrating-databases-using-rds-postgresql-transportable-databases/)(블로그 게시물)
+ [PostgreSQL 다운로드](https://www.postgresql.org/download/linux/redhat/)
+ [psql 유틸리티](https://www.postgresql.org/docs/11/app-psql.html)
+ [DB 파라미터 그룹 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Creating)
+ [파라미터 그룹의 파라미터를 수정하려면](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Modifying)
+ [PostgreSQL 다운로드](https://www.postgresql.org/download/)