분류 소개

이 항목에서는 분류의 작동 방식에 대한 정보를 제공합니다.

이 항목의 내용:

개요

분류는 개인 데이터에 대한 셀과 메타데이터를 분석하여 Snowflake에서 정의된 태그(즉, 시스템 태그)를 열에 연결하는 다단계 프로세스이며, 이제는 데이터 엔지니어가 이 데이터를 추적할 수 있습니다.

추적 정보와 관련 감사 프로세스를 기반으로, 데이터 엔지니어는 마스킹 정책으로 개인 데이터 또는 민감한 데이터가 포함된 열을 보호하거나 행 액세스 정책으로 이 열이 포함된 테이블을 보호할 수 있습니다.

분류 및 데이터 보호 단계의 전체적인 결과는 데이터 프라이버시 규정 준수를 촉진하는 것입니다.

프로세스

이 섹션에서는 분류 3단계 프로세스의 작동 방식을 설명합니다. 테이블에 새 행을 삽입하거나 테이블에 새 열을 추가한 후와 같이, 필요할 때마다 이 프로세스를 자주 반복할 수 있습니다.

분류는 분석, 검토, 적용의 3단계 프로세스로 단순화됩니다. 이러한 각 단계에는 서로 다른 작업이 있습니다.

분석

데이터 엔지니어는 Snowflake 계정에서 EXTRACT_SEMANTIC_CATEGORIES 함수를 호출합니다. 이 함수는 테이블의 열을 분석하고 가능한 카테고리와 관련 확률을 출력합니다. 확률 값은 열에 가능한 카테고리로 정의된 개인 데이터가 포함될 가능성을 나타냅니다. 자세한 내용은 이 항목의 분류 출력값 해석하기 섹션을 참조하십시오.

참고

여러 오브젝트에 대한 JOIN 작업이 필요한 뷰와 같은 복잡한 뷰 정의는 분석 프로세스를 느리게 할 수 있습니다. 복잡한 뷰를 분류하기 전에 사용 중인 웨어하우스를 고려하십시오. 자세한 내용은 이 항목의 비용 계산하기 섹션을 참조하십시오.

검토

검토 단계에서 데이터 엔지니어는 카테고리 결과를 검토하여 분석 단계 작업의 결과가 타당한지 확인합니다. 아무런 수정도 필요하지 않은 경우 데이터 엔지니어는 적용 단계로 진행할 수 있습니다.

수정이 필요한 경우 데이터 엔지니어는 적용 단계로 이동하기 전에 분석 단계의 출력값을 수정할 수 있습니다.

자세한 내용은 이 항목의 분류 출력값 해석하기 섹션을 참조하십시오.

적용

적용 단계에는 시스템 태그 할당이라는 한 가지 작업이 있습니다.

데이터 엔지니어는 열에 시스템 태그를 수동으로 설정하거나 ASSOCIATE_SEMANTIC_CATEGORY_TAGS 저장 프로시저를 호출할 수 있습니다.

시스템 태그를 할당한 후, 데이터 엔지니어는 시스템 태그를 추적 하고 마스킹 정책 또는 행 액세스 정책으로 개인 데이터나 민감한 데이터를 보호할 수 있습니다.

이 프로세스의 자세한 예는 Using Data Classification 섹션을 참조하십시오.

시스템 태그 및 카테고리

시스템 태그는 Snowflake가 생성 및 유지 관리하고 공유 SNOWFLAKE 데이터베이스 에서 제공하는 태그입니다. 두 가지 분류 시스템 태그가 있는데, 둘 다 SNOWFLAKE.CORE 스키마에 있습니다.

  • SNOWFLAKE.CORE.SEMANTIC_CATEGORY

  • SNOWFLAKE.CORE.PRIVACY_CATEGORY

데이터 엔지니어는 이러한 태그를 개인 데이터 또는 민감한 데이터가 포함된 열에 할당합니다.

문자열 값

Snowflake는 값이 문자열인 키-값 페어로 열에 시스템 태그의 할당을 저장합니다. Snowflake는 이러한 각 시스템 태그를 유지하므로 각 분류 시스템 태그에 허용되는 문자열 값을 정의합니다.

지원되는 분류 시스템 태그 문자열 값 목록을 보려면 Snowflake 계정에서 SYSTEM$GET_TAG_ALLOWED_VALUES 함수를 호출하십시오. 예:

