10.5. 네임스페이스 버킷 관리
네임 스페이스 버킷을 사용하면 여러 공급자의 데이터 리포지토리를 함께 연결할 수 있으므로 단일 통합 뷰를 통해 모든 데이터와 상호 작용할 수 있습니다. 각 공급자와 연결된 오브젝트 버킷을 네임 스페이스 버킷에 추가하고 네임 스페이스 버킷을 통해 데이터에 액세스하여 모든 오브젝트 버킷을 한 번에 확인합니다. 이를 통해 원하는 스토리지 공급자에 쓰는 동시에 다른 여러 스토리지 공급자로부터 읽을 수 있어 새 스토리지 공급자로 마이그레이션하는 데 드는 비용을 크게 줄일 수 있습니다.
S3 API를 사용하여 네임스페이스 버킷의 오브젝트와 상호 작용할 수 있습니다. 자세한 내용은 네임스페이스 버킷의 오브젝트에 대한 S3 API 끝점 을 참조하십시오.
네임 스페이스 버킷은 쓰기 대상이 사용 가능하고 작동하는 경우에만 사용할 수 있습니다.
10.5.1. 네임스페이스 버킷의 오브젝트에 대한 Amazon S3 API 끝점
Amazon S3(Simple Storage Service) API를 사용하여 네임스페이스 버킷의 오브젝트와 상호 작용할 수 있습니다.
Red Hat OpenShift Data Foundation 4.6 이상에서는 다음과 같은 네임 스페이스 버킷 작업을 지원합니다.
이러한 작업 및 사용 방법에 대한 최신 정보는 Amazon S3 API 참조 문서를 참조하십시오.
10.5.2. Multicloud Object Gateway CLI 및 YAML을 사용하여 네임스페이스 버킷 추가
네임스페이스 버킷에 대한 자세한 내용은 네임스페이스 버킷 관리를 참조하십시오.
배포 유형 및 YAML 또는 Multicloud Object Gateway CLI를 사용할지 여부에 따라 다음 절차 중 하나를 선택하여 네임 스페이스 버킷을 추가합니다.
10.5.2.1. YAML을 사용하여 AWS S3 네임 스페이스 버킷 추가
사전 요구 사항
- 실행 중인 OpenShift Data Foundation Platform
- MCG(Multicloud Object Gateway)에 액세스하고 2장, 애플리케이션과 함께 Multicloud Object Gateway에 액세스.
절차
인증 정보를 사용하여 보안을 생성합니다.
apiVersion: v1 kind: Secret metadata: name: <namespacestore-secret-name> type: Opaque data: AWS_ACCESS_KEY_ID: <AWS ACCESS KEY ID ENCODED IN BASE64> AWS_SECRET_ACCESS_KEY: <AWS SECRET ACCESS KEY ENCODED IN BASE64>
-
Base64를 사용하여 자체 AWS 액세스 키 ID 및 시크릿 액세스 키를 제공하고 인코딩해야 하며
<AWS ACCESS KEY ID ENCODED in BASE64> 및
대신 결과를 사용해야 합니다.<
AWS SECRET ACCESS KEY ENCODED in BASE64> -
<namespacestore-secret-name>
을 고유한 이름으로 바꿉니다.
-
Base64를 사용하여 자체 AWS 액세스 키 ID 및 시크릿 액세스 키를 제공하고 인코딩해야 하며
OpenShift CRD(Custom Resource Definitions)를 사용하여 네임스페이스 저장소 리소스를 생성합니다. 네임 스페이스 저장소는 MCG 네임 스페이스 버킷의 데이터에 대한 읽기 또는 쓰기 대상으로 사용할 기본 스토리지를 나타냅니다. 네임스페이스 저장소 리소스를 생성하려면 다음 YAML을 적용합니다.
apiVersion: noobaa.io/v1alpha1 kind: NamespaceStore metadata: finalizers: - noobaa.io/finalizer labels: app: noobaa name: <resource-name> namespace: openshift-storage spec: awsS3: secret: name: <namespacestore-secret-name> namespace: <namespace-secret> targetBucket: <target-bucket> type: aws-s3
-
<resource-name>
을 리소스에 제공할 이름으로 바꿉니다. -
<namespacestore-secret-name>
을 1 단계에서 생성된 보안으로 교체합니다. -
<namespace-secret>
을 보안을 찾을 수 있는 네임스페이스로 바꿉니다. -
<target-bucket>
을 네임 스페이스 저장소에 대해 생성한 대상 버킷으로 바꿉니다.
-
네임스페이스 버킷에 대한 네임스페이스 정책을 정의하는 네임스페이스 버킷 클래스를 생성합니다. 네임스페이스 정책에는
단일
또는multi
의 유형이 필요합니다.type
single
의 네임스페이스 정책에는 다음과 같은 구성이 필요합니다.apiVersion: noobaa.io/v1alpha1 kind: BucketClass metadata: labels: app: noobaa name: <my-bucket-class> namespace: openshift-storage spec: namespacePolicy: type: single: resource: <resource>
-
<my-bucket-class>
를 고유한 네임 스페이스 버킷 클래스 이름으로 바꿉니다. -
<resource>
를 네임 스페이스 버킷의 읽기 및 쓰기 대상을 정의하는 단일 네임 스페이스 저장소의 이름으로 바꿉니다.
-
type
multi
의 네임스페이스 정책에는 다음과 같은 구성이 필요합니다.apiVersion: noobaa.io/v1alpha1 kind: BucketClass metadata: labels: app: noobaa name: <my-bucket-class> namespace: openshift-storage spec: namespacePolicy: type: Multi multi: writeResource: <write-resource> readResources: - <read-resources> - <read-resources>
-
<my-bucket-class>
를 고유한 버킷 클래스 이름으로 바꿉니다. -
<write-resource>
를 네임 스페이스 버킷의 쓰기 대상을 정의하는 단일 네임 스페이스 저장소의 이름으로 바꿉니다. -
<read-resources>
를 네임 스페이스 버킷의 읽기 대상을 정의하는 namespace-stores의 이름 목록으로 바꿉니다.
-
다음 YAML을 적용하여 2단계에 정의된 버킷 클래스를 사용하는 OBC(개체 버킷 클래스) 리소스를 사용하여 버킷을 생성합니다.
apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: <resource-name> namespace: openshift-storage spec: generateBucketName: <my-bucket> storageClassName: openshift-storage.noobaa.io additionalConfig: bucketclass: <my-bucket-class>
-
<resource-name>
을 리소스에 제공할 이름으로 바꿉니다. -
<my-bucket>
을 버킷에 제공할 이름으로 바꿉니다. -
<my-bucket-class>
를 이전 단계에서 생성한 버킷 클래스로 바꿉니다.
-
Operator가 OBC를 프로비저닝하면 MCG에서 버킷이 생성되고 Operator는 동일한 이름과 OBC의 동일한 네임스페이스에 있는 Secret 및 ConfigMap을 생성합니다.
10.5.2.2. YAML을 사용하여 IBM COS 네임 스페이스 버킷 추가
사전 요구 사항
- 실행 중인 OpenShift Data Foundation Platform.
- MCG(Multicloud Object Gateway)에 액세스하고 2장, 애플리케이션과 함께 Multicloud Object Gateway에 액세스.
절차
인증 정보를 사용하여 보안을 생성합니다.
apiVersion: v1 kind: Secret metadata: name: <namespacestore-secret-name> type: Opaque data: IBM_COS_ACCESS_KEY_ID: <IBM COS ACCESS KEY ID ENCODED IN BASE64> IBM_COS_SECRET_ACCESS_KEY: <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>
-
Base64를 사용하여 자체 IBM COS 액세스 키 ID 및 비밀 액세스 키를 제공하고 인코딩해야 하며
<IBM COS COS 키 ID ENCODED IN BASE64> 및
대신 결과를 사용해야 합니다.<
IBM COS SECRET ACCESS KEY ENCODED IN BASE64> -
<namespacestore-secret-name>
을 고유한 이름으로 바꿉니다.
-
Base64를 사용하여 자체 IBM COS 액세스 키 ID 및 비밀 액세스 키를 제공하고 인코딩해야 하며
OpenShift CRD(Custom Resource Definitions)를 사용하여 네임스페이스 저장소 리소스를 생성합니다. 네임 스페이스 저장소는 MCG 네임 스페이스 버킷의 데이터에 대한 읽기 또는 쓰기 대상으로 사용할 기본 스토리지를 나타냅니다. 네임스페이스 저장소 리소스를 생성하려면 다음 YAML을 적용합니다.
apiVersion: noobaa.io/v1alpha1 kind: NamespaceStore metadata: finalizers: - noobaa.io/finalizer labels: app: noobaa name: bs namespace: openshift-storage spec: s3Compatible: endpoint: <IBM COS ENDPOINT> secret: name: <namespacestore-secret-name> namespace: <namespace-secret> signatureVersion: v2 targetBucket: <target-bucket> type: ibm-cos
-
<IBM COS ENDPOINT>
를 적절한 IBM COS 엔드포인트로 바꿉니다. -
<namespacestore-secret-name>
을 1 단계에서 생성된 보안으로 교체합니다. -
<namespace-secret>
을 보안을 찾을 수 있는 네임스페이스로 바꿉니다. -
<target-bucket>
을 네임 스페이스 저장소에 대해 생성한 대상 버킷으로 바꿉니다.
-
네임스페이스 버킷에 대한 네임스페이스 정책을 정의하는 네임스페이스 버킷 클래스를 생성합니다. 네임스페이스 정책에는
단일
또는multi
의 유형이 필요합니다.type
single
의 네임스페이스 정책에는 다음과 같은 구성이 필요합니다.apiVersion: noobaa.io/v1alpha1 kind: BucketClass metadata: labels: app: noobaa name: <my-bucket-class> namespace: openshift-storage spec: namespacePolicy: type: single: resource: <resource>
-
<my-bucket-class>
를 고유한 네임 스페이스 버킷 클래스 이름으로 바꿉니다. -
<resource>
를 단일 네임 스페이스 저장소 이름으로 교체하여 네임 스페이스 버킷의 읽기 및 쓰기 대상을 정의합니다.
-
type
multi
의 네임스페이스 정책에는 다음과 같은 구성이 필요합니다.apiVersion: noobaa.io/v1alpha1 kind: BucketClass metadata: labels: app: noobaa name: <my-bucket-class> namespace: openshift-storage spec: namespacePolicy: type: Multi multi: writeResource: <write-resource> readResources: - <read-resources> - <read-resources>
-
<my-bucket-class>
를 고유한 버킷 클래스 이름으로 바꿉니다. -
<write-resource>
를 네임 스페이스 버킷의 쓰기 대상을 정의하는 단일 네임 스페이스 저장소의 이름으로 바꿉니다. -
<read-resources>
를 네임 스페이스 버킷의 읽기 대상을 정의하는 namespace-stores 이름 목록으로 바꿉니다.
-
다음 YAML을 적용하여 2단계에 정의된 버킷 클래스를 사용하는 OBC(개체 버킷 클래스) 리소스를 사용하여 버킷을 생성합니다.
apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: <resource-name> namespace: openshift-storage spec: generateBucketName: <my-bucket> storageClassName: openshift-storage.noobaa.io additionalConfig: bucketclass: <my-bucket-class>
-
<resource-name>
을 리소스에 제공할 이름으로 바꿉니다. -
<my-bucket>
을 버킷에 제공할 이름으로 바꿉니다. -
<my-bucket-class>
를 이전 단계에서 생성한 버킷 클래스로 바꿉니다.
-
Operator가 OBC를 프로비저닝하면 MCG에서 버킷이 생성되고 Operator는 동일한 이름과 OBC의 동일한 네임스페이스에 있는 Secret 및 ConfigMap을 생성합니다.
10.5.2.3. Multicloud Object Gateway CLI를 사용하여 AWS S3 네임 스페이스 버킷 추가
사전 요구 사항
- 실행 중인 OpenShift Data Foundation Platform.
- MCG(Multicloud Object Gateway)에 액세스하고 2장, 애플리케이션과 함께 Multicloud Object Gateway에 액세스.
- MCG 명령줄 인터페이스를 다운로드합니다.
# subscription-manager repos --enable=rh-odf-4-for-rhel-8-x86_64-rpms # yum install mcg
서브스크립션 관리자를 사용하여 리포지토리를 활성화하기 위한 적절한 아키텍처를 지정합니다. 예를 들어 IBM Z 인프라의 경우 다음 명령을 사용합니다.
# subscription-manager repos --enable=rh-odf-4-for-rhel-8-s390x-rpms
또는 https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/package 에 있는 OpenShift Data Foundation RPM에서 MCG 패키지를 설치할 수도 있습니다.
아키텍처에 따라 올바른 제품 변형을 선택합니다.
절차
네임스페이스 저장소 리소스를 생성합니다. 네임 스페이스 저장소는 MCG 네임 스페이스 버킷의 데이터에 대한 읽기 또는 쓰기 대상으로 사용할 기본 스토리지를 나타냅니다. MCG 명령줄 인터페이스에서 다음 명령을 실행합니다.
noobaa namespacestore create aws-s3 <namespacestore> --access-key <AWS ACCESS KEY> --secret-key <AWS SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
-
<namespacestore>
를 네임 스페이스 저장소의 이름으로 바꿉니다. -
<AWS ACCESS KEY>
및<AWS SECRET ACCESS KEY>
를 이 목적을 위해 생성한 AWS 액세스 키 ID 및 시크릿 액세스 키로 바꿉니다. -
<bucket-name>
을 기존 AWS 버킷 이름으로 바꿉니다. 이 인수는 MCG에 백업 저장소에 대상 버킷으로 사용할 버킷을 알려줍니다. 그런 다음 데이터 스토리지 및 관리에 사용됩니다.
-
네임스페이스 버킷에 대한 네임스페이스 정책을 정의하는 네임스페이스 버킷 클래스를 생성합니다. 네임스페이스 정책에는
단일
또는multi
의 유형이 필요합니다.다음 명령을 실행하여
단일
유형의 네임스페이스 정책으로 네임 스페이스 버킷 클래스를 생성합니다.noobaa bucketclass create namespace-bucketclass single <my-bucket-class> --resource <resource> -n openshift-storage
-
<resource-name>
을 리소스를 제공할 이름으로 바꿉니다. -
<my-bucket-class>
를 고유한 버킷 클래스 이름으로 바꿉니다. -
<resource>
를 네임 스페이스 버킷의 읽기 및 쓰기 대상을 정의하는 단일 네임 스페이스 저장소로 바꿉니다.
-
다음 명령을 실행하여 유형
multi
의 네임스페이스 정책으로 네임 스페이스 버킷 클래스를 생성합니다.noobaa bucketclass create namespace-bucketclass multi <my-bucket-class> --write-resource <write-resource> --read-resources <read-resources> -n openshift-storage
-
<resource-name>
을 리소스를 제공할 이름으로 바꿉니다. -
<my-bucket-class>
를 고유한 버킷 클래스 이름으로 바꿉니다. -
<write-resource>
를 네임 스페이스 버킷의 쓰기 대상을 정의하는 단일 네임 스페이스 저장소로 바꿉니다. -
<read-resources>
를 네임 스페이스 버킷의 읽기 대상을 정의하는 쉼표로 구분된 네임 스페이스 저장소 목록으로 바꿉니다.
-
다음 명령을 실행하여 2단계에 정의된 버킷 클래스를 사용하는 OBC(개체 버킷 클래스) 리소스를 사용하여 버킷을 생성합니다.
noobaa obc create my-bucket-claim -n openshift-storage --app-namespace my-app --bucketclass <custom-bucket-class>
-
<bucket-name>
을 선택한 버킷 이름으로 바꿉니다. -
<custom-bucket-class>
를 2단계에서 생성된 버킷 클래스의 이름으로 바꿉니다.
-
Operator가 OBC를 프로비저닝하면 MCG에서 버킷이 생성되고 Operator는 동일한 이름과 OBC의 동일한 네임스페이스에 있는 Secret 및 ConfigMap을 생성합니다.
10.5.2.4. Multicloud Object Gateway CLI를 사용하여 IBM COS 네임 스페이스 버킷 추가
사전 요구 사항
- 실행 중인 OpenShift Data Foundation Platform.
- MCG(Multicloud Object Gateway)에 액세스하고 2장, 애플리케이션과 함께 Multicloud Object Gateway에 액세스.
MCG 명령줄 인터페이스를 다운로드합니다.
# subscription-manager repos --enable=rh-odf-4-for-rhel-8-x86_64-rpms # yum install mcg
참고서브스크립션 관리자를 사용하여 리포지토리를 활성화하기 위한 적절한 아키텍처를 지정합니다.
- IBM Power의 경우 다음 명령을 사용합니다.
# subscription-manager repos --enable=rh-odf-4-for-rhel-8-ppc64le-rpms
- IBM Z 인프라의 경우 다음 명령을 사용합니다.
# subscription-manager repos --enable=rh-odf-4-for-rhel-8-s390x-rpms
또는 https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/package 에 있는 OpenShift Data Foundation RPM에서 MCG 패키지를 설치할 수도 있습니다.
참고아키텍처에 따라 올바른 제품 변형을 선택합니다.
절차
네임스페이스 저장소 리소스를 생성합니다. 네임 스페이스 저장소는 MCG 네임 스페이스 버킷의 데이터에 대한 읽기 또는 쓰기 대상으로 사용할 기본 스토리지를 나타냅니다. MCG 명령줄 인터페이스에서 다음 명령을 실행합니다.
noobaa namespacestore create ibm-cos <namespacestore> --endpoint <IBM COS ENDPOINT> --access-key <IBM ACCESS KEY> --secret-key <IBM SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
-
<namespacestore>
를 네임 스페이스 저장소의 이름으로 바꿉니다. -
<IBM ACCESS KEY>
,<IBM SECRET ACCESS KEY>
,<IBM COS ENDPOINT>
를 IBM 액세스 키 ID, 시크릿 액세스 키 및 기존 IBM 버킷 위치에 해당하는 해당 지역 엔드포인트로 바꿉니다. -
<bucket-name>
을 기존 IBM 버킷 이름으로 바꿉니다. 이 인수는 MCG에 백업 저장소에 대상 버킷으로 사용할 버킷을 알려줍니다. 그런 다음 데이터 스토리지 및 관리에 사용됩니다.
-
네임스페이스 버킷에 대한 네임스페이스 정책을 정의하는 네임스페이스 버킷 클래스를 생성합니다. 네임스페이스 정책에는
단일
또는multi
의 유형이 필요합니다.다음 명령을 실행하여
단일
유형의 네임스페이스 정책으로 네임 스페이스 버킷 클래스를 생성합니다.noobaa bucketclass create namespace-bucketclass single <my-bucket-class> --resource <resource> -n openshift-storage
-
<resource-name>
을 리소스를 제공할 이름으로 바꿉니다. -
<my-bucket-class>
를 고유한 버킷 클래스 이름으로 바꿉니다. -
<resource>
를 네임 스페이스 버킷의 읽기 및 쓰기 대상을 정의하는 단일 네임 스페이스 저장소로 바꿉니다.
-
다음 명령을 실행하여 유형
multi
의 네임스페이스 정책으로 네임 스페이스 버킷 클래스를 생성합니다.noobaa bucketclass create namespace-bucketclass multi <my-bucket-class> --write-resource <write-resource> --read-resources <read-resources> -n openshift-storage
-
<resource-name>
을 리소스를 제공할 이름으로 바꿉니다. -
<my-bucket-class>
를 고유한 버킷 클래스 이름으로 바꿉니다. -
<write-resource>
를 네임 스페이스 버킷의 쓰기 대상을 정의하는 단일 네임 스페이스 저장소로 바꿉니다. -
<read-resources>
를 네임 스페이스 버킷의 읽기 대상을 정의하는 쉼표로 구분된 네임 스페이스 저장소 목록으로 바꿉니다.
-
다음 명령을 실행하여 2단계에 정의된 버킷 클래스를 사용하는 OBC(개체 버킷 클래스) 리소스를 사용하여 버킷을 생성합니다.
noobaa obc create my-bucket-claim -n openshift-storage --app-namespace my-app --bucketclass <custom-bucket-class>
-
<bucket-name>
을 선택한 버킷 이름으로 바꿉니다. -
<custom-bucket-class>
를 2단계에서 생성된 버킷 클래스의 이름으로 바꿉니다.
-
Operator가 OBC를 프로비저닝하면 MCG에서 버킷이 생성되고 Operator는 동일한 이름과 OBC의 동일한 네임스페이스에 있는 Secret 및 ConfigMap을 생성합니다.
10.5.3. OpenShift Container Platform 사용자 인터페이스를 사용하여 네임스페이스 버킷 추가
OpenShift Data Foundation 4.8부터 OpenShift Container Platform 사용자 인터페이스를 사용하여 네임스페이스 버킷을 추가할 수 있습니다. 네임스페이스 버킷에 대한 자세한 내용은 네임스페이스 버킷 관리를 참조하십시오.
사전 요구 사항
- OpenShift Data Foundation 운영자가 설치된 OpenShift Container Platform
- MCG(Multicloud Object Gateway)에 액세스합니다.
절차
- OpenShift 웹 콘솔에 로그인합니다.
-
스토리지
Data Foundation을 클릭합니다. Namespace Store (네임스페이스
저장소) 탭을 클릭하여 네임스페이스 버킷에서 사용할 네임스페이스 저장소
리소스를 생성합니다.- Create namespace store (네임스페이스 저장소 만들기)를 클릭합니다.
- 네임스페이스 저장소 이름을 입력합니다.
- 공급업체 선택.
- 지역 선택.
- 기존 시크릿을 선택하거나 Switch to credentials 를 클릭하여 보안 키 및 시크릿 액세스 키를 입력하여 시크릿을 생성합니다.
- 대상 버킷을 선택합니다.
- 생성을 클릭합니다.
- 네임스페이스 저장소가 Ready 상태인지 확인합니다.
- 원하는 리소스 양이 될 때까지 다음 단계를 반복합니다.
버킷 클래스 탭
새 버킷 클래스를 생성합니다. - 네임스페이스 라디오 버튼을 선택합니다.
- 버킷 클래스 이름을 입력합니다.
- 설명 추가(선택 사항).
- 다음을 클릭합니다.
- 네임 스페이스 버킷에 대한 네임스페이스 정책 유형을 선택한 다음 Next (다음)를 클릭합니다.
대상 리소스를 선택합니다.
- 네임스페이스 정책 유형이 Single 인 경우 읽기 리소스를 선택해야 합니다.
- 네임스페이스 정책 유형이 Multi 인 경우 읽기 리소스와 쓰기 리소스를 선택해야 합니다.
- 네임스페이스 정책 유형이 Cache 인 경우 네임 스페이스 버킷의 읽기 및 쓰기 대상을 정의하는 Hub 네임 스페이스 저장소를 선택해야 합니다.
- 다음을 클릭합니다.
- 새 버킷 클래스를 검토한 다음 Create Bucketclass(Bucketclass 만들기 )를 클릭합니다.
- BucketClass 페이지에서 새로 생성된 리소스가 Created 단계에 있는지 확인합니다.
-
OpenShift 웹 콘솔에서 스토리지
데이터 기반 을 클릭합니다. - 상태 카드에서 Storage System (스토리지 시스템)을 클릭하고 표시되는 팝업에서 스토리지 시스템 링크를 클릭합니다.
-
Object 탭에서 Multicloud Object Gateway
버킷 네임 스페이스 버킷 탭을 클릭합니다. 네임스페이스 버킷 생성을 클릭합니다.
- Choose Name (이름 선택) 탭에서 네임스페이스 버킷 의 이름을 지정하고 Next (다음)를 클릭합니다.
Set Placement (배치 설정) 탭에서 다음을 수행합니다.
- Read Policy (읽기 정책)에서 네임스페이스 버킷이 데이터를 읽도록 5단계에서 생성된 각 네임스페이스 리소스의 확인란을 선택합니다.
- 사용 중인 네임스페이스 정책 유형이 Multi 이면 Read Policy(쓰기 정책)에서 네임스페이스 버킷에서 데이터를 작성해야 하는 네임스페이스 리소스를 지정합니다.
- 다음을 클릭합니다.
- 생성을 클릭합니다.
검증
- State 열, 예상되는 읽기 리소스 수 및 예상 쓰기 리소스 이름에 녹색 확인 표시가 포함된 네임스페이스 버킷이 나열되는지 확인합니다.