이 페이지에서는 프롬프트와 응답을 정리하는 방법을 자세히 설명합니다. Model Armor는 AI 애플리케이션을 보호하는 일련의 필터를 제공합니다. Model Armor는 구성된 검사 신뢰도 수준에 따라 프롬프트와 응답을 확인합니다.
시작하기 전에
템플릿 만들기의 안내에 따라 템플릿을 만듭니다.
필수 권한 얻기
프롬프트와 대답을 삭제하는 데 필요한 권한을 얻으려면 관리자에게 Model Armor에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Model Armor 사용자(
roles/modelarmor.user
) -
Model Armor 뷰어(
roles/modelarmor.viewer
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
API 사용 설정
Model Armor를 사용하려면 먼저 Model Armor API를 사용 설정해야 합니다.
콘솔
Enable the Model Armor API.
Model Armor를 활성화할 프로젝트를 선택합니다.
gcloud
시작하기 전에 Model Armor API와 함께 Google Cloud CLI를 사용하여 다음 단계를 따르세요.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
다음 명령어를 실행하여 Model Armor 서비스의 API 엔드포인트를 설정합니다.
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.LOCATION.rep.googleapis.com/"
LOCATION
을 Model Armor를 사용하려는 리전으로 바꿉니다.SDP_PROJECT_ID
: 고급 Sensitive Data Protection 템플릿이 속한 프로젝트의 ID입니다.PROJECT_NUMBER
: 템플릿이 속한 프로젝트의 번호입니다.PROJECT_ID
: 템플릿의 프로젝트 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.PROJECT_ID
: 템플릿의 프로젝트 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.PROJECT_ID
: 템플릿이 속한 프로젝트의 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.FILE_TYPE
: 입력 파일의 형식입니다.CREDIT_CARD_NUMBER
: 신용카드 번호는 12~19자리 숫자입니다. 전 세계에서 결제에 사용됩니다.FINANCIAL_ACCOUNT_NUMBER
: 특정 금융 계좌를 나타내는 숫자입니다(예: 은행 계좌 번호 또는 퇴직 계좌 번호).GCP_CREDENTIALS
: Google Cloud 서비스 계정 사용자 인증 정보입니다. {api_client_lib_name} 및 서비스 계정으로 인증하는 데 사용할 수 있는 사용자 인증 정보입니다.GCP_API_KEY
: Google Cloud API 키입니다. 비공개 사용자 데이터에 액세스할 필요가 없는 Google Cloud API를 호출할 때 사용되는 암호화된 문자열입니다.PASSWORD
: 구성, 코드, 기타 텍스트의 일반 텍스트 비밀번호입니다.US_SOCIAL_SECURITY_NUMBER
: 미국 사회보장번호(SSN)는 미국 시민권자, 영주권자, 임시 거주자에게 발급되는 9자리 번호입니다. 숫자 그룹의 숫자가 모두 0인 번호(즉, 000-##-####, ###-00-####, ###-##-0000), 첫 번째 숫자 그룹이 666인 번호, 첫 번째 숫자가 9인 번호는 이 감지기에서 대조하지 않습니다.US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER
: 미국 개인 납세자 식별 번호(ITIN)는 미국 국세청(IRS)이 발급하는 세금 식별 번호(TIN) 유형입니다. ITIN은 주민등록번호(SSN)를 받을 수 없는 특정 비거주/거주 외국인 및 이들의 배우자와 부양 가족에게만 제공되는 세금 처리 번호입니다.TEMPLATE_ID
: 템플릿의 ID입니다.LOCATION
: 템플릿의 위치입니다.PROJECT_ID
: 템플릿이 속한 프로젝트의 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.PROJECT_ID
: 템플릿이 속한 프로젝트의 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.TEMPLATE_ID
: 템플릿의 ID입니다.LOCATION
: 템플릿의 위치입니다.PROJECT_ID
: 템플릿이 속한 프로젝트의 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.PROJECT_ID
: 템플릿이 속한 프로젝트의 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.PROJECT_ID
: 템플릿이 속한 프로젝트의 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.이 예시에서는 다음과 같은 응답이 반환됩니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "dangerous": { "confidenceLevel": "MEDIUM_AND_ABOVE", "matchState": "MATCH_FOUND" }, "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, } } }
PROJECT_ID
: 템플릿이 속한 프로젝트의 ID입니다.LOCATION
: 템플릿의 위치입니다.TEMPLATE_ID
: 템플릿의 ID입니다.- Model Armor에 대해 자세히 알아보세요.
- Model Armor 최소 기준 설정에 대해 알아보기
- Model Armor 템플릿에 대해 알아보기
- Model Armor 문제 해결하기
다음 명령어를 실행하여 Model Armor를 사용 설정합니다.
gcloud services enable modelarmor.googleapis.com --project=PROJECT_ID
PROJECT_ID
를 프로젝트의 ID로 바꿉니다.
Sensitive Data Protection 템플릿이 포함된 프로젝트에서 템플릿 만들기의 고급 Sensitive Data Protection 단계의 일부로 생성된 서비스 에이전트에 DLP 사용자 역할 (roles/dlp.user
) 및 DLP 리더 역할 (roles/dlp.reader
)을 부여합니다.
Sensitive Data Protection 템플릿이 Model Armor 템플릿과 동일한 프로젝트에 있는 경우 이 단계를 건너뛰세요.
gcloud projects add-iam-policy-binding SDP_PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role=roles/dlp.user gcloud projects add-iam-policy-binding SDP_PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role=roles/dlp.reader
다음을 바꿉니다.
프롬프트 정리
악성 입력을 방지하고 안전하고 적절한 프롬프트가 LLM에 전송되도록 프롬프트를 정리합니다.
텍스트 프롬프트
Model Armor는 텍스트를 분석하고 다양한 필터를 적용하여 잠재적인 위협을 식별하고 완화함으로써 텍스트 프롬프트를 정리합니다.
REST
다음 명령어를 사용하여 Model Armor에서 텍스트 프롬프트를 정리합니다.
curl -X POST \
-d '{"userPromptData":{"text":"[UNSAFE TEXT]"}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
그러면 다음과 같은 응답이 반환됩니다. MATCH_FOUND
는 위험 카테고리에 있습니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" }, "dangerous": { "matchState": "MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } } } } } }
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Model Armor Go SDK를 설치합니다.
자바
이 코드를 실행하려면 먼저 Java 개발 환경을 설정하고 Model Armor Java SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Model Armor Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 PHP 개발 환경을 설정하고 Model Armor PHP SDK를 설치합니다.
Python
이 코드를 실행하려면 Python 개발 환경을 설정하고 Model Armor Python SDK를 설치하세요.
그러면 다음과 같은 응답이 반환됩니다.
sanitization_result { filter_match_state: MATCH_FOUND filter_results { key: "rai" value { rai_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND rai_filter_type_results { key: "dangerous" value { confidence_level: HIGH match_state: MATCH_FOUND } } } } } filter_results { key: "pi_and_jailbreak" value { pi_and_jailbreak_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND confidence_level: HIGH } } } filter_results { key: "malicious_uris" value { malicious_uri_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } filter_results { key: "csam" value { csam_filter_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } invocation_result: SUCCESS }
다국어 감지가 사용 설정된 텍스트 프롬프트 정리
개별 요청마다 enableMultiLanguageDetection
플래그를 true
로 설정하여 요청별로 다국어 감지를 사용 설정합니다.
원하는 경우 출발어를 지정하여 더 정확한 결과를 얻을 수 있습니다. 출발어가 지정되지 않으면 다국어 지원을 위해 자동으로 감지됩니다.
다음 명령어를 사용하여 요청 수준에서 다국어 감지가 사용 설정된 Model Armor의 텍스트 프롬프트를 정리합니다.
curl -X POST \ -d '{"userPromptData":{"text":"[UNSAFE TEXT]"}, "multiLanguageDetectionMetadata": { "enableMultiLanguageDetection": true , "sourceLanguage": "jp"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
파일 기반 프롬프트
파일에 저장된 프롬프트를 정리하려면 파일 콘텐츠를 base64 형식으로 제공하세요. Model Armor는 파일 유형을 자동으로 감지하지 않습니다. 파일 형식을 나타내려면 byteDataType
필드를 명시적으로 설정해야 합니다. 필드가 누락되거나 지정되지 않으면 요청이 실패합니다. 가능한 byteDataType
값은 PLAINTEXT_UTF8
, PDF
, WORD_DOCUMENT
, EXCEL_DOCUMENT
, POWERPOINT_DOCUMENT
, TXT
, CSV
입니다.
REST
curl -X POST \ -d "$(jq -n \ --arg data "$(base64 -w 0 -i sample.pdf)" \ '{userPromptData: {byteItem: {byteDataType: "FILE_TYPE", byteData: $data}}}')" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Model Armor Go SDK를 설치합니다.
자바
이 코드를 실행하려면 먼저 Java 개발 환경을 설정하고 Model Armor Java SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Model Armor Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 PHP 개발 환경을 설정하고 Model Armor PHP SDK를 설치합니다.
Python
이 코드를 실행하려면 Python 개발 환경을 설정하고 Model Armor Python SDK를 설치하세요.
기본 Sensitive Data Protection 구성
Model Armor는 민감한 정보 보호와 통합되어 개인 정보의 우발적인 노출을 방지합니다. 기본 Sensitive Data Protection 설정이 사용 설정된 템플릿을 만듭니다. 기본 Sensitive Data Protection을 사용하면 Sensitive Data Protection infoType의 고정된 집합을 검사할 수 있습니다.
다음 Sensitive Data Protection infoType은 모든 리전의 프롬프트에서 검사됩니다.
미국 기반 리전의 프롬프트에서 다음과 같은 추가 Sensitive Data Protection infoType이 검사됩니다.
다음은 기본 Sensitive Data Protection 구성의 예시입니다.
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --project=PROJECT_ID \ --basic-config-filter-enforcement=enabled
다음을 바꿉니다.
REST
export FILTER_CONFIG_SDP_BASIC='{ "filterConfig": { "sdpSettings": { "basicConfig": { "filterEnforcement": "ENABLED" } } } }' curl -X PATCH \ -d "$FILTER_CONFIG_SDP_BASIC" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID?updateMask=filterConfig.sdpSettings.basicConfig.filterEnforcement"
다음을 바꿉니다.
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Model Armor Go SDK를 설치합니다.
자바
이 코드를 실행하려면 먼저 Java 개발 환경을 설정하고 Model Armor Java SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Model Armor Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 PHP 개발 환경을 설정하고 Model Armor PHP SDK를 설치합니다.
Python
이 코드를 실행하려면 Python 개발 환경을 설정하고 Model Armor Python SDK를 설치하세요.
만든 템플릿을 사용하여 프롬프트를 검사합니다. 예를 들면 다음과 같습니다.
curl -X POST \ -d '{"userPromptData":{"text":"can you remember my ITIN : ###-##-####"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
이 예시에서는 다음과 같은 응답이 반환됩니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "findings": [ { "infoType": "US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER", "likelihood": "LIKELY", "location": { "byteRange": { "start": "26", "end": "37" }, "codepointRange": { "start": "26", "end": "37" } } } ] } } } ] } }
고급 Sensitive Data Protection 구성
Model Armor는 고급 Sensitive Data Protection 구성 설정을 사용하여 LLM 프롬프트와 응답을 검사합니다. 이렇게 하면 기본 Sensitive Data Protection 설정에서 제공되는 infoType 외에도 Sensitive Data Protection 기능을 사용할 수 있습니다.
Model Armor에서 Sensitive Data Protection 고급 필터를 사용하려면 Sensitive Data Protection 템플릿이 Model Armor 템플릿과 동일한 클라우드 위치에 있어야 합니다.
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --advanced-config-inspect-template="path/to/template" \
다음을 바꿉니다.
REST
export FILTER_CONFIG_SDP_ADV='{ "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }' curl -X POST \ -d "$FILTER_CONFIG_SDP_ADV" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID?updateMask=filterConfig.sdpSettings.advancedConfig"
다음을 바꿉니다.
이 예시에서는 다음과 같은 응답이 반환됩니다.
{ "name": "projects/PROJECT_ID/locations/LOCATION/templates/all-filters-test", "createTime": "2024-12-16T17:08:19.626693819Z", "updateTime": "2024-12-16T17:08:19.626693819Z", "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Model Armor Go SDK를 설치합니다.
자바
이 코드를 실행하려면 먼저 Java 개발 환경을 설정하고 Model Armor Java SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Model Armor Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 PHP 개발 환경을 설정하고 Model Armor PHP SDK를 설치합니다.
Python
이 코드를 실행하려면 Python 개발 환경을 설정하고 Model Armor Python SDK를 설치하세요.
만든 템플릿을 사용하여 프롬프트를 검사합니다. 예를 들면 다음과 같습니다.
curl -X POST \ -d '{"userPromptData":{"text":"is there anything malicious running on 1.1.1.1?"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
다음을 바꿉니다.
이 예시에서는 다음과 같은 응답이 반환됩니다.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "deidentifyResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "data": { "text": "is there anything malicious running on [IP_ADDRESS]?" }, "transformedBytes": "7", "infoTypes": ["IP_ADDRESS"] } } } ] } }
모델 응답 정리
LLM은 때때로 유해한 대답을 생성할 수 있습니다. 애플리케이션에서 LLM 사용과 관련된 위험을 줄이려면 LLM의 응답을 정리하는 것이 중요합니다.
다음은 Model Armor에서 모델 응답을 정리하는 명령어의 예시입니다.
REST
curl -X POST \
-d '{"text":"IP address of the current network is ##.##.##.##"}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"
다음을 바꿉니다.
Go
이 코드를 실행하려면 먼저 Go 개발 환경을 설정하고 Model Armor Go SDK를 설치합니다.
자바
이 코드를 실행하려면 먼저 Java 개발 환경을 설정하고 Model Armor Java SDK를 설치합니다.
Node.js
이 코드를 실행하려면 먼저 Node.js 개발 환경을 설정하고 Model Armor Node.js SDK를 설치합니다.
PHP
이 코드를 실행하려면 먼저 PHP 개발 환경을 설정하고 Model Armor PHP SDK를 설치합니다.
Python
이 코드를 실행하려면 Python 개발 환경을 설정하고 Model Armor Python SDK를 설치하세요.
다국어 감지가 사용 설정된 모델 응답 정리
개별 응답마다 enableMultiLanguageDetection
플래그를 true
로 설정하여 요청별로 다국어 감지를 사용 설정합니다.
원하는 경우 출발어를 지정하여 더 정확한 결과를 얻을 수 있습니다. 출발어가 지정되지 않으면 다국어 지원을 위해 자동으로 감지됩니다.
curl -X POST \ -d '{"userPromptData":{"text":"[UNSAFE TEXT]"}, "multiLanguageDetectionMetadata": { "enableMultiLanguageDetection": true , "sourceLanguage": "jp"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"
다음을 바꿉니다.
다음 단계
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-09-05(UTC)