Azure Event Hubs의 스키마 레지스트리
Azure Event Hubs의 스키마 레지스트리에는 많은 이점이 있습니다. 스키마 레지스트리를 사용하면 데이터 일관성을 유지하고, 스키마 진화를 간소화하고, 상호 운용성을 향상시키며, 느슨하게 결합된 이벤트 스트리밍 워크플로에서 개발 노력을 줄일 수 있습니다. 스키마에 중앙 집중식 리포지토리를 사용하는 대규모 분산 조직은 스키마 레지스트리를 사용하여 운영 오버헤드가 거의 없는 매우 안정적인 데이터 처리 및 거버넌스를 달성할 수 있습니다.
Azure Event Hubs의 스키마 레지스트리는 스키마 기반 이벤트 스트리밍 시나리오에서 많은 역할을 수행합니다.
- 여러 스키마를 등록, 관리 및 발전할 수 있는 리포지토리 제공
- 여러 호환성 규칙을 사용하여 스키마 진화 관리
- 스키마화된 모든 데이터에 대한 데이터 유효성 검사 수행
- 생산자 및 소비자를 위한 클라이언트 쪽 라이브러리(직렬 변환기 및 역직렬 변환기) 제공
- 모든 페이로드에 대한 스키마 정의 대신 스키마 ID를 전달하여 네트워크 처리량 효율성 향상
Azure Event Hubs의 스키마 레지스트리는 표준, 프리미엄 및 전용 계층에서 지원됩니다.
스키마 레지스트리 구성 요소
스키마 레지스트리는 Event Hubs 네임스페이스의 일부이지만 Azure 메시징 서비스를 비롯한 다른 메시지 또는 이벤트 브로커와 함께 사용할 수도 있습니다. 스키마의 논리적 그룹 역할을 하고 다른 스키마 그룹과 독립적으로 관리할 수 있는 여러 스키마 그룹으로 구성됩니다.
스키마
느슨하게 결합된 시스템에서는 여러 애플리케이션이 주로 데이터를 통해 통신합니다. 스키마는 선언적 방식으로 데이터의 구조를 정의합니다. 결과적으로 생산자와 소비자 애플리케이션 간의 계약이 잘 정의되어 대규모로 안정적인 처리를 보장합니다.
스키마 정의에는 다음이 포함됩니다.
- 필드: 이름, 책 제목 또는 주소와 같은 개별 데이터 요소입니다.
- 데이터 형식: 문자열, 날짜-시간 또는 배열과 같이 저장할 수 있는 데이터 형식입니다.
- 구조: 중첩된 구조체 또는 배열과 같이 필드가 구성되는 방식입니다.
스키마는 생산자와 소비자 간의 계약을 정의합니다. Event Hubs 스키마 레지스트리에 정의된 스키마는 이벤트 데이터 외부 계약을 관리하여 페이로드 오버헤드를 제거합니다.
스키마 형식
스키마 형식은 스키마가 구조화되고 정의되는 방식을 결정하는 데 사용됩니다. 각 형식은 이벤트 스트리밍에 사용되는 이벤트의 구조를 정의하기 위한 특정 지침 및 구문을 간략하게 설명합니다.
Avro 스키마
Apache Avro 는 압축 이진 형식을 사용하고 스키마 진화 기능을 제공하는 인기 있는 데이터 serialization 시스템입니다.
Event Hubs 스키마 레지스트리에서 Avro 스키마 형식을 사용하는 방법에 대한 자세한 내용은 다음을 참조하세요.
JSON 스키마
JSON(JavaScript 개체 표기법) 스키마는 이벤트의 구조 및 데이터 형식을 정의하는 표준화된 방법입니다. JSON 스키마를 사용하면 이벤트 스트리밍에서 JSON 데이터 형식을 안정적으로 사용할 수 있습니다.
Event Hubs 스키마 레지스트리에서 JSON 스키마 형식을 사용하는 방법에 대한 자세한 내용은 Kafka 및 JSON 스키마와 함께 스키마 레지스트리를 사용하는 방법을 참조하세요.
프로토콜 버퍼
프로토콜 버퍼(Protobuf) 는 구조화된 데이터를 직렬화하기 위한 언어 중립적이고 플랫폼 중립적이며 확장 가능한 메커니즘입니다. 데이터 구조를 효율적으로 정의하고 압축된 이진 형식으로 직렬화하는 데 사용됩니다.
스키마 그룹
스키마 그룹은 비즈니스 기준에 따라 구성된 유사한 스키마의 논리적 그룹입니다. 스키마 그룹은 다음을 보유합니다.
- 여러 스키마 정의.
- 특정 스키마의 여러 버전.
- 그룹의 모든 스키마에 대한 스키마 유형 및 호환성과 관련된 메타데이터입니다.
스키마 그룹은 별도의 권한 부여 모델을 사용하여 특정 애플리케이션 또는 조직 구성 단위와 일치하는 스키마 레지스트리의 하위 집합으로 생각할 수 있습니다. 이 추가 보안 경계는 공유 서비스 모델에서 메타데이터 및 영업 비밀이 유출되지 않도록 하는 데 도움이 됩니다. 또한 애플리케이션 소유자는 동일한 네임스페이스를 공유하는 다른 애플리케이션과 독립적으로 스키마를 관리할 수 있습니다.
스키마 진화
스키마는 생산자 및 소비자의 비즈니스 요구 사항에 따라 진화해야 합니다. 스키마 레지스트리는 스키마 그룹 수준에서 호환성 모드를 도입하여 스키마 진화를 지원합니다. 스키마 그룹을 만들 때 해당 스키마 그룹에 포함하는 스키마의 호환성 모드를 지정할 수 있습니다. 스키마를 업데이트하는 경우 새 버전의 스키마를 만들 수 있도록 변경 내용이 할당된 호환성 모드를 준수해야 합니다.
스키마 진화는 Avro 스키마 형식에 대해서만 지원됩니다.
스키마 레지스트리는 다음 호환성 모드에서 지원됩니다.
이전 버전과의 호환성
이전 버전과의 호환 모드를 사용하면 소비자 코드에서 새 버전의 스키마를 사용하고 이전 버전의 스키마로 메시지를 처리할 수 있습니다. 이전 버전과의 호환 모드를 사용하면 스키마에서 다음과 같은 변경을 수행할 수 있습니다.
- 필드 삭제
- 선택적 필드 추가
이후 버전과의 호환성
전달 호환성을 사용하면 소비자 코드에서 이전 스키마 버전을 사용하고 새 스키마로 메시지를 읽을 수 있습니다. 앞으로 호환성 모드를 사용하면 스키마에서 다음을 변경할 수 있습니다.
- 필드 추가
- 선택적 필드 삭제
호환성 없음
호환 모드를 None
사용하는 경우 스키마 레지스트리는 스키마를 업데이트할 때 호환성 검사를 수행하지 않습니다.
클라이언트 SDK
다음 라이브러리 중 하나를 사용하여 Avro serializer를 포함할 수 있습니다. Avro serializer를 사용하여 스키마 레지스트리 및 Avro로 인코딩된 데이터에 대한 스키마 식별자를 포함하는 페이로드를 직렬화하고 역직렬화할 수 있습니다.
프로그래밍 언어 | SDK | 샘플 |
---|---|---|
.NET | Microsoft.Azure.Data.SchemaRegistry.ApacheAvro | .NET 샘플 |
Java | azure-data-schemaregistry-avro | Java 샘플 |
Python | azure-schemaregistry-avroserializer | Python 샘플 |
JavaScript | @azure/schema-registry-avro | NodeJS 샘플 |
또한 아래 라이브러리는 워크로드에 따라 사용할 수도 있습니다.
- Apache Kafka: 스키마 레지스트리에서 지원되는 Kafka 통합 Avro 직렬 변환기 및 역직렬 변환기를 실행합니다. Java 클라이언트의 스키마 레지스트리용 Apache Kafka 클라이언트 직렬 변환기는 Apache Kafka 시나리오 및 Apache Kafka 기반 배포 또는 클라우드 서비스에서 사용할 수 있습니다.
- Azure CLI: Azure CLI를 사용하여 스키마 그룹에 스키마를 추가하는 예제는 Azure CLI를 사용하여 스키마 그룹에 스키마 추가를 참조하세요.
- PowerShell: PowerShell을 사용하여 스키마 그룹에 스키마를 추가하는 예제는 PowerShell을 사용하여 스키마 그룹에 스키마 추가를 참조하세요.
제한
Event Hubs의 제한(예: 네임스페이스에서 사용할 수 있는 스키마 수)은 Event Hubs 할당량 및 제한을 참조 하세요.
Azure 역할 기반 액세스 제어
프로그래밍 방식으로 스키마 레지스트리에 액세스하려면 다음 단계를 수행합니다.
- Microsoft Entra ID에 애플리케이션을 등록합니다.
- 네임스페이스 수준에서 다음 AZURE RBAC(역할 기반 액세스 제어) 역할 중 하나에 애플리케이션의 보안 주체를 추가합니다.
역할 | 설명 |
---|---|
소유자 | 스키마 레지스트리 그룹 및 스키마 읽기, 쓰기 및 삭제 |
기여자 | 스키마 레지스트리 그룹 및 스키마 읽기, 쓰기 및 삭제 |
스키마 레지스트리 판독기 | 스키마 레지스트리 그룹 및 스키마 읽기 및 나열 |
스키마 레지스트리 기여자 | 스키마 레지스트리 그룹 및 스키마 읽기, 쓰기 및 삭제 |
Azure Portal을 사용하여 애플리케이션을 만들고 등록하는 방법을 알아보려면 Microsoft Entra ID로 애플리케이션 등록을 참조하세요. 코드에서 사용할 클라이언트 ID(애플리케이션 ID), 테넌트 ID 및 비밀이 필요합니다.
관련 콘텐츠
- Azure Portal을 사용하여 스키마 레지스트리를 만드는 방법을 알아보려면 Azure Portal을 사용하여 Event Hubs 스키마 레지스트리 만들기를 참조하세요.
- 스키마 레지스트리 Avro 클라이언트 라이브러리에서 다음 샘플을 참조하세요.