이 문서에서는 Pub/Sub 주제의 스키마 버전을 커밋하는 방법을 보여줍니다.
시작하기 전에
- Pub/Sub 스키마의 작동 방식을 이해합니다.
- 스키마를 만듭니다.
필수 역할 및 권한
    
      스키마 버전을 커밋하고 스키마를 관리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Pub/Sub 편집자  (roles/pubsub.editor) IAM 역할을 부여해 달라고 요청하세요.
  
  
  
  
  역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
  
  
이 사전 정의된 역할에는 스키마 버전을 커밋하고 스키마를 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
스키마 버전을 커밋하고 스키마를 관리하려면 다음 권한이 필요합니다.
- 
                스키마 만들기: pubsub.schemas.create
- 
                주제에 스키마 연결: pubsub.schemas.attach
- 
                스키마 버전 커밋: pubsub.schemas.commit
- 
                스키마 또는 스키마 버전 삭제: pubsub.schemas.delete
- 
                스키마 또는 스키마 버전 가져오기: pubsub.schemas.get
- 
                스키마 나열: pubsub.schemas.list
- 
                스키마 버전 나열: pubsub.schemas.listRevisions
- 
                스키마 롤백: pubsub.schemas.rollback
- 
                메시지 유효성 검사: pubsub.schemas.validate
- 
                스키마의 IAM 정책 가져오기: pubsub.schemas.getIamPolicy
- 
                스키마의 IAM 정책 구성: pubsub.schemas.setIamPolicy
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
사용자, 그룹, 도메인, 서비스 계정과 같은 주 구성원에 역할 및 권한을 부여할 수 있습니다. 한 프로젝트에서 스키마를 만들고 이를 다른 프로젝트에 있는 주제에 연결할 수 있습니다. 각 프로젝트에 필요한 권한이 있는지 확인합니다.
스키마 수정
Google Cloud 콘솔, gcloud CLI, Pub/Sub API, Cloud 클라이언트 라이브러리를 사용하여 스키마 버전을 커밋할 수 있습니다.
다음은 스키마 버전 커밋에 대한 몇 가지 가이드라인입니다.
- 특정 제약조건 내에서 스키마를 수정할 수 있습니다. - 프로토콜 버퍼 스키마의 경우 선택적인 필드를 추가하거나 삭제할 수 있습니다. 다른 필드는 추가하거나 삭제할 수 없습니다. 또한 기존 필드를 수정할 수 없습니다. 
- Avro 스키마의 경우 스키마 해결 규칙은 Avro 문서를 참조하세요. 새 버전은 읽기 역할 스키마와 쓰기 역할 스키마 모두인 것처럼 규칙을 따라야 합니다. 
- 스키마에는 동시에 최대 20개의 버전이 포함될 수 있습니다. 이 제한을 초과할 경우에는 새 버전을 만들기 전에 기존 스키마 버전을 삭제합니다. 
 
- 각 버전에는 고유한 버전 ID가 연결되어 있습니다. 버전 ID는 자동으로 생성되는 8자로 된 UUID입니다. 
- 주제 유효성 검사에 사용되는 스키마의 버전 또는 버전 범위를 업데이트할 때는 변경사항이 적용되는 데 몇 분 정도 걸릴 수 있습니다. 
콘솔
스키마 버전을 만들려면 다음 단계별 안내를 따르세요.
- Google Cloud 콘솔에서 Pub/Sub 스키마 페이지로 이동합니다. 
- 기존 스키마의 스키마 ID를 클릭합니다. - 스키마의 스키마 세부정보 페이지가 열립니다. 
- 버전 만들기를 클릭합니다. - 스키마 버전 만들기 페이지가 열립니다. 
- 필요에 따라 항목을 변경합니다. - 예를 들어 스키마 만들기에서 만든 Avro 샘플 스키마의 경우 - Price라는 선택적인 추가 필드를 다음과 같이 추가할 수 있습니다.- { "type": "record", "name": "Avro", "fields": [ { "name": "ProductName", "type": "string", "default": "" }, { "name": "SKU", "type": "int", "default": 0 }, { "name": "InStock", "type": "boolean", "default": false }, { "name": "Price", "type": "double", "default": "0.0" } ] }
- 스키마 정의가 올바른지 확인하려면 정의 유효성 검사를 클릭합니다. 
- 또한 스키마 메시지의 유효성을 검사할 수 있습니다. - 메시지 테스트를 클릭하여 샘플 메시지를 테스트합니다. 
- 메시지 테스트 창에서 메시지 인코딩 유형을 선택합니다. 
- 메시지 본문에 테스트 메시지를 입력합니다. - 예를 들어 다음은 테스트 스키마의 샘플 메시지입니다. 이 예시에서는 메시지 인코딩을 - JSON으로 선택합니다.- {"ProductName":"GreenOnions", "SKU":34543, "Price":12, "InStock":true}
- 테스트를 클릭합니다. 
 
