

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# Amazon Redshift에서 새 데이터 공유에 대한 소비자 작업
<a name="writes-consumer-new"></a>

Amazon Redshift를 사용하면 다른 AWS 계정의 데이터 공유를 사용하여 계정 간 데이터 공유 및 협업을 사용할 수 있습니다. 데이터 공유는 다른 AWS 계정에 있더라도 Amazon Redshift 클러스터 간에 실시간 데이터를 공유하는 안전한 방법입니다. 다음 섹션에서는 액세스를 구성하고, 데이터 공유에서 데이터베이스를 만들고, 객체 수준 권한을 부여하고, 공유 데이터를 쿼리하는 자세한 단계를 제공합니다.

**Topics**
+ [Amazon Redshift에서 다른 AWS 계정의 데이터 공유 연결](writes-associating.md)
+ [Amazon Redshift의 데이터 공유에서 데이터베이스 만들기](writes-creating-database.md)
+ [Amazon Redshift에서 소비자 사용자 및 역할에 객체 수준 권한 부여](writes-granting.md)
+ [Amazon Redshift의 데이터 공유에서 데이터 쿼리](writes-querying.md)

# Amazon Redshift에서 다른 AWS 계정의 데이터 공유 연결
<a name="writes-associating"></a>

Amazon Redshift를 사용하면 다른 AWS 계정에서 공유한 데이터 공유를 연결할 수 있으므로 조직 경계 전반에서 원활하고 안전한 데이터 공유가 가능합니다. 데이터 공유는 하나 이상의 Amazon Redshift 데이터베이스에서 데이터를 캡슐화하는 공유 가능한 데이터베이스 객체입니다. 다음 섹션에서는 데이터 공유를 연결하는 프로세스를 보여줍니다.

------
#### [ Console ]

소비자 관리자는 다른 계정에서 공유되는 하나 이상의 데이터 공유를 전체 AWS 계정 또는 계정의 특정 네임스페이스에 연결할 수 있습니다.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **Datashares**를 선택합니다. datashare 목록 페이지가 나타납니다. **다른 계정에서(From other accounts)**를 선택합니다.

1. **다른 계정의 datashare(Datashares from other accounts)** 섹션에서 연결할 datashare를 선택하고 **연결(Associate)**을 선택합니다. 데이터 공유 **연결** 페이지가 나타나면 다음 연결 유형 중 하나를 선택합니다.
   + **전체 AWS 계정**을 선택하여 AWS 계정의 여러 AWS 리전에 있는 기존 및 미래 클러스터 네임스페이스를 모두 데이터 공유와 연결합니다.
   + 데이터 공유가 AWS Glue Data Catalog 데이터 카탈로그에 게시된 경우 데이터 공유를 전체 AWS 계정에만 연결할 수 있습니다.

1. 여기에서 **허용된 권한**을 선택할 수 있습니다. 선택할 수 있는 항목은 다음과 같습니다.
   + **읽기 전용** - 읽기 전용을 선택하면 생산자 측에서 UPDATE 또는 INSERT와 같은 쓰기 권한을 부여했더라도 소비자가 해당 권한을 사용할 수 없습니다.
   + **읽기 및 쓰기** - 소비자 데이터 공유 사용자는 생산자가 부여하고 승인한 모든 읽기 및 쓰기 권한을 갖게 됩니다.

1. **특정 AWS 리전 및 클러스터 네임스페이스**를 선택하여 하나 이상의 AWS 리전 및 특정 네임스페이스를 데이터 공유와 연결합니다. **리전 추가**를 선택하여 데이터 공유에 특정 AWS 리전 및 네임스페이스를 추가합니다. **AWS 리전 추가** 페이지가 나타납니다.

1.  **AWS Region**.리전을 선택합니다.

1. 다음 중 하나를 수행하세요.
   + **모든 네임스페이스 추가**를 선택하여 이 리전의 모든 기존 및 향후 네임스페이스를 데이터 공유에 추가합니다.
   + **특정 네임스페이스 추가**를 선택하여 데이터 공유에 이 리전의 특정 네임스페이스를 하나 이상 추가합니다.
   + 네임스페이스를 하나 이상 선택하고 **AWS 리전 추가**를 선택합니다.

1. **연결**을 선택합니다.

