Amazon Relational Database Service
사용 설명서

Amazon RDS에서 PostgreSQL로 데이터 가져오기

Amazon RDS로 이동하려는 기존 PostgreSQL 배포가 있다고 가정하십시오. 작업의 복잡성은 데이터베이스의 크기와 전송하는 데이터베이스 객체 유형에 따라 다릅니다. 예를 들어 프로시저 및 트리거와 함께 기가바이트 규모의 데이터세트가 데이터베이스에 저장되어 있다고 가정하겠습니다. 이러한 데이터베이스는 트리거나 프로시저 없이 근소한 메가바이트 규모의 테스트 데이터가 저장된 데이터베이스보다 더욱 복잡할 가능성이 높습니다.

다음과 같은 경우에는 기본 PostgreSQL 데이터베이스 마이그레이션 도구를 사용하는 것이 좋습니다.

  • 같은 유형의 마이그레이션을 수행합니다. 이 경우 대상 데이터베이스와 동일한 데이터베이스 엔진으로 데이터베이스에서 마이그레이션합니다.

  • 전체 데이터베이스를 마이그레이션합니다.

  • 기본 도구를 사용하여 최소한의 가동 중지로 시스템을 마이그레이션할 수 있습니다.

대부분의 다른 경우 AWS Database Migration Service(AWS DMS)를 사용하여 데이터베이스 마이그레이션을 수행하는 것이 가장 좋은 방법입니다. AWS DMS는 가동 중지 없이 데이터베이스를 마이그레이션할 수 있으며 대부분의 데이터베이스 엔진에서는 대상 데이터베이스로 전환할 준비가 될 때까지 지속적으로 복제를 계속할 수 있습니다. AWS DMS를 사용하여 동일하거나 다른 데이터베이스 엔진으로 마이그레이션할 수 있습니다. 원본 데이터베이스와 다른 데이터베이스 엔진으로 마이그레이션하는 경우 AWS Schema Conversion Tool(AWS SCT)를 사용하여 마이그레이션할 수 있습니다. AWS SCT를 사용하여 AWS DMS로 마이그레이션되지 않은 스키마 객체를 마이그레이션합니다. AWS DMS에 대한 자세한 내용은 AWS Database Migration Service란?​을 참조하십시오.

가져오기에 대해서만 다음 설정을 포함하도록 DB 파라미터 그룹을 수정합니다. 파라미터 설정을 테스트하여 DB 인스턴스 크기에 가장 효율적인 설정을 찾아야 합니다. 또한 가져오기가 완료된 후 이들 파라미터를 프로덕션 값으로 되돌려야 합니다.

DB 인스턴스 설정을 다음과 같이 수정합니다.

  • DB 인스턴스 백업 비활성화(backup_retention을 0으로 설정).

  • Multi-AZ 비활성화.

다음 설정을 포함하도록 DB 파라미터 그룹을 수정합니다. 이들 설정은 데이터를 가져올 때만 사용해야 합니다. 파라미터 설정을 테스트하여 DB 인스턴스 크기에 가장 효율적인 설정을 찾아야 합니다. 또한 가져오기가 완료된 후 이들 파라미터를 프로덕션 값으로 되돌려야 합니다.

파라미터 가져오기 시 권장 값 설명

maintenance_work_mem

524288, 1048576, 2097152 또는 4194304(KB). 이들 설정은 512MB, 1GB, 2GB 및 4GB에 해당합니다.

이 설정의 값은 호스트 크기에 따라 달라집니다. 이 파라미터는 CREATE INDEX 문에서 사용되며 각 병렬 명령은 이 크기의 메모리를 사용할 수 있습니다. 이 값을 너무 높게 설정하여 메모리가 부족해지지 않도록 최선의 값을 계산합니다.

checkpoint_segments

256

이 설정의 값은 더 많은 디스크 공간을 소비하지만 WAL 로그에서는 경합이 감소합니다. PostgreSQL 버전 9.5.x 및 9.6.x에서는 이 값이 max_wal_size입니다.

checkpoint_timeout

1800

이 설정의 값은 WAL 교체 빈도를 줄일 수 있습니다.

synchronous_commit

Off

쓰기 속도를 높이려면 이 설정을 비활성화합니다. 이 파라미터를 끄면 서버 충돌 시 데이터 손실 위험이 증가합니다(FSYNC를 끄지 않음).

wal_buffers

8192

이 값은 8KB 단위입니다. 이는 다시 WAL 생성 속도에 도움이 됩니다.

autovacuum

Off

리소스를 사용하지 않으므로 데이터를 로드하는 동안에는 PostgreSQL auto-vacuum 파라미터를 비활성화합니다.

이런 설정과 함께 pg_dump -Fc(압축) 또는 pg_restore -j(병렬) 명령을 사용합니다.

참고

PostgreSQL의 pg_dumpall 명령을 사용하려면 DB 인스턴스를 생성할 때 부여되지 않은 super_user 권한이 필요하며, 따라서 이 명령은 데이터 가져오기에 사용할 수 없습니다.

Amazon EC2 인스턴스에서 PostgreSQL 데이터베이스 가져오기

Amazon EC2 인스턴스 상의 PostgreSQL Server에 데이터가 있는데 이를 PostgreSQL DB 인스턴스로 이동하려는 경우 다음 프로세스를 사용할 수 있습니다. 아래 목록에 수행할 단계가 나와 있습니다. 각 단계에 대해서는 다음에 이어지는 섹션에서 자세히 설명합니다.

  1. 로드할 데이터를 포함한 pg_dump를 사용하여 파일 만들기

  2. 대상 DB 인스턴스 만들기

  3. psql을 사용하여 DB 인스턴스에서 데이터베이스를 만들고 데이터 로드

  4. DB 인스턴스의 DB 스냅샷 만들기

1단계: 로드할 데이터를 포함하여 pg_dump로 파일 생성