select system$get_tag_allowed_values('snowflake.core.semantic_category');

select system$get_tag_allowed_values('snowflake.core.privacy_category');

태그 이름 SEMANTIC_CATEGORYPRIVACY_CATEGORY 는 열 샘플링 프로세스 중에 Snowflake가 열 데이터에 할당하는 분류 카테고리에 해당합니다(즉, 태그 이름과 카테고리 이름이 같은 단어를 사용함).

의미 체계 카테고리

의미 체계 카테고리는 개인 특성을 식별합니다.

분류가 지원하는 개인 특성 중 일부만 수록된 목록에 이름, 나이, 성별이 포함됩니다. 이 세 가지 특성은 열에 SEMANTIC_CATEGORY 태그를 할당할 때 가능한 문자열 값입니다.

개인정보 보호 카테고리

분석에서 열 데이터가 의미 체계 카테고리에 해당하는 것으로 확인되면 Snowflake는 해당 열을 개인정보 보호 카테고리로 더 세부적으로 분류합니다. 개인정보 보호 카테고리에는 식별자, 준 식별자 또는 민감이라는 세 가지 값이 있습니다. 이 세 값은 열에 PRIVACY_CATEGORY 분류 시스템 태그를 할당할 때 지정할 수 있는 문자열 값입니다.

  • 식별자: 이 특성은 개인을 고유하게 식별합니다. 예제 특성은 이름, 주민 등록 번호, 전화 번호를 포함합니다.

    식별자 특성은 직접 식별자 와 동의어입니다.

  • 준 식별자: 이러한 특성이 2개 이상 결합된 경우 개인을 고유하게 식별할 수 있습니다. 예제 특성에는 연령과 성별이 포함됩니다.

    준 식별자는 간접 식별자 와 동의어입니다.

  • 민감: 이러한 특성은 개인을 식별하기에 충분하지 않은 것으로 간주되지만, 개인정보 보호상의 이유로 개인이 공개하지 않는 정보입니다.

    현재, Snowflake가 민감한 것으로 평가하는 유일한 특성은 급여입니다.

다음 표에는 각 분류 카테고리와 시스템 태그 사이의 관계, 각 분류 시스템 태그에 허용되는 문자열 값, 각 시스템 태그에 대한 시스템 태그 문자열 값이 요약되어 있습니다.

PRIVACY_CATEGORY 태그 값

SEMANTIC_CATEGORY 태그 값

IDENTIFIER

  • EMAIL

  • IBAN

  • IMEI

  • IP_ADDRESS

  • VIN

  • NAME

  • PAYMENT_CARD

  • PHONE_NUMBER (US 번호만 해당)

  • URL

  • US_BANK_ACCOUNT

  • US_DRIVERS_LICENSE

  • US_PASSPORT

  • US_SSN

  • US_STREET_ADDRESS

QUASI_IDENTIFIER

  • AGE

  • GENDER

  • COUNTRY

  • DATE_OF_BIRTH

  • ETHNICITY

  • LATITUDE

  • LAT_LONG

  • LONGITUDE

  • MARITAL_STATUS

  • OCCUPATION

  • US_POSTAL_CODE

  • US_STATE_OR_TERRITORY

  • US_COUNTY

  • US_CITY

  • YEAR_OF_BIRTH

SENSITIVE

  • SALARY

참고

세 가지 개인정보 보호 카테고리 모두의 여러 의미 체계 태그 문자열 값은 《민감한 개인 데이터》, 《데이터의 특수 카테고리》 또는 법률과 규정에 따라 유사한 용어로 간주될 수 있으며, 추가적인 보호나 통제가 필요할 수 있습니다.

현재, 분류에서는 열 데이터를 민감한 데이터와 식별 정보로 모두 태그 지정하지는 않습니다. 다시 말해, 주어진 열에 시스템 태그를 설정할 때 SEMANTIC_CATEGORY 또는 PRIVACY_CATEGORY 태그 중 하나를 선택해야 합니다.

분류 출력값 해석하기

