스키마 정의를 위한 Avro
간결하고 효율적인 데이터 직렬화 프레임워크인 Apache Avro를 사용하여 이벤트 스키마를 정의하는 방법을 배웁니다.
스키마 정의를 위한 Avro은(는) CoddyKit의 무료 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
What is Apache Avro?
Welcome! In this lesson, we'll explore Apache Avro, a powerful data serialization system. It's widely used in event-driven architectures, especially with Kafka.
Avro helps define the structure of your data (events) using a schema. This schema acts like a blueprint, ensuring consistency and enabling seamless communication between different applications.
Why Use Avro Schemas?
Avro's schema-driven approach offers several benefits:
- Data Compactness: Avro serializes data efficiently, leading to smaller message sizes.
- Schema Evolution: It provides robust rules for how schemas can change over time without breaking old applications.
- Language Agnostic: Schemas are language-independent, allowing different programming languages to read and write the same data.
- Strong Typing: Ensures data types are consistent, reducing runtime errors.
Avro Schema Structure
Avro schemas are defined using JSON. Each schema describes a data structure, most commonly a record type.
Key elements of an Avro schema include:
type: The kind of schema (e.g., "record", "enum", "array").name: The name of the schema (e.g., "User", "Order").namespace: An optional string to qualify the name.fields: For record types, an array of field definitions.
Avro Primitive Types
Avro supports a set of basic, primitive data types:
null: No value.boolean:trueorfalse.int: 32-bit signed integer.long: 64-bit signed integer.float: Single precision (32-bit) floating-point number.double: Double precision (64-bit) floating-point number.bytes: Sequence of 8-bit unsigned bytes.string: Unicode character sequence.
Defining a Simple Record
Let's define a simple Avro record schema for a User. Each field needs a name and a type.
Here, id is an int and name is a string.
{
"type": "record",
"name": "User",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "id", "type": "int"},
{"name": "name", "type": "string"}
]
}Complex Type: Nested Records
You can define complex data structures by nesting records. For example, an Order record might contain a Customer record within one of its fields.
{
"type": "record",
"name": "Order",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "orderId", "type": "string"},
{"name": "customer", "type": {
"type": "record",
"name": "Customer",
"fields": [
{"name": "customerId", "type": "int"},
{"name": "email", "type": "string"}
]
}}
]
}Complex Types: Arrays and Maps
Avro also supports collection types:
array: For a list of items of the same type. Theitemsproperty specifies the type of elements.map: For key-value pairs, where keys are alwaysstrings. Thevaluesproperty specifies the type of values.
{
"type": "record",
"name": "Product",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "productId", "type": "string"},
{"name": "tags", "type": {"type": "array", "items": "string"}},
{"name": "attributes", "type": {"type": "map", "values": "string"}}
]
}Complex Type: Enums
An enum defines a fixed set of named values. This is useful for fields with a limited, predefined set of options.
The symbols property lists all allowed string values for the enum.
{
"type": "record",
"name": "Payment",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "transactionId", "type": "string"},
{"name": "status", "type": {
"type": "enum",
"name": "PaymentStatus",
"symbols": ["PENDING", "COMPLETED", "FAILED"]
}}
]
}Complex Type: Unions & Nullables
A union allows a field to be one of several specified types. This is crucial for defining optional or nullable fields.
To make a field nullable, you define its type as a union of "null" and its actual type, e.g., ["null", "string"]. The first type in the union is often the default if not explicitly set.
{
"type": "record",
"name": "LogEntry",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "timestamp", "type": "long"},
{"name": "message", "type": "string"},
{"name": "userId", "type": ["null", "string"], "default": null}
]
}Setting Default Field Values
You can specify a default value for a field. This is particularly important for schema evolution, as it ensures that older data (without the new field) can still be read without error, using the default value.
The default value must be a valid instance of the field's type.
{
"type": "record",
"name": "Settings",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "theme", "type": "string", "default": "dark"},
{"name": "notificationsEnabled", "type": "boolean", "default": true}
]
}Avro Schema Question
Consider an Avro record for an event. We need a field named comment that can contain a string but is optional (can be null) and defaults to null if not provided.
Avro Definition Recap
Great job! You've learned the fundamentals of defining schemas with Apache Avro.
- Avro schemas are JSON-based blueprints for your data.
- They support primitive types (int, string, etc.) and complex types (records, arrays, maps, enums, unions).
- Unions are key for defining nullable or optional fields.
- Default values are crucial for backward compatibility and schema evolution.
Next, we'll see how to integrate these schemas with Spring Boot and Schema Registry.
자주 묻는 질문
“스키마 정의를 위한 Avro” 강의는 무료인가요?
네 — “스키마 정의를 위한 Avro” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의 전체를 잠금 해제할 수 있습니다. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에는 총 4개의 강의가 포함되어 있습니다.
“스키마 정의를 위한 Avro”에서 뭘 배우나요?
간결하고 효율적인 데이터 직렬화 프레임워크인 Apache Avro를 사용하여 이벤트 스키마를 정의하는 방법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Advanced Spring Boot 4: Event-Driven Architecture (Kafka)을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“스키마 정의를 위한 Avro” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 스키마 관리의 중요성
- 스키마 정의를 위한 Avro
- Spring Boot와 스키마 레지스트리 통합
- 스키마 발전과 호환성 모드