pg_dump 유틸리티는 COPY 명령을 사용하여 PostgreSQL 데이터베이스의 스키마와 데이터 덤프를 만듭니다. pg_dump에 의해 생성되는 덤프 스크립트는 같은 이름을 가진 데이터베이스로 데이터를 로드하고 테이블, 인덱스 및 외래 키를 다시 만듭니다. pg_restore 명령과 -d 파라미터를 사용하여 데이터를 다른 이름의 데이터베이스로 복원할 수 있습니다.

데이터 덤프를 만들기 전, 대상 DB 인스턴스에서 개수를 확인할 수 있도록 행 개수를 확인하기 위해 덤프할 테이블을 쿼리해야 합니다.

다음 명령을 실행하면 mydb2라는 데이터베이스에 대해 mydb2dump.sql이라는 덤프 파일이 생성됩니다.

prompt>pg_dump dbname=mydb2 -f mydb2dump.sql

2단계: 대상 DB 인스턴스 생성

Amazon RDS 콘솔, AWS CLI 또는 API를 사용하여 대상 PostgreSQL DB 인스턴스를 만듭니다. 백업 보존 설정을 0으로 지정하여 인스턴스를 만들고 다중 AZ를 비활성화합니다. 그러면 데이터를 더 빠르게 가져올 수 있습니다. 데이터를 덤프하려면 먼저 인스턴스에 데이터베이스를 생성해야 합니다. 데이터베이스 이름은 덤프 데이터가 저장된 데이터베이스와 동일하게 지정할 수 있습니다. 그렇지 않으면 다른 이름으로 지정하는 것도 가능합니다. 이 경우에는 pg_restore 명령과 -d 파라미터를 사용하여 데이터를 새로운 이름의 데이터베이스로 복원할 수 있습니다.

예를 들어 다음 명령을 사용하여 데이터베이스를 덤프 및 복원하고 이름을 바꿀 수 있습니다.

pg_dump -Fc -v -h [endpoint of instance] -U [master username] [database] > [database].dump createdb [new database name] pg_restore -v -h [endpoint of instance] -U [master username] -d [new database name] [database].dump

3단계: psql을 사용하여 DB 인스턴스에서 데이터베이스를 만들고 데이터 로드

pg_dump 명령을 실행할 때 사용한 것과 같은 연결을 사용하여 대상 DB 인스턴스에 연결하고 데이터베이스를 다시 만들 수 있습니다. psql을 사용할 때는 마스터 사용자 이름과 마스터 암호를 사용하여 DB 인스턴스에 데이터베이스를 만들 수 있습니다.

다음 예제에서는 psql과 mydb2dump.sql이라는 덤프 파일을 사용하여 mypginstance라는 PostgreSQL DB 인스턴스에 mydb2라는 데이터베이스를 만듭니다.

Linux, OS X, Unix의 경우:

psql \ -f mydb2dump.sql \ --host mypginstance.c6c8mntzhgv0.us-west-2.rds.amazonaws.com \ --port 8199 \ --username myawsuser \ --password password \ --dbname mydb2

Windows의 경우:

psql ^ -f mydb2dump.sql ^ --host mypginstance.c6c8mntzhgv0.us-west-2.rds.amazonaws.com ^ --port 8199 ^ --username myawsuser ^ --password password ^ --dbname mydb2

4단계: DB 인스턴스의 DB 스냅샷 생성

데이터가 DB 인스턴스로 로드된 것을 확인했으면, 대상 PostgreSQL DB 인스턴스의 DB 스냅샷을 만드는 것이 좋습니다. DB 스냅샷은 DB 인스턴스를 알려진 상태로 복원하는 데 사용할 수 있는 DB 인스턴스의 완전한 백업입니다. 로드 직후에 생성된 DB 스냅샷은 사고 발생 시 데이터를 다시 로드하지 않아도 됩니다. 또한 이러한 스냅샷을 사용하여 새 DB 인스턴스를 시드할 수 있습니다. DB 스냅샷 생성에 대한 정보는 DB 스냅샷 생성 단원을 참조하십시오.

\copy 명령을 사용하여 PostgreSQL DB 인스턴스의 테이블로 데이터 가져오기

psql 프롬프트에서 \copy 명령을 실행하여 PostgreSQL DB 인스턴스의 테이블로 데이터를 가져올 수 있습니다. 이 테이블은 DB 인스턴스에 이미 존재하고 있어야 합니다. \copy 명령에 대한 자세한 내용은 PostgreSQL 문서 단원을 참조하십시오.

참고

\copy 명령은 삽입된 행의 개수와 같은 작업 확인 기능을 제공하지 않습니다. PostgreSQL은 오류로 인해 copy 명령이 실패할 경우 오류 메시지를 제공합니다.

원본 테이블의 데이터에서 .csv 파일을 만들고, psql을 사용하여 PostgreSQL 인스턴스의 대상 데이터베이스에 로그온한 후, 다음 명령을 실행합니다. 이 예제에서는 source-table을 원본 테이블 이름으로, source-table.csv를 .csv 파일로, target-db를 대상 데이터베이스로 사용합니다.

target-db=> \copy source-table from 'source-table.csv' with DELIMITER ',';

클라이언트 컴퓨터 명령 프롬프트에서 다음 명령을 실행할 수도 있습니다. 이 예제에서는 source-table을 원본 테이블 이름으로, source-table.csv를 .csv 파일로, target-db를 대상 데이터베이스로 사용합니다.

Linux, OS X, Unix의 경우:

$psql target-db \ -U <admin user> \ -p <port> \ -h <DB instance name> \ -c "\copy source-table from 'source-table.csv' with DELIMITER ','"

Windows의 경우:

$psql target-db ^ -U <admin user> ^ -p <port> ^ -h <DB instance name> ^ -c "\copy source-table from 'source-table.csv' with DELIMITER ','"

PostgreSQL DB 인스턴스용 RDS로 Amazon S3 데이터 가져오기

PostgreSQL DB 인스턴스용 RDS에 속하는 테이블로 Amazon S3의 데이터를 가져올 수 있습니다. 이를 위해서는 Amazon RDS가 제공하는 aws_s3 PostgreSQL 확장을 사용합니다.

참고