EXTRACT_SEMANTIC_CATEGORIES 함수는 다음을 포함하여 반정형 형식인 JSON 형식으로 VARIANT를 반환합니다.

  • 0.8보다 크거나 같은 가능한 의미 체계 및 개인정보 보호 카테고리는 extra_info 외부에 나열되며(EXTRACT_SEMANTIC_CATEGORIES 함수 참조) ASSOCIATE_SEMANTIC_CATEGORY_TAGS 저장 프로시저에 의해 적용되는 카테고리이기도 합니다.

  • 분류 프로세스가 올바른 의미 체계 카테고리를 도출했을 확률.

  • 확률이 0.80 임계값 미만이고 프로세스가 0.15 보다 큰 확률로 다른 가능한 의미 체계 카테고리를 식별한 경우 열에 태그를 지정할 수 있는 대체 의미 체계 카테고리의 목록. 하지만 이러한 값을 사용하려면 데이터 엔지니어가 수동으로 시스템 태그를 설정하거나 출력값을 수정해야 합니다.

확률 값은 데이터 엔지니어가 열에 개인 데이터 또는 민감한 데이터가 포함되어 있는지 여부에 대해 정보를 근거로 한 의사 결정을 내리는 데 도움이 될 수 있습니다. 확률이 높을수록 열에 포함되어 있을 가능성이 커집니다.

다음은 Using Data Classification 에 표시된 단일 테이블 분류하기 예를 단순하게 표시한 예입니다.

  1. 테이블을 만듭니다.

    CREATE TABLE hr_data (
        age INTEGER,
        email_address VARCHAR,
        fname VARCHAR,
        lname VARCHAR
        );
    
  2. 테이블에 데이터를 로드한 다음 EXTRACT_SEMANTIC_CATEGORIES 함수를 호출합니다.

    USE ROLE data_engineer;
    
    SELECT EXTRACT_SEMANTIC_CATEGORIES('hr_data');
    
  3. 출력을 평가합니다. 예:

    기본 출력:

    SELECT EXTRACT_SEMANTIC_CATEGORIES('hr_data');
    +---------------------------------------------+
    | EXTRACT_SEMANTIC_CATEGORIES('HR_DATA')      |
    |---------------------------------------------|
    | {                                           |
    |   "AGE": {                                  |
    |     "extra_info": {                         |
    |       "alternates": [],                     |
    |       "probability": "1.00"                 |
    |     },                                      |
    |     "privacy_category": "QUASI_IDENTIFIER", |
    |     "semantic_category": "AGE"              |
    |   },                                        |
    |   "EMAIL_ADDRESS": {                        |
    |     "extra_info": {                         |
    |       "alternates": [],                     |
    |       "probability": "1.00"                 |
    |     },                                      |
    |     "privacy_category": "IDENTIFIER",       |
    |     "semantic_category": "EMAIL"            |
    |   },                                        |
    |   "FNAME": {                                |
    |     "extra_info": {                         |
    |       "alternates": [],                     |
    |       "probability": "1.00"                 |
    |     },                                      |
    |     "privacy_category": "IDENTIFIER",       |
    |     "semantic_category": "NAME"             |
    |   },                                        |
    |   "LNAME": {                                |
    |     "extra_info": {                         |
    |       "alternates": [],                     |
    |       "probability": "0.97"                 |
    |     },                                      |
    |     "privacy_category": "IDENTIFIER",       |
    |     "semantic_category": "NAME"             |
    |   }                                         |
    | }                                           |
    +---------------------------------------------+
    

    가독성을 높이려면 FLATTEN 테이블 함수를 사용하십시오.

    SELECT
        f.key::varchar as column_name,
        f.value:"privacy_category"::varchar as privacy_category,  
        f.value:"semantic_category"::varchar as semantic_category,
        f.value:"extra_info":"probability"::number(10,2) as probability,
        f.value:"extra_info":"alternates"::variant as alternates
      FROM
      TABLE(FLATTEN(EXTRACT_SEMANTIC_CATEGORIES('hr_data')::VARIANT)) AS f;
    +---------------+------------------+-------------------+-------------+------------+
    | COLUMN_NAME   | PRIVACY_CATEGORY | SEMANTIC_CATEGORY | PROBABILITY | ALTERNATES |
    |---------------+------------------+-------------------+-------------+------------|
    | AGE           | QUASI_IDENTIFIER | AGE               |        1.00 | []         |
    | EMAIL_ADDRESS | IDENTIFIER       | EMAIL             |        1.00 | []         |
    | FNAME         | IDENTIFIER       | NAME              |        1.00 | []         |
    | LNAME         | IDENTIFIER       | NAME              |        0.97 | []         |
    +---------------+------------------+-------------------+-------------+------------+
    

    예를 들어 PROBABILITY 필드와 같은 일부 필드의 값은 데이터의 특성과 샘플 크기에 따라 다릅니다.