- 커밋을 클릭하여 스키마를 저장합니다. 
gcloud
gcloud pubsub schemas commit SCHEMA_ID \ --type=SCHEMA_TYPE \ --definition=SCHEMA_DEFINITION
각 항목의 의미는 다음과 같습니다.
- SCHEMA_TYPE은 avro또는protocol-buffer입니다.
- SCHEMA_DEFINITION은 스키마 정의를 포함하는 string으로, 선택한 스키마 유형에 따라 형식이 지정됩니다.
파일에서 스키마 정의를 지정할 수도 있습니다.
gcloud pubsub schemas commit SCHEMA_ID \ --type=SCHEMA_TYPE \ --definition-file=SCHEMA_DEFINITION_FILE
각 항목의 의미는 다음과 같습니다.
- SCHEMA_TYPE은 avro또는protocol-buffer입니다.
- SCHEMA_DEFINITION_FILE은 선택한 스키마 유형에 따라 형식이 지정된 스키마 정의가 있는 파일 경로가 포함되어 있는 string입니다.
REST
스키마 버전을 커밋하려면 다음과 같이 POST 요청을 보냅니다.
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/schemas/SCHEMA_ID:commit Authorization: Bearer $(gcloud auth application-default print-access-token) Content-Type: application/json --data @response-body.json
요청 본문에 다음 필드를 지정합니다.
{ "definition": SCHEMA_DEFINITION "type": SCHEMA_TYPE "name": SCHEMA_NAME }
각 항목의 의미는 다음과 같습니다.
- SCHEMA_TYPE은 AVRO또는PROTOCOL_BUFFER입니다.
- SCHEMA_DEFINITION은 스키마 정의를 포함하는 문자열로, 선택한 스키마 유형에 따라 형식이 지정됩니다.
- SCHEMA_NAME은 기존 스키마 이름입니다.
응답 본문에는 스키마 리소스의 JSON 표현이 포함되어야 합니다. 예를 들면 다음과 같습니다.
{
  "name": SCHEMA_NAME,
  "type": SCHEMA_TYPE,
  "definition": SCHEMA_DEFINITION
  "revisionId": REVISION_ID
  "revisionCreateTime": REVISION_CREATE_TIME
}
각 항목의 의미는 다음과 같습니다.
- REVISION_ID는 해당 버전에 대한 서버 생성 ID입니다.
- REVISION_CREATE_TIME은 버전이 생성된 ISO 8601 타임스탬프입니다.
Go
다음 샘플에서는 Go Pub/Sub 클라이언트 라이브러리의 주요 버전 (v2)을 사용합니다. 아직 v1 라이브러리를 사용하고 있다면 v2로의 마이그레이션 가이드를 참고하세요. v1 코드 샘플 목록을 보려면 지원 중단된 코드 샘플을 참고하세요.
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 참조하세요.
Avro
Proto
C++
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 C++ 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C++ API 참고 문서를 확인하세요.
Avro
Proto
자바
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 참조하세요.
Avro
Proto
Python
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 참조하세요.
Avro
Proto
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
Avro
Proto
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
Avro
Proto
스키마 버전을 커밋한 후 스키마 페이지에서 새 버전의 세부정보를 볼 수 있습니다.