Amazon S3에서 PostgreSQL용 RDS로 가져오려면 데이터베이스에서 PostgreSQL 버전 10.7 이상을 실행 중이어야 합니다.

Amazon S3를 이용한 데이터 저장에 대한 자세한 내용은 Amazon Simple Storage Service 시작 안내서버킷 생성을 참조하십시오. 파일을 Amazon S3 버킷에 업로드하는 방법에 관한 지침은 Amazon Simple Storage Service 시작 안내서버킷에 객체 추가를 참조하십시오.

Amazon S3 데이터 가져오기 개요

Amazon S3 버킷에 저장된 데이터를 PostgreSQL 데이터베이스 테이블로 가져오려면 다음 단계를 따릅니다.

S3 데이터를 Amazon RDS로 가져오려면

  1. 필요한 PostgreSQL 확장을 설치합니다. 여기에는 aws_s3aws_commons 확장이 포함됩니다. 이렇게 하려면 psql을 시작하고 다음 명령을 사용합니다.

    psql=> CREATE EXTENSION aws_s3 CASCADE; NOTICE: installing required extension "aws_commons"

    aws_s3 확장에서는 Amazon S3 데이터를 가져오는 데 사용하는 aws_s3.table_import_from_s3 함수를 제공합니다. aws_commons 확장은 추가 헬퍼 함수를 제공합니다.

  2. 사용할 데이터베이스 테이블과 Amazon S3 파일을 식별합니다.

    aws_s3.table_import_from_s3 함수에는 가져온 데이터를 배치할 PostgreSQL 데이터베이스 테이블의 이름이 필요합니다. 또한 이 함수에서 가져올 Amazon S3 파일도 식별해야 합니다. 이 정보를 제공하려면 다음 단계를 따릅니다.

    1. 데이터를 배치할 PostgreSQL 데이터베이스 테이블을 식별합니다. 예를 들어 다음은 이 항목의 예제에 사용되는 샘플 t1 데이터베이스 테이블입니다.

      psql=> CREATE TABLE t1 (col1 varchar(80), col2 varchar(80), col3 varchar(80));
    2. 가져올 Amazon S3 파일을 식별하려면 다음 정보를 가져옵니다.

      • 버킷 이름 – 버킷은 Amazon S3 객체 또는 파일을 위한 컨테이너입니다.

      • 파일 경로 – 파일 경로를 통해 파일이 Amazon S3 버킷에 배치됩니다.

      • AWS 리전 – AWS 리전은 Amazon S3 버킷이 있는 위치입니다. 예를 들어 S3 버킷이 미국 동부(버지니아 북부) 리전에 있는 경우 us-east-1을 사용합니다. AWS 리전 이름 및 연결된 값의 목록은 리전 및 가용 영역 단원을 참조하십시오.

      이 정보를 얻는 방법에 대해 알아보려면 Amazon Simple Storage Service 시작 안내서에서 객체 보기를 참조하십시오. AWS CLI 명령 aws s3 cp를 사용하여 정보를 확인할 수 있습니다. 정보가 정확하면 이 명령이 Amazon S3 파일의 복사본을 다운로드합니다.

      aws s3 cp s3://sample_s3_bucket/sample_file_path ./
    3. aws_commons.create_s3_uri 함수를 사용하여 Amazon S3 파일 정보를 보관할 aws_commons._s3_uri_1 구조를 생성합니다. 이 aws_commons._s3_uri_1 구조를 aws_s3.table_import_from_s3 함수에 대한 호출의 파라미터로 제공합니다.

      psql 예제에서 다음을 참조하십시오.

      psql=> SELECT aws_commons.create_s3_uri( 'sample_s3_bucket', 'sample.csv', 'us-east-1' ) AS s3_uri \gset
  3. Amazon S3 파일에 액세스할 수 있는 권한을 부여합니다.

    Amazon S3 파일에서 데이터를 가져오려면 RDS for PostgreSQL DB 인스턴스에 파일이 저장된 Amazon S3 버킷에 액세스할 수 있는 권한을 부여해야 합니다. 이렇게 하려면 AWS Identity and Access Management(IAM) 역할 또는 보안 자격 증명을 사용합니다. 자세한 내용은 Amazon S3 버킷에 대한 액세스 권한 설정 단원을 참조하십시오.

  4. aws_s3.table_import_from_s3 함수를 호출하여 Amazon S3 데이터를 가져옵니다.

    위 준비 작업을 완료한 후에는 aws_s3.table_import_from_s3 함수를 사용해 Amazon S3 데이터를 가져옵니다. 자세한 내용은 aws_s3.table_import_from_s3 함수를 사용하여 Amazon S3 데이터 가져오기 단원을 참조하십시오.

Amazon S3 버킷에 대한 액세스 권한 설정

Amazon S3 파일에서 데이터를 가져오려면 RDS for PostgreSQL DB 인스턴스에 파일이 저장된 Amazon S3 버킷에 액세스할 수 있는 권한을 부여해야 합니다. 다음 항목에서 설명하는 두 방법 중 하나를 사용하여 Amazon S3 버킷에 대한 액세스 권한을 부여합니다.

IAM 역할을 사용해 Amazon S3 버킷에 액세스

Amazon S3 파일에서 데이터를 로드하기 전에 RDS for PostgreSQL DB 인스턴스에 파일이 저장된 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다. 그러면 추가 자격 증명 정보를 관리하거나 aws_s3.table_import_from_s3 함수 호출에서 제공할 필요가 없습니다.

이렇게 하려면 Amazon S3 버킷에 대한 액세스 권한을 부여하는 IAM 정책을 생성합니다. IAM 역할을 생성하여 정책을 역할에 연결합니다. 그런 다음 IAM 역할을 DB 인스턴스에 할당합니다.