지원되는 오브젝트 및 열 데이터 타입

Snowflake는 외부 테이블, 구체화된 뷰, 보안 뷰를 포함하여 모든 유형의 테이블과 뷰에 저장된 데이터를 분류하는 기능을 지원합니다.

다음 데이터 타입에 대한 경우를 제외하고 지원되는 모든 데이터 타입 에 대해 테이블을 분류하고 열을 볼 수 있습니다.

  • GEOGRAPHY

  • BINARY

  • VARIANT

    열 데이터 타입을 NUMBER 또는 STRING 데이터 타입으로 캐스팅 할 수 있을 때 VARIANT 데이터 타입으로 열을 분류할 수 있습니다. 열에 JSON, XML 또는 기타 반정형 데이터가 포함된 경우 Snowflake는 열을 분류하지 않습니다.

테이블에 지원되는 데이터 타입이 아닌 열이 있거나 열에 모든 NULL 값이 있는 경우, 분류 프로세스에서는 열을 무시하고 출력에 열을 포함하지 않습니다.

중요

데이터가 NULL이 아닌 값으로 NULL 값을 나타내는 경우, 분류 결과의 정확도에 영향을 미칠 수 있습니다.

비용 계산하기

분류 프로세스에서는 분류 수행 시 사용 및 실행 중인 가상 웨어하우스 에서 제공하는 컴퓨팅 리소스가 필요합니다.

테이블/뷰의 데이터를 분류하는 데 필요한 시간과 이에 따라 웨어하우스에서 소비한 크레딧의 수는 분류할 데이터양의 함수입니다.

특히, 테이블/뷰에 분류를 지원하는 열의 개수가 많은 경우에는 처리 시간에 영향을 미칠 수 있습니다. 하지만 일반적으로 처리 속도는 웨어하우스 크기에 따라 선형적으로 변화합니다. 다시 말해, 웨어하우스의 크기가 증가할 때마다(예: X-small에서 Small로) 일반적으로 처리 시간이 절반으로 감소합니다.

다음 일반 지침을 사용하여 웨어하우스 크기 를 선택합니다.

  • 처리 시간에 대한 걱정 없음: X-Small 웨어하우스.

  • 테이블에 최대 100개의 열: Small 웨어하우스.

  • 테이블에 101~300개의 열: Medium 웨어하우스.

  • 테이블에 301개 이상의 열: Large 웨어하우스.

이점

분류는 데이터 프라이버시 및 데이터 거버넌스 관리자에게 다음과 같은 이점을 제공합니다.

데이터 액세스

ID 및 액세스 관리 책임이 있는 관리자는 열 데이터를 분류한 결과를 통해 Snowflake 역할 계층 구조 를 평가하고 유지 관리하여 Snowflake 역할이 민감한 데이터 또는 PII 데이터에 대한 적절한 액세스 권한을 갖도록 해야 한다는 점을 알 수 있습니다.

데이터 공유

분류 프로세스는 PII 데이터의 저장 위치를 식별하고 확인하는 데 도움이 될 수 있습니다. 그 뒤에, 데이터 공유 공급자는 분류 결과를 사용하여 데이터 공유 여부와 PII 데이터를 데이터 공유 컨슈머에게 제공하는 방법을 결정할 수 있습니다.

정책 적용

뷰 또는 구체화된 뷰를 만들기 위해 기본 테이블의 열을 참조하는 것과 같이, PII 데이터가 포함된 열을 사용하면 마스킹 정책 또는 행 액세스 정책으로 데이터를 보호하는 최상의 접근 방식을 결정하는 데 도움이 될 수 있습니다.

권장 사항

분류 기능을 활용하고 PII 데이터 추적 기능을 최적화하려면 다음을 수행하십시오.

유효성 검사

Account Usage 뷰를 먼저 쿼리합니다.

  • ACCESS_HISTORY: 가장 자주 액세스하는 테이블과 뷰 오브젝트를 확인합니다.

  • OBJECT_DEPENDENCIES: 둘 이상의 오브젝트 간 메타데이터 참조를 확인합니다.

