

 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/)을 참조하세요.

# AWS Glue Data Catalog 뷰
<a name="data-catalog-views-overview"></a>

이 주제에서는 AWS Glue Data Catalog에서 뷰를 만드는 방법을 설명합니다. 데이터 카탈로그의 뷰를 사용하여 동일한 스키마로 다양한 데이터 소스의 데이터에 액세스할 수 있습니다.

데이터 카탈로그에서 뷰를 생성하면 Amazon Athena 및 Amazon EMR Spark와 같은 엔진 전반에서 사용할 단일 공통 뷰 스키마와 메타데이터 객체를 만들 수 있습니다. 이렇게 하면 데이터 레이크와 데이터 웨어하우스 전반에서 사용 사례에 맞게 동일한 뷰를 사용할 수 있습니다. 데이터 카탈로그의 뷰는 정의자 뷰로 범주화된다는 점에서 특별합니다. 즉, 뷰를 쿼리하는 사용자가 아니라 뷰를 생성한 사용자가 액세스 권한을 정의합니다. 다음은 데이터 카탈로그에서 뷰를 만들 때의 사용 사례와 이점입니다.
+ 사용자에게 필요한 권한에 따라 데이터 액세스를 제한하는 뷰를 만듭니다. 예를 들어 데이터 카탈로그의 뷰를 사용하여 인사 관리(HR) 부서 소속이 아닌 직원은 개인 식별 정보(PII)를 보지 못하게 할 수 있습니다.
+ 사용자가 불완전한 레코드에 액세스할 수 없게 합니다. 데이터 카탈로그의 뷰에 특정 필터를 적용하여 데이터 카탈로그의 뷰에 있는 데이터 레코드가 항상 완전한지 확인할 수 있습니다.
+ 데이터 카탈로그 뷰에는 뷰를 만드는 데 사용된 쿼리 정의가 완료되어야 뷰를 만들 수 있다는 보안상의 이점이 있습니다. 이러한 보안상의 이점은 데이터 카탈로그의 뷰가 악의적인 사용자의 SQL 명령에 영향을 받지 않는다는 것을 의미합니다.
+ 데이터 카탈로그의 뷰는 일반 뷰와 동일한 이점을 지원합니다. 예를 들어 사용자에게 기본 테이블에 대한 사용 권한을 제공하지 않고도 뷰 액세스는 허용할 수 있습니다.

데이터 카탈로그에서 뷰를 만들려면 [Spectrum 외부 테이블](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-external-tables.html), [Lake Formation에서 관리하는 데이터 공유](https://docs.aws.amazon.com/redshift/latest/dg/what_is_datashare.html#lf_datashare_overview) 또는 [Apache Iceberg 테이블](https://docs.aws.amazon.com/redshift/latest/dg/what_is_datashare.html#lf_datashare_overview)이 있어야 합니다.

데이터 카탈로그 뷰의 정의는 AWS Glue Data Catalog에 저장됩니다. AWS Lake Formation을 사용하여 리소스 부여, 열 부여 또는 태그 기반 액세스 제어를 통해 액세스 권한을 부여할 수 있습니다. Lake Formation에서 액세스 권한 부여 및 취소에 대한 자세한 내용은 [데이터 카탈로그 리소스에 대한 권한 부여 및 취소](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html)를 참조하세요.

Amazon Redshift를 사용하여 이러한 AWS Glue Data Catalog 뷰를 참조하는 쿼리를 실행하는 경우, Amazon Redshift는 해당 쿼리에 대한 메타데이터를 로깅할 때 특정 시스템 테이블 및 뷰 열의 필드를 자동으로 마스킹합니다. 자세한 내용은 *Amazon Redshift 관리 안내서*의 [보안 로깅](https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing-secure-logging.html)을 참조하세요.

## 사전 조건
<a name="data-catalog-views-prerequisites"></a>

데이터 카탈로그에서 뷰를 생성하기 전에 다음 사전 조건을 충족해야 합니다.
+ IAM 역할에 다음과 같은 신뢰 정책이 있어야 합니다.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                 "Service": [
                      "glue.amazonaws.com",
                      "lakeformation.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------
+ 또한 다음 역할 전달 정책이 필요합니다.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1",
              "Action": [
                  "iam:PassRole"
              ],
              "Effect": "Allow",
              "Resource": "*",
              "Condition": {
                  "StringEquals": {
                      "iam:PassedToService": [ 
                          "glue.amazonaws.com",
                          "lakeformation.amazonaws.com"
                      ]
                  }
              }
          }
      ]
  }
  ```

------
+ 마지막으로, 다음 권한이 필요합니다.
  + `Glue:GetDatabase`
  + `Glue:GetDatabases`
  + `Glue:CreateTable`
  + `Glue:GetTable`
  + `Glue:UpdateTable`
  + `Glue:DeleteTable`
  + `Glue:GetTables`
  + `Glue:SearchTables`
  + `Glue:BatchGetPartition`
  + `Glue:GetPartitions`
  + `Glue:GetPartition`
  + `Glue:GetTableVersion`
  + `Glue:GetTableVersions`

## 종합 예제
<a name="data-catalog-views-example"></a>

먼저 데이터 카탈로그 데이터베이스를 기반으로 외부 스키마를 만드세요.

```
CREATE EXTERNAL SCHEMA IF NOT EXISTS external_schema FROM DATA CATALOG DATABASE 'external_data_catalog_db' 
IAM_ROLE 'arn:aws:iam::123456789012:role/sample-role';
```

이제 데이터 카탈로그 뷰를 만들 수 있습니다.

```
CREATE EXTERNAL PROTECTED VIEW external_schema.remote_view 
AS SELECT * FROM external_schema.remote_table;
```

그런 다음 뷰 쿼리를 시작할 수 있습니다.

```
SELECT * FROM external_schema.remote_view;
```

데이터 카탈로그의 뷰와 관련된 SQL 명령에 대한 자세한 내용은 [CREATE EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_VIEW.html), [ALTER EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_EXTERNAL_VIEW.html), [DROP EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_EXTERNAL_VIEW.html)를 참조하세요.

## 고려 사항 및 제한
<a name="data-catalog-views-considerations"></a>

다음은 데이터 카탈로그에서 생성된 뷰에 적용되는 고려 사항과 제한 사항입니다.
+ AWS Glue Data Catalog 보기는 RA3 프로비저닝 클러스터 또는 Redshift Serverless 작업 그룹에서만 지원됩니다.
+ 다른 뷰를 기반으로 하는 데이터 카탈로그 뷰는 만들 수 없습니다.
+ 데이터 카탈로그 뷰에는 기본 테이블이 10개만 허용됩니다.
+ 뷰 정의자는 기본 테이블에 대한 모든 `SELECT GRANTABLE` 권한을 가지고 있어야 합니다.
+ 뷰에는 Lake Formation 객체와 내장 기능만 포함할 수 있습니다. 다음과 같은 객체는 뷰 안에 넣을 수 없습니다.
  + 시스템 테이블
  + 사용자 정의 함수(UDF)
  + Lake Formation 관리형 데이터 공유에 포함되지 않은 Redshift 테이블, 뷰, 구체화된 뷰, 지연 바인딩 뷰
+ 뷰에는 중첩된 Redshift Spectrum 테이블을 포함할 수 없습니다.
+ AWS Glue를 통한 뷰의 기본 객체 표현은 뷰와 동일한 AWS 계정 및 리전에 있어야 합니다.