IAM 역할을 통해 Amazon S3에 액세스할 수 있는 권한을 PostgreSQL DB 인스턴스용 RDS에 부여하려면

  1. IAM 정책을 생성합니다. 이 정책은 RDS for PostgreSQL DB 인스턴스가 Amazon S3에 액세스할 수 있도록 허용하는 버킷 및 객체 권한을 부여합니다.

    정책에 다음과 같은 필수 작업을 포함하여 Amazon S3 버킷에서 Amazon RDS로의 파일 전송을 허용합니다.

    • s3:GetObject

    • s3:ListBucket

    정책에 다음 리소스를 포함하여 Amazon S3 버킷 및 그 안의 객체를 식별합니다. 다음은 Amazon S3에 액세스하기 위한 Amazon 리소스 이름(ARN) 형색입니다.

    • arn:aws:s3:::your-s3-bucket

    • arn:aws:s3:::your-s3-bucket/*

    PostgreSQL용 Amazon RDS에 대한 IAM 정책 생성에 대한 자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용 단원을 참조하십시오. IAM 사용 설명서자습서: 첫 번째 고객 관리형 정책 생성 및 연결도 참조하십시오.

    다음 AWS CLI 명령은 이 옵션으로 rds-s3-import-policy라는 IAM 정책을 만듭니다. your-s3-bucket이라는 버킷에 대한 액세스 권한을 부여합니다.

    참고

    정책을 만든 후에 정책의 Amazon 리소스 이름(ARN)을 기록하십시오. IAM 역할에 정책을 연결할 때 이후 단계에 ARN이 필요합니다.

    Linux, OS X, Unix의 경우:

    aws iam create-policy \ --policy-name rds-s3-import-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket", "arn:aws:s3:::your-s3-bucket/*" ] } ] }'

    Windows의 경우:

    aws iam create-policy ^ --policy-name rds-s3-import-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket", "arn:aws:s3:::your-s3-bucket/*" ] } ] }'
  2. IAM 역할 생성. Amazon RDS이 이 IAM 역할을 수임하여 사용자 대신 Amazon S3 버킷에 액세스할 수 있도록 역할을 생성합니다. 자세한 내용은 IAM 사용 설명서의 역할을 만들어 IAM 사용자에게 권한 위임 단원을 참조하십시오.

    다음 예제에서는 AWS CLI 명령을 사용해 rds-s3-import-role이라는 역할을 생성하는 방법을 보여줍니다.

    Linux, OS X, Unix의 경우:

    aws iam create-role \ --role-name rds-s3-import-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

    Windows의 경우:

    aws iam create-role ^ --role-name rds-s3-import-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
  3. 생성한 IAM 역할에 생성한 IAM 정책을 연결합니다.

    다음 AWS CLI 명령은 앞서 생성한 정책을 rds-s3-import-role라는 역할에 연결합니다. your-policy-arn을 이전 단계에서 기록한 정책 ARN으로 바꿉니다.

    Linux, OS X, Unix의 경우:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-import-role

    Windows의 경우:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-import-role
  4. IAM 역할을 DB 인스턴스에 추가합니다. 이렇게 하려면 다음에 설명한 대로 AWS Management 콘솔 또는 AWS CLI를 사용합니다.

콘솔

콘솔을 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면

  1. AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 세부 정보를 표시하고자 하는 PostgreSQL DB 인스턴스 이름을 선택합니다.

  3. Connectivity & security(연결성 및 보안) 탭에 있는 Manage IAM roles(IAM 역할 관리) 섹션의 Add IAM roles to this instance(이 인스턴스에 IAM 역할 추가)에서 추가할 역할을 선택합니다.

  4. 기능에서 s3Import를 선택합니다.

  5. [Add role]을 선택합니다.

AWS CLI

CLI를 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면

  • 다음 명령을 사용해 my-db-instance라는 PostgreSQL DB 인스턴스에 역할을 추가합니다. your-role-arn을 이전 단계에서 기록한 정책 ARN으로 교체합니다. --feature-name 옵션의 값에 대해 s3Import를 사용합니다.

    Linux, OS X, Unix의 경우:

    aws rds add-role-to-db-instance \ --db-instance-identifier my-db-instance \ --feature-name s3Import \ --role-arn your-role-arn \ --region your-region

    Windows의 경우:

    aws rds add-role-to-db-instance ^ --db-instance-identifier my-dbi-nstance ^ --feature-name s3Import ^ --role-arn your-role-arn ^ --region your-region

보안 자격 증명을 사용해 Amazon S3 버킷에 액세스

원할 경우 IAM 역할을 사용하는 대신 보안 자격 증명을 사용해 Amazon S3 버킷에 대한 액세스 권한을 부여여할 수 있습니다. 이렇게 하려면 aws_s3.table_import_from_s3 함수 호출에 credentials 파라미터를 사용합니다.

credentials 파라미터는 AWS 자격 증명을 포함하는 aws_commons._aws_credentials_1 유형의 구조입니다. 다음과 같이 aws_commons.create_aws_credentials 함수를 사용해 aws_commons._aws_credentials_1 구조에서 액세스 키와 비밀 키를 설정하십시오.

psql=> SELECT aws_commons.create_aws_credentials( 'sample_access_key', 'sample_secret_key', '') AS creds \gset

다음과 같이 aws_commons._aws_credentials_1 구조를 생성한 후 aws_s3.table_import_from_s3 함수를 credentials 파라미터와 함께 사용해 데이터를 가져옵니다.

psql=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', :'creds' );

또는 aws_commons.create_aws_credentials 함수 호출 인라인을 aws_s3.table_import_from_s3 함수 호출에 포함할 수 있습니다.

psql=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') );

Amazon S3 액세스 문제 해결

Amazon S3 파일 데이터를 가져오려 할 때 연결 문제가 발생할 경우 다음 권장 사항을 참조하십시오.

aws_s3.table_import_from_s3 함수를 사용하여 Amazon S3 데이터 가져오기

aws_s3.table_import_from_s3 함수를 호출하여 Amazon S3 데이터를 가져옵니다.

참고

다음 예제에서는 Amazon S3 버킷에 대한 액세스 권한을 제공하기 위해 IAM 역할 방법을 사용합니다. 따라서 aws_s3.table_import_from_s3 함수 호출에는 자격 증명 파라미터가 없습니다.

다음은 psql을 사용하는 일반적인 PostgreSQL의 예입니다.

psql=> SELECT aws_s3.table_import_from_s3( 't1', '', '(format csv)', :'s3_uri' );

파라미터는 다음과 같습니다.

  • t1 – 데이터를 복사할 PostgreSQL DB 인스턴스의 테이블에 지정된 이름입니다.

  • '' – 데이터베이스 테이블의 열 목록입니다(선택 사항). 이 파라미터를 사용해 S3 데이터 중 어떤 열이 어떤 테이블 열에 들어가는지 표시할 수 있습니다. 열을 지정하지 않으면 모든 열이 테이블에 복사됩니다. 열 목록 사용에 대한 예시는 사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기 단원을 참조하십시오.

  • (format csv) – PostgreSQL COPY 인수입니다. 복사 프로세스에서는 PostgreSQL COPY 명령의 인수 및 형식을 사용합니다. 앞의 예에서 COPY 명령은 쉼표로 구분된 값(CSV) 파일 형식을 사용해 데이터를 복사합니다.

  • s3_uri – Amazon S3 파일을 식별하는 정보가 포함된 구조입니다. aws_commons.create_s3_uri 함수를 사용하여 s3_uri 구조를 생성하는 예제는 Amazon S3 데이터 가져오기 개요 단원을 참조하십시오.

이 함수의 전체 참조는 aws_s3.table_import_from_s3 단원을 참조하십시오.

다음 예제에서는 Amazon S3 데이터를 가져오기를 수행할 때 다양한 종류의 파일을 지정하는 방법을 보여줍니다.

사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기

다음 예제에서는 사용자 지정 구분 기호를 사용하는 파일을 가져오는 방법을 보여줍니다. 또한 aws_s3.table_import_from_s3 함수의 column_list 파라미터를 사용해 데이터베이스 테이블에서 데이터를 배치할 곳을 제어하는 방법을 보여줍니다.

이 예에서는 다음 정보가 Amazon S3 파일의 파이프로 구분된 열에 정리되어 있다고 가정합니다.

1|foo1|bar1|elephant1 2|foo2|bar2|elephant2 3|foo3|bar3|elephant3 4|foo4|bar4|elephant4 ...

사용자 지정 구분 기호를 사용하는 파일을 가져오려면

  1. 가져온 데이터에 대해 데이터베이스에서 테이블을 생성합니다.

    psql=> CREATE TABLE test (a text, b text, c text, d text, e text); CREATE TABLE
  2. aws_s3.table_import_from_s3 함수의 다음과 같은 형식을 사용해 Amazon S3 파일에서 데이터를 가져옵니다.

    aws_commons.create_s3_uri 함수 호출 인라인을 aws_s3.table_import_from_s3 함수 호출에 포함하여 파일을 지정할 수 있습니다.

    psql=> SELECT aws_s3.table_import_from_s3( 'test', 'a,b,d,e', 'DELIMITER ''|''', aws_commons.create_s3_uri('sampleBucket', 'pipeDelimitedSampleFile', 'us-east-2') );

이제 데이터는 다음 열의 테이블에 있습니다.

psql=> SELECT * FROM test; a | b | c | d | e ---+------+---+---+------+----------- 1 | foo1 | | bar1 | elephant1 2 | foo2 | | bar2 | elephant2 3 | foo3 | | bar3 | elephant3 4 | foo4 | | bar4 | elephant4

Amazon S3 압축(gzip) 파일 가져오기

다음 예에서는 gzip으로 압축된 Amazon S3에서 파일을 가져오는 방법을 보여줍니다.

파일이 다음 Amazon S3 메타데이터를 포함하고 있는지 확인합니다.

  • 키: Content-Encoding

  • 값: gzip

이 값을 Amazon S3 메타데이터에 추가하는 것에 관한 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서S3 객체에 메타데이터를 추가하려면 어떻게 해야 합니까?를 참조하십시오.

아래와 같이 gzip 파일을 PostgreSQL DB 인스턴스용 RDS로 가져옵니다.

psql=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text); CREATE TABLE psql=> SELECT aws_s3.table_import_from_s3( 'test_gzip', '', '(format csv)', 'myS3Bucket', 'test-data.gz', 'us-east-2' );

인코딩된 Amazon S3 파일 가져오기

다음 예에서는 Windows-1252 인코딩이 있는 Amazon S3에서 파일을 가져오는 방법을 보여줍니다.

psql=> SELECT aws_s3.table_import_from_s3( 'test_table', '', 'encoding ''WIN1252''', aws_commons.create_s3_uri('sampleBucket', 'SampleFile', 'us-east-2') );

함수 참조

aws_s3.table_import_from_s3

Amazon S3 데이터를 Amazon RDS 테이블로 가져옵니다. aws_s3 확장은 aws_s3.table_import_from_s3 함수를 제공합니다.

세 가지 필수 파라미터는 table_name, column_listoptions입니다. 이 파라미터에서는 데이터베이스 테이블을 식별하고 데이터가 테이블로 복사되는 방식을 지정합니다.

다음 파라미터도 사용할 수 있습니다.

  • s3_info 파라미터는 가져올 Amazon S3 파일을 지정합니다. 이 파라미터를 사용하는 경우 IAM 역할에서 PostgreSQL DB 인스턴스에 대해 Amazon S3에 액세스할 수 있는 권한을 제공합니다.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, s3_info aws_commons._s3_uri_1 )
  • credentials 파라미터에서는 Amazon S3에 액세스할 수 있는 자격 증명을 지정합니다. 이 파라미터를 사용할 때는 IAM 역할을 사용하지 마십시오.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, s3_info aws_commons._s3_uri_1, credentials aws_commons._aws_credentials_1 )

aws_s3.table_import_from_s3 파라미터는 다음 표에 설명되어 있습니다.

파라미터 설명
table_name 데이터를 가져올 필수 텍스트 문자열로서, PostgreSQL 데이터베이스 테이블의 이름을 포함합니다.
column_list

데이터를 복사할 PostgreSQL 데이터베이스 테이블 열의 목록(선택 사항)을 포함하는 필수 텍스트 문자열입니다. 문자열이 비어 있는 경우 테이블의 모든 열이 사용됩니다. 문제 해결 예는 사용자 지정 구분 기호를 사용하는 Amazon S3 파일 가져오기 단원을 참조하십시오.

options

PostgreSQL COPY 명령에 대한 인수를 포함하는 필수 텍스트 스트링입니다. 이 인수에서는 데이터가 PostgreSQL 테이블에 복사되는 방식을 지정합니다. 자세한 내용은 PostgreSQL COPY 설명서를 참조하십시오.

s3_info

S3 객체에 대한 다음 정보를 포함하는 aws_commons._s3_uri_1 복합 키입니다.

  • bucket – 파일을 포함하는 Amazon S3 버킷 이름입니다.

  • file_path – 파일의 Amazon S3 경로입니다.

  • region – 파일이 위치한 AWS 리전입니다. AWS 리전 이름 및 연결된 리전 값의 목록은 리전 및 가용 영역 단원을 참조하십시오.

aws_commons._s3_uri_1 복합 구조를 생성하려면 aws_commons.create_s3_uri 단원을 참조하십시오.

credentials

가져오기 작업에 사용할 다음 자격 증명을 포함하는 aws_commons._aws_credentials_1 복합 유형입니다.

  • 액세스 키

  • 비밀 키

  • 세션 토큰

aws_commons._aws_credentials_1 복합 구조를 생성하려면 aws_commons.create_aws_credentials 단원을 참조하십시오.

대체 파라미터

s3_infocredentials 파라미터 대신에 확장 파라미터 집합을 사용하면 테스트에 도움이 됩니다. 다음은 aws_s3.table_import_from_s3 함수에 대한 추가 구문 변형입니다.

  • s3_info 파라미터를 사용해 Amazon S3 파일을 식별하는 대신 bucket, file_pathregion 파라미터의 조합을 사용하십시오. IAM 역할은 이러한 형식의 함수를 통해 PostgreSQL DB 인스턴스에 대해 Amazon S3에 액세스할 수 있는 권한을 제공합니다.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, bucket text, file_path text, region text )
  • credentials 파라미터를 사용해 Amazon S3 액세스를 지정하는 대신 access_key, session_keysession_token 파라미터의 조합을 사용하십시오.

    aws_s3.table_import_from_s3 ( table_name text, column_list text, options text, bucket text, file_path text, region text, access_key text, secret_key text, session_token text )

이러한 대체 파라미터에 대한 설명을 다음 표에서 확인하십시오.

파라미터 설명
bucket

파일이 들어 있는 Amazon S3 버킷의 이름이 포함된 텍스트 문자열입니다.

file_path

파일의 Amazon S3 경로가 포함된 텍스트 문자열입니다.

region 파일이 위치한 AWS 리전이 포함된 텍스트 문자열입니다. AWS 리전 이름 및 연결된 값의 목록은 리전 및 가용 영역 단원을 참조하십시오.
access_key 가져오기 작업에 사용할 액세스 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.
secret_key 가져오기 작업에 사용할 비밀 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.
session_token (선택 사항) 가져오기 작업에 사용할 세션 키가 포함된 텍스트 문자열입니다. 기본값은 NULL입니다.

aws_commons.create_s3_uri

Amazon S3 파일 정보를 저장할 aws_commons._s3_uri_1 구조를 생성합니다. aws_s3.table_import_from_s3 함수의 s3_info 파라미터에서 aws_commons.create_s3_uri 함수의 결과를 사용합니다. 함수 구문은 다음과 같습니다.

aws_commons.create_s3_uri( bucket text, file_path text, region text )

aws_commons.create_s3_uri 함수 파라미터는 다음 표에 설명되어 있습니다.

파라미터 설명
bucket

파일의 Amazon S3 버킷 이름이 포함된 필수 텍스트 문자열입니다.

file_path

파일의 Amazon S3 경로가 포함된 필수 텍스트 문자열입니다.

region

파일이 위치한 AWS 리전이 포함된 필수 텍스트 문자열입니다. AWS 리전 이름 및 연결된 리전 값의 목록은 리전 및 가용 영역 단원을 참조하십시오.

aws_commons.create_aws_credentials

aws_commons._aws_credentials_1 구조에서 액세스 키와 비밀 키를 설정합니다. aws_s3.table_import_from_s3 함수의 credentials 파라미터에서 aws_commons.create_aws_credentials 함수의 결과를 사용합니다. 함수 구문은 다음과 같습니다.

aws_commons.create_aws_credentials( access_key text, secret_key text, session_token text )

aws_commons.create_aws_credentials 함수 파라미터는 다음 표에 설명되어 있습니다.

파라미터 설명
access_key

Amazon S3 파일 가져오기에 사용할 액세스 키가 포함된 필수 텍스트 문자열입니다. 기본값은 NULL입니다.

secret_key Amazon S3 파일 가져오기에 사용할 비밀 키가 포함된 필수 텍스트 문자열입니다. 기본값은 NULL입니다.
session_token Amazon S3 파일 가져오기에 사용할 세션 토큰이 포함된 텍스트 문자열(선택 사항)입니다. 기본값은 NULL입니다. 선택 사항인 session_token을 제공하는 경우 임시 자격 증명을 사용할 수 있습니다.

DB 인스턴스 간에 PostgreSQL 데이터베이스 전송

Amazon RDS에 대해 PostgreSQL 전송 가능 데이터베이스를 사용하여 두 DB 인스턴스 간에 PostgreSQL 데이터베이스를 전송할 수 있습니다. 이렇게 하면 개별 DB 인스턴스 간에 대용량 데이터베이스를 매우 빠르게 마이그레이션할 수 있습니다. 이 방법을 사용하여 데이터베이스를 전송하려면 DB 인스턴스가 모두 동일한 메이저 버전의 PostgreSQL을 실행해야 합니다.

전송 가능 데이터베이스를 사용하려면 pg_transport 확장을 설치하십시오. 이 확장은 각 데이터베이스를 이동하기 위한 물리적 전송 메커니즘을 제공합니다. 물리적 전송은 최소한의 처리로 데이터베이스 파일을 스트리밍함으로써 기존의 덤프 및 로드 프로세스보다 훨씬 빠르게 데이터를 이동하고 가동 중단을 최소화합니다. PostgreSQL 전송 가능 데이터베이스는 대상 DB 인스턴스가 소스 DB 인스턴스에서 데이터베이스를 가져오는 풀링 모델을 사용합니다.

참고

PostgreSQL 전송 가능 데이터베이스는 RDS for PostgreSQL 버전 10.10 이상 및 11.5 이상 버전에서 사용할 수 있습니다.

PostgreSQL 전송 가능 데이터베이스 사용에 대한 제한

전송 가능 데이터베이스에는 다음과 같은 제한 사항이 있습니다.

  • 읽기 전용 복제본 – 읽기 전용 복제본 또는 읽기 전용 복제본의 상위 인스턴스에서는 데이터베이스를 전송할 수 없습니다.

  • 지원되지 않는 열 유형 – 이 방법으로 전송하려는 데이터베이스 테이블에서는 reg 데이터 유형을 사용할 수 없습니다. 이러한 유형은 전송 중에 자주 변경되는 시스템 카탈로그 객체 ID(OID)에 따라 다릅니다.

  • 테이블스페이스 – 모든 소스 데이터베이스 객체는 기본 pg_default 테이블스페이스에 있어야 합니다.

  • 호환성 – 소스 및 대상 DB 인스턴스는 모두 동일한 메이저 버전의 PostgreSQL을 실행해야 합니다.

    전송이 시작되기 전에 transport.import_from_server 함수는 소스 및 대상 DB 인스턴스를 비교하여 데이터베이스 호환성을 확인합니다. 여기에는 PostgreSQL 메이저 버전 호환성 확인이 포함됩니다. 또한 이 함수는 대상 DB 인스턴스에 소스 데이터베이스를 수신하기에 충분한 공간이 있는지 확인합니다. 이 함수는 전송이 원활하게 이루어지도록 몇 가지 추가 점검을 수행합니다.

  • 확장 – 전송 중에 소스 DB 인스턴스에 설치할 수 있는 유일한 확장은 pg_transport입니다.

  • 역할 및 ACL – 소스 데이터베이스의 액세스 권한 및 소유권 정보는 대상 데이터베이스로 전달되지 않습니다. 모든 데이터베이스 객체는 전송의 로컬 대상 사용자가 생성하고 소유합니다.

  • 동시 전송 – 가져오기 및 내보내기를 모두 포함하여 DB 인스턴스에서 전송을 최대 총 32개까지 동시에 실행할 수 있습니다. 각 전송에 사용되는 작업자 프로세스를 정의하려면 pg_transport.work_mempg_transport.num_workers 파라미터를 사용합니다. 동시 전송을 수용하려면 max_worker_processes 파라미터를 약간 증가시켜야 할 수도 있습니다. 자세한 내용은 pg_transport 확장에 대한 구성 파라미터 단원을 참조하십시오.

PostgreSQL 데이터베이스를 전송하도록 설정

한 DB 인스턴스에서 다른 DB 인스턴스로 PostgreSQL 데이터베이스 전송을 준비하려면 다음 단계를 수행하십시오.

PostgreSQL 데이터베이스를 전송하도록 설정하려면

  1. 소스 DB 인스턴스의 보안 그룹이 대상 DB 인스턴스의 인바운드 트래픽을 허용하는지 확인합니다. 이 작업은 대상 DB 인스턴스가 소스 DB 인스턴스에 대한 가져오기 호출로 데이터베이스 전송을 시작하기 때문에 필요합니다. 보안 그룹을 사용하는 방법에 대한 자세한 내용은 보안 그룹을 통한 액세스 제어 단원을 참조하십시오.

  2. 소스 및 대상 DB 인스턴스 모두에서 각 파라미터 그룹의 shared_preload_libraries 파라미터에 pg_transport를 추가합니다. shared_preload_libraries 파라미터는 정적이므로 변경 사항을 적용하려면 데이터베이스를 다시 시작해야 합니다. 파라미터 그룹에 대한 자세한 내용은 DB 파라미터 그룹 작업 단원을 참조하십시오.

  3. 소스 및 대상 DB 인스턴스 모두에서 필요한 pg_transport PostgreSQL 확장을 설치합니다.

    이렇게 하려면 각 DB 인스턴스의 rds_superuser 역할이 있는 사용자로 psql을 시작한 후 다음 명령을 실행합니다.

    psql=> CREATE EXTENSION pg_transport;

transport.import_from_server 함수를 사용하여 PostgreSQL 데이터베이스 전송

PostgreSQL 데이터베이스를 전송하도록 설정에 설명된 프로세스를 완료한 후에는 전송을 시작할 수 있습니다. 이렇게 하려면 대상 DB 인스턴스에서 transport.import_from_server 함수를 실행합니다.

참고

전송의 대상 사용자와 연결의 소스 사용자는 모두 rds_superuser 역할의 멤버여야 합니다.

대상 DB 인스턴스에 전송할 소스 데이터베이스와 이름이 같은 데이터베이스가 포함되어 있지 않아야 합니다. 그렇지 않으면 전송이 실패합니다.

다음은 전송 예제입니다.

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);

이 함수를 사용하려면 데이터베이스 사용자 암호를 제공해야 합니다. 따라서 전송이 완료된 후 사용한 사용자 역할의 암호를 변경하는 것이 좋습니다. 또는 SQL 바인드 변수를 사용하여 임시 사용자 역할을 생성할 수 있습니다. 전송에 이러한 임시 역할을 사용한 후 나중에 해당 역할을 삭제하십시오.

transport.import_from_server 함수 및 해당 파라미터에 대한 자세한 내용은 transport.import_from_server 함수 참조 단원을 참조하십시오.

데이터베이스 전송 중 발생하는 사항

transport.import_from_server 함수는 대상 DB 인스턴스에서 전송 중 데이터베이스를 생성합니다. 전송 기간 동안에는 대상 DB 인스턴스에서 전송 중 데이터베이스에 액세스할 수 없습니다.

전송이 시작되면 소스 데이터베이스의 모든 현재 세션이 종료됩니다. 소스 DB 인스턴스의 소스 데이터베이스 이외의 모든 데이터베이스는 전송의 영향을 받지 않습니다.

소스 데이터베이스는 특수한 읽기 전용 모드로 설정됩니다. 이 모드에 있는 동안 소스 데이터베이스에 연결하고 읽기 전용 쿼리를 실행할 수 있습니다. 그러나 쓰기 가능 쿼리 및 일부 다른 유형의 명령은 차단됩니다. 전송되는 특정 소스 데이터베이스만 이러한 제한의 영향을 받습니다.

전송 중에는 대상 DB 인스턴스를 특정 시점으로 복원할 수 없습니다. 전송은 트랜잭션이 아니며 PostgreSQL 미리 쓰기 로그를 사용하여 변경 사항을 기록하지 않기 때문입니다. 대상 DB 인스턴스에 자동 백업이 활성화되어 있으면 전송이 완료된 후 백업이 자동으로 수행됩니다. 특정 시점으로 복원은 백업이 완료된 후 일정 시간 동안 사용할 수 있습니다.

전송이 실패하면 pg_transport 확장은 소스 및 대상 DB 인스턴스에 대한 모든 변경을 취소하려고 시도합니다. 여기에는 대상에 부분적으로 전송된 데이터베이스 제거가 포함됩니다. 실패 유형에 따라 소스 데이터베이스는 쓰기 가능 쿼리를 계속 거부할 수 있습니다. 이 경우 다음 명령을 사용하여 쓰기 가능 쿼리를 허용하십시오.

ALTER DATABASE my-database SET default_transaction_read_only = false;

transport.import_from_server 함수 참조

transport.import_from_server 함수는 PostgreSQL 데이터베이스를 소스 DB 인스턴스에서 대상 DB 인스턴스로 가져와서 전송합니다. 물리적 데이터베이스 연결 전송 메커니즘을 사용하여 이를 수행합니다.

구문

transport.import_from_server( host text, port int, username text, password text, database text, local_password text, dry_run bool )

반환 값

없음.

파라미터

다음 표에서 transport.import_from_server 함수 파라미터에 대한 설명을 확인할 수 있습니다.

파라미터 설명
host

소스 DB 인스턴스의 엔드포인트입니다.

port 소스 DB 인스턴스의 포트를 나타내는 정수입니다.

PostgreSQL DB 인스턴스는 종종 포트 5432를 사용합니다.

username

소스 DB 인스턴스의 사용자입니다. 이 사용자는 rds_superuser 역할의 멤버여야 합니다.

password

소스 DB 인스턴스의 사용자 암호입니다.

database

전송할 소스 DB 인스턴스의 데이터베이스 이름입니다.

local_password

대상 DB 인스턴스에 대한 현재 사용자의 로컬 암호입니다. 이 사용자는 rds_superuser 역할의 멤버여야 합니다.

dry_run

모의 실습 수행 여부를 지정하는 선택적 부울 값입니다. 기본값은 false이며 이는 전송이 진행됨을 의미합니다.

실제 전송을 수행하지 않고 소스와 대상 DB 인스턴스 간의 호환성을 확인하려면 dry_runtrue로 설정하십시오.

문제 해결 예는 transport.import_from_server 함수를 사용하여 PostgreSQL 데이터베이스 전송 단원을 참조하십시오.

pg_transport 확장에 대한 구성 파라미터

다음 파라미터를 사용하여 pg_transport 확장 동작을 구성합니다.

SET pg_transport.num_workers = integer; SET pg_transport.work_mem = kilobytes; SET pg_transport.timing = Boolean;

다음 표에서 이러한 파라미터에 대한 설명을 확인할 수 있습니다.

파라미터 설명
pg_transport.num_workers

실제 운송에 사용할 작업자 수입니다. 기본값은 3입니다. 유효한 값은 1 – 32입니다. 대용량 전송에서도 일반적으로 8명 미만 작업자의 최대 처리량에 도달합니다.

전송 중에 대상 DB 인스턴스의 pg_transport.num_workers 설정은 대상 및 소스 DB 인스턴스 모두에서 사용됩니다.

관련 파라미터는 PostgreSQL max_worker_processes 파라미터입니다. 전송 프로세스는 여러 백그라운드 작업자 프로세스를 생성합니다. 따라서 pg_transport.num_workers 파라미터를 설정하면 소스 및 대상 DB 인스턴스에서 max_worker_processes 파라미터를 매우 높게 설정해야 할 수 있습니다.

소스 및 대상 DB 인스턴스 모두에서 max_worker_processespg_transport.num_workers 파라미터에 대한 대상 DB 인스턴스 설정의 3배 이상으로 설정하는 것이 좋습니다. 비 전송 백그라운드 작업자 프로세스를 제공하기 위해 몇 가지를 더 추가하십시오.

max_worker_processes 파라미터에 대한 자세한 내용은 PostgreSQL 설명서에서 Asynchronous Behavior를 참조하십시오.

pg_transport.timing

전송 중 타이밍 정보를 보고할지 여부를 지정하는 부울 값입니다. 기본값은 true입니다. 타이밍 정보를 보고하려면 값을 true로 설정하고 타이밍 정보 보고를 비활성화하려면 false로 설정합니다.

이 파라미터는 false로 설정하지 않는 것이 좋습니다. pg_transport.timing을 비활성화하면 전송 진행률을 추적하는 기능이 크게 저하됩니다.

pg_transport.work_mem

각 작업자에게 할당할 최대 메모리 양입니다. 기본값은 131,072킬로바이트(KB)입니다. 최소값은 64MB(65,536KB)입니다. 유효한 값은 이진 base-2 단위로 나타낸 킬로바이트(KB)입니다(1KB = 1,024바이트).

전송 시 이 파라미터에 지정된 것보다 적은 메모리를 사용할 수 있습니다. 대용량 전송에서도 일반적으로 작업자당 256MB(262,144KB) 미만의 메모리로 최대 처리량에 도달합니다.