쿼리 결과를 사용하여 분류 시스템 태그의 스키마 수준 또는 데이터베이스 수준 할당 우선순위를 지정합니다.

열 이름

테이블 오브젝트에 적합한 열 이름을 사용하고 내부 테이블 생성 가이드라인을 준수하도록 테이블 생성자를 교육합니다.

데이터 타입

열에 적합한 데이터 타입을 사용하십시오. 예를 들어 AGE 열에는 NUMBER 데이터 타입이 있어야 합니다.

VARIANT

열에 VARIANT 데이터 타입이 있는 경우 테이블을 분류하기 전에 열에 대해 FLATTEN 명령을 사용하십시오.

확인

EXTRACT_SEMANTIC_CATEGORIES 함수 호출 결과를 임시 테이블에 저장하고 분류 시스템 태그를 할당하기 전에 결과를 다시 확인하십시오.

시스템 태그를 할당한 후 TAG_REFERENCESCOLUMNS Account Usage 뷰를 쿼리하여 분류되지 않은 열을 검사합니다.

예를 들어 GOVERNANCE_VIEWER 데이터베이스 역할을 data_engineer 사용자 지정 역할에 부여하고 다음 문을 실행합니다.

use role accountadmin;

grant database role governance_viewer to role data_engineer;

use role data_engineer;

select table_name,
       table_catalog
from snowflake.account_usage.columns c
  where not exists(
    select * from snowflake.account_usage.tag_references t
    where c.column_id = t.column_id
  )
  and deleted is null
order by table_catalog;

쿼리 결과를 사용하여 이중 확인에 가장 중요한 테이블 카탈로그(즉, 데이터베이스)를 확인하고 테이블 분류 우선순위를 지정합니다.

레코드

EXTRACT_SEMANTIC_CATEGORIES 함수 호출 결과와 분류 시스템 태그 할당 결과의 과거 기록을 생성합니다.

웨어하우스

데이터를 분류할 때 적절한 웨어하우스 크기를 사용하십시오. 자세한 내용은 이 항목의 비용 계산하기 섹션을 참조하십시오.

분류 관리하기

권한 참조

아래 표에는 분류를 위한 분석 및 검토 단계 에 필요한 최소 권한이 요약되어 있습니다.

권한

오브젝트

참고

USAGE

데이터베이스 및 스키마

이 권한은 분류할 열이 포함된 테이블의 상위 데이터베이스와 스키마에 필요합니다.

SELECT , UPDATE

테이블

SELECT 권한을 사용해 열 데이터를 분류하고 EXTRACT_SEMANTIC_CATEGORIES 함수를 호출하는 데 필요한 테이블을 쿼리할 수 있습니다.

UPDATE 권한을 사용하면 ASSOCIATE_SEMANTIC_CATEGORY_TAGS 저장 프로시저를 호출하여 분류 결과를 테이블의 열에 자동으로 적용할 수 있습니다.

분류에서 적용 단계, 특히 시스템 태그 설정 에 필요한 권한은 선택한 접근 방식에 따라 다릅니다. 현재, 세 가지 옵션이 있습니다.

  • GOVERNANCE_ADMIN 데이터베이스 역할을 사용합니다.

  • 사용자 지정 역할에 IMPORTED PRIVILEGES를 부여합니다.

  • ACCOUNTADMIN 역할을 사용합니다.

데이터베이스 역할

데이터베이스 역할 접근 방식에서는 GOVERNANCE_ADMIN 데이터베이스 역할 을 사용하여 테이블 열에 분류 시스템 태그를 설정합니다. 또한 데이터 엔지니어는 자신이 소유하지 않은 오브젝트에 태그를 설정하는 전역 APPLY TAG 권한이 있습니다.

이를 위해 다음을 수행하십시오.

  1. 선택한 사용자 지정 역할(예: data_engineer)에 GOVERNANCE_ADMIN 데이터베이스 역할을 부여합니다.

    use role accountadmin;
    grant database role snowflake.governance_admin to role data_engineer;
    grant apply tag on account to role data_engineer;
    
  2. 테이블 열에 시스템 태그를 할당합니다. 예를 들어, hr.tables.empl_info 라는 테이블(즉, 인사 데이터베이스의 직원 정보 테이블)의 EMAIL 열에 할당합니다.

    use role data_engineer;
    
    alter table hr.tables.empl_info
      modify column email
      set tag snowflake.core.semantic_category = 'email';
    