생산자가 돌아가서 권한 부여에 대한 설정을 변경할 수 있으며, 이는 소비자의 연결 설정에 영향을 미칠 수 있습니다.

 데이터 공유를 Lake Formation 계정과 연결하는 경우 Lake Formation 콘솔로 이동하여 데이터베이스를 만든 다음 데이터베이스에 대한 권한을 정의합니다. 자세한 내용은 AWS Lake Formation 개발자 안내서의 [Amazon Redshift 데이터 공유에 대한 권한 설정](https://docs.aws.amazon.com/lake-formation/latest/dg/setup-ds-perms.html)을 참조하세요. AWS Glue 데이터베이스 또는 페더레이션 데이터베이스를 생성하면 소비자 클러스터와 함께 쿼리 편집기 v2 또는 선호하는 SQL 클라이언트를 사용하여 데이터를 쿼리할 수 있습니다.

datashare가 연결되면 datashare를 사용할 수 있게 됩니다.

**참고**  
datashare 연결을 언제든지 변경할 수도 있습니다. 특정 AWS 리전 및 네임스페이스에서 전체 AWS 계정으로 연결을 변경할 때 Amazon Redshift는 특정 리전 및 네임스페이스 정보를 AWS 계정 정보로 덮어씁니다. 그러면 AWS 계정의 모든 AWS 리전 및 네임스페이스가 데이터 공유에 액세스할 수 있습니다.

------
#### [ API ]

**참고**  
이 섹션의 단계는 생산자 관리자가 공유 데이터베이스 객체에 대한 특정 작업을 허용하고, 데이터 공유를 다른 계정과 공유하는 경우 생산자 보안 관리자가 액세스를 권한을 부여한 후에 수행됩니다.

소비자 보안 관리자는 다음을 결정합니다.
+ 계정의 모든 네임스페이스인지, 계정 내 특정 리전의 네임스페이스인지 또는 특정 네임스페이스가 데이터 공유에 액세스할 수 있는지 여부
+ 네임스페이스가 데이터 공유에 액세스할 수 있는 경우 해당 네임스페이스에 쓰기 권한이 있는지 여부

소비자 보안 관리자는 데이터 공유를 다음 명령과 연결할 수 있습니다.

```
associate-data-share-consumer
--data-share-arn <value>
--consumer-identifier <value>
[--allow-writes | --no-allow-writes]
```

명령에 대한 자세한 내용은 [associate-data-share-consumer](https://docs.aws.amazon.com/cli/latest/reference/redshift/associate-data-share-consumer.html)를 참조하세요.

소비자 보안 관리자는 데이터 공유를 네임스페이스와 연결할 때 INSERT 및 UPDATE 명령을 사용할 수 있도록 `allow-writes`를 명시적으로 true로 설정해야 합니다. 이렇게 하지 않으면 사용자는 SELECT, USAGE 또는 EXECUTE 권한과 같은 읽기 작업만 수행할 수 있습니다.

다른 값으로 `associate-data-share-consumer`를 다시 호출하여 데이터 공유의 네임스페이스 연결을 변경할 수 있습니다. 새 연결이 이전 연결을 덮어쓰므로 처음에 `allow-writes`를 연결하고 설정했더라도 `no-allow-writes`를 연결하고 지정하거나 아니면 단순히 값을 지정하지 않는 경우 소비자의 쓰기 권한이 취소됩니다.

------

# Amazon Redshift의 데이터 공유에서 데이터베이스 만들기
<a name="writes-creating-database"></a>

Amazon Redshift를 사용하면 데이터 공유를 사용하여 데이터베이스를 만든 후 생산자 클러스터에서 데이터 공유 전반에 걸쳐 데이터를 쿼리하여 실시간 데이터를 복사하거나 전송하지 않고도 안전하게 액세스할 수 있습니다. 다음 단계에서는 Amazon Redshift 환경에서 데이터베이스 설정에 대한 세부 정보를 다룹니다.

------
#### [ Console ]

데이터 공유에서 데이터 쿼리를 시작하기 전에 데이터 공유에서 데이터베이스를 만들어야 합니다. 지정된 datashare에서 데이터베이스를 하나만 생성할 수 있습니다.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택한 다음 클러스터를 선택합니다. 클러스터 세부 정보 페이지가 나타납니다.

1. [**Datashare(Datashares)**]를 선택합니다. datashare 목록이 나타납니다.

1. [**다른 클러스터의 datashare(Datashares from other clusters)**] 섹션에서 [**데이터베이스에 연결(Connect to database)**]을 선택합니다. 자세한 내용은 [데이터베이스로 연결](connect-database-console.md) 섹션을 참조하세요.

1. 데이터베이스를 생성하려는 datashare를 선택하고 [**datashare에서 데이터베이스 생성(Create database from datashare)**]을 선택합니다. datashare에서 데이터베이스 생성 페이지가 나타납니다.

1. [**데이터베이스 이름(Database name)**]에서 데이터베이스 이름을 지정합니다. 데이터베이스 이름은 1\$164자의 영숫자(소문자만)여야 하며 예약어일 수 없습니다.

1. **생성(Create)**을 선택합니다.

데이터베이스를 만든 후 소비자 관리자가 권한을 부여, 승인 및 연결한 경우 데이터베이스의 데이터를 쿼리하거나 쓰기 작업을 수행할 수 있습니다.

------
#### [ API ]

소비자 관리자로서 읽기 목적으로 데이터를 공유하려면 다음 단계를 수행합니다.

1. 사용할 수 있는 datashare를 나열하고 datashare의 내용을 봅니다. 자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   다음 예에서는 지정된 생산자 네임스페이스의 인바운드 datashare 정보를 보여줍니다. 소비자 관리자로 DESC DATASHARE를 실행할 때 인바운드 데이터 공유를 보려면 NAMESPACE 옵션을 지정해야 합니다.

   ```
   DESC DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   
   
    producer_account  |          producer_namespace          | share_type | share_name | object_type |           object_name           |   include_new
   -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_users_redshift    |     
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_venue_redshift    |     
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_category_redshift |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_date_redshift     |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_event_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_listing_redshift  |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_sales_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | schema      | public                          |    
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | view        | public.sales_data_summary_view  |
   ```

   클러스터 슈퍼 사용자만 이 작업을 수행할 수 있습니다. SVV\$1DATASHARES를 사용하여 datashare를 보고 SVV\$1DATASHARE\$1OBJECTS를 사용하여 datashare 내의 객체를 볼 수도 있습니다.

   다음 예에서는 소비자 클러스터의 인바운드 datashare를 보여줍니다.

   ```
   SHOW DATASHARES LIKE 'sales%';
   
   
    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account |          producer_namespace
   ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------
    salesshare |             |                 |                   | INBOUND    |            |         t           |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
   ```

1. Datashare 슈퍼 사용자는 datashare를 참조하는 로컬 데이터베이스를 생성할 수 있습니다. 자세한 내용은 [데이터베이스 생성](r_CREATE_DATABASE.md) 섹션을 참조하세요.

   ```
   CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   로컬 데이터베이스의 객체에 대한 액세스를 보다 세밀하게 제어하려면 데이터베이스를 만들 때 WITH PERMISSIONS 절을 사용하세요. 이렇게 하면 4단계에서 데이터베이스의 객체에 객체 수준 권한을 부여할 수 있습니다.

   ```
   CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) 뷰를 쿼리하여 datashare에서 생성한 데이터베이스를 볼 수 있습니다. 그러나 소비자 클러스터의 로컬 데이터베이스에 연결하고 데이터베이스 간 쿼리를 수행하여 데이터 공유에서 만들어진 데이터베이스의 데이터를 쿼리할 수 있습니다.
**참고**  
기존 datashare에서 생성된 데이터베이스 객체 위에 datashare를 생성할 수 없습니다. 그러나 데이터를 소비자 클러스터의 별도 테이블에 복사하고 필요한 처리를 수행한 다음 생성된 새 객체를 공유할 수 있습니다.

   Amazon Redshift 콘솔을 사용하여 datashare에서 데이터베이스를 생성할 수도 있습니다. 자세한 내용은 [datashare에서 데이터베이스 생성](query-datashare-console.md#create-database-from-datashare-console) 섹션을 참조하세요.

------

# Amazon Redshift에서 소비자 사용자 및 역할에 객체 수준 권한 부여
<a name="writes-granting"></a>

소비자 관리자는 다음 단계를 완료하여 객체 수준에서 소비자 사용자 및 역할에 권한을 부여할 수 있습니다.

------
#### [ SQL ]

WITH PERMISSIONS를 사용하지 않고 데이터베이스를 생성한 경우 데이터 공유에서 생성된 전체 데이터베이스에 대한 권한만 사용자와 역할에 할당할 수 있습니다.

```
GRANT USAGE ON DATABASE sales_db TO Bob;
```

```
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
```

또한 공유 객체 위에 후기 바인딩 뷰를 생성하고 이를 사용하여 세분화된 권한을 할당할 수 있습니다. 생산자 클러스터가 필요한 세분성으로 추가 datashare를 생성하도록 할 수도 있습니다.

WITH PERMISSIONS을 사용하여 데이터베이스를 만든 경우 공유 데이터베이스의 객체에 객체 수준 권한을 할당해야 합니다. USAGE 권한만 있는 사용자는 추가 객체 수준 권한을 부여받을 때까지 WITH PERMISSION을 사용하여 만든 데이터베이스의 객체에 액세스할 수 없습니다.

```
GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
```

------

다중 웨어하우스 쓰기 권한 부여에 대한 자세한 내용은 [Amazon Redshift에서 데이터 공유에 대한 권한 관리](writes-managing-permissions.md) 섹션을 참조하세요.

# Amazon Redshift의 데이터 공유에서 데이터 쿼리
<a name="writes-querying"></a>

Amazon Redshift를 사용하면 생산자 클러스터에서 데이터 공유 전반에 걸쳐 데이터를 쿼리하여 실시간 데이터를 복사하거나 전송하지 않고도 안전하게 액세스할 수 있습니다. 다음 섹션에서는 Amazon Redshift 환경에서 데이터 공유 쿼리에 대한 세부 정보를 다룹니다.

소비자 데이터베이스 및 소비자 클러스터의 스키마에 대한 권한이 있는 사용자와 역할은 모든 공유 객체의 메타데이터를 탐색할 수 있습니다. 또한 소비자 클러스터에서 로컬 객체를 탐색할 수 있습니다. 이를 위해 JDBC 또는 ODBC 드라이버 또는 SVV\$1ALL 및 SVV\$1REDSHIFT 뷰를 사용합니다.

생산자 클러스터의 경우 각 스키마 내의 데이터베이스, 테이블 및 뷰에 많은 스키마가 있을 수 있습니다. 소비자 측의 사용자는 datashare를 통해 사용할 수 있는 객체의 하위 집합만 볼 수 있습니다. 이러한 사용자는 생산자 클러스터에서 전체 메타데이터를 볼 수 없습니다. 이 접근 방식은 datashare로 세분화된 메타데이터 보안 제어를 제공하는 데 도움이 됩니다.

로컬 클러스터 데이터베이스에 계속 연결합니다. 그러나 이제 세 부분으로 구성된 database.schema.table 표기법을 사용하여 datashare에서 생성된 데이터베이스와 스키마에서도 읽을 수도 있습니다. 사용자에게 표시되는 모든 데이터베이스에 걸쳐 쿼리를 수행할 수 있습니다. 이러한 데이터베이스는 클러스터의 로컬 데이터베이스이거나 datashare에서 생성된 데이터베이스일 수 있습니다. 소비자 클러스터는 datashare에서 생성된 데이터베이스에 연결할 수 없습니다.

전체 자격을 사용하여 데이터에 액세스할 수 있습니다. 자세한 내용은 [데이터베이스 간 쿼리 예제](cross-database_example.md) 섹션을 참조하세요.

------
#### [ SQL ]

```
SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5;

 salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime
---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------
       1 |      1 |    36861 |   21191 |    7872 |   1875 |       4 |    728.00 |     109.20 | 2008-02-18 02:36:48
       2 |      4 |     8117 |   11498 |    4337 |   1983 |       2 |     76.00 |      11.40 | 2008-06-06 05:00:16
       3 |      5 |     1616 |   17433 |    8647 |   1983 |       2 |    350.00 |      52.50 | 2008-06-06 08:26:17
       4 |      5 |     1616 |   19715 |    8647 |   1986 |       1 |    175.00 |      26.25 | 2008-06-09 08:38:52
       5 |      6 |    47402 |   14115 |    8240 |   2069 |       2 |    154.00 |      23.10 | 2008-08-31 09:17:02
```

공유 객체에는 SELECT 문만 사용할 수 있습니다. 그러나 다른 로컬 데이터베이스에 있는 공유 객체의 데이터를 쿼리하여 소비자 클러스터에 테이블을 생성할 수 있습니다.

------