데이터베이스 역할 접근 방식을 사용하면 최소 권한의 보안 주체에 대한 요구 사항을 충족하는 데 도움이 될 수 있습니다.

사용자 지정 역할

사용자 지정 역할(즉, 사용자가 만드는 계정 수준 역할) 접근 방식에서는 선택한 역할에 두 가지 권한을 부여해야 합니다. 예:

use role accountadmin;
grant imported privileges on database snowflake to role data_engineer;
grant apply tag on account to role data_engineer;

이러한 두 권한 부여 문의 결과를 통해 공유 SNOWFLAKE 데이터베이스에 액세스하고 계정의 모든 테이블 열에 분류 시스템 태그를 적용할 수 있습니다. 그러면 data_engineer 역할을 가진 사용자가 데이터베이스 역할 접근 방식에 표시된 것처럼 테이블에 분류 시스템 태그를 설정할 수 있습니다.

하지만 이 접근 방식의 두 권한 부여 문으로 다음을 수행할 수도 있습니다.

  • 공유 SNOWFLAKE 데이터베이스의 모든 뷰를 쿼리할 수 있는 모든 권한을 가질 수 있습니다.

  • 계정에서 태그를 지정할 수 있는 오브젝트에 태그를 설정할 수 있습니다.

사용자 지정 역할 접근 방식이 최소 권한 원칙의 요구 사항에 부합하지 않을 경우 데이터베이스 역할 접근 방식을 사용하십시오.

ACCOUNTADMIN

ACCOUNTADMIN 역할을 사용하는 데 추가 권한 부여 문이 필요하지는 않지만, ACCOUNTADMIN 역할은 Snowflake에서 가장 큰 권한이 있는 역할입니다.

프로덕션 환경에서 ACCOUNTADMIN 역할의 사용을 제한하는 제한 사항이 있는 경우 데이터베이스 역할 접근 방식 또는 사용자 지정 역할 접근 방식을 사용하십시오.

열 데이터 보호와 관련하여 마스킹 정책 또는 행 액세스 정책을 할당하는 권한을 data_engineer 역할에 부여하거나 다른 역할이 정책을 할당할 책임을 맡을 수 있습니다. 선택할 접근 방식은 관리자가 권한을 부여하고 역할을 관리하는 기본적인 방법에 따라 다릅니다.

대표적인 예는 Using Data Classification 섹션을 참조하십시오.

분류 시스템 태그 추적하기

Snowflake는 분류 시스템 태그 사용을 추적하기 위한 기본 제공 뷰와 함수를 제공합니다.

  • 계정에서 시스템 태그가 있는 열을 찾으려면 Account Usage TAG_REFERENCES 뷰를 쿼리하십시오.

    SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.TAG_REFERENCES
        WHERE TAG_NAME = 'PRIVACY_CATEGORY'
        ORDER BY OBJECT_DATABASE, OBJECT_SCHEMA, OBJECT_NAME, COLUMN_NAME;
    
  • 특정 데이터베이스의 테이블 또는 뷰에 대한 시스템 태그가 있는 열을 찾으려면 TAG_REFERENCES Information Schema 테이블 함수를 호출하십시오.

    SELECT * FROM
      TABLE(
        my_db.information_schema.tag_references(
          'my_db.my_schema.hr_data.fname',
          'COLUMN'
        )
      )
    ;
    
  • 특정 데이터베이스 내의 테이블 또는 뷰에서 모든 열에 설정된 모든 태그를 찾으려면 Information Schema TAG_REFERENCES_ALL_COLUMNS 테이블 함수를 호출하십시오.

    select * from
      table(
        my_db.information_schema.tag_references_all_columns(
          'my_db.my_schema.hr_data',
          'table'
        )
      )
    ;
    
  • 열의 특정 태그 값을 찾으려면 SYSTEM$GET_TAG 시스템 함수를 호출하십시오.

    select system$get_tag(
      'snowflake.core.privacy_category',
      'hr_data.fname',
      'COLUMN'
      )
    ;
    

다음 항목: