[java] Java에서 Avro 데이터 파일 생성과 읽기

소개

Avro는 데이터 직렬화 및 RPC 프레임워크로 사용되는 Apache 소프트웨어 재단에 의해 개발된 자바 기반의 데이터 직렬화 시스템입니다. Avro는 데이터 스키마를 사용하여 JSON을 이진 형식으로 변환하고, 이진 데이터를 다시 스키마를 기반으로 역직렬화할 수 있습니다.

이 글에서는 Java에서 Avro 데이터 파일을 생성하고 읽는 방법에 대해 알아보겠습니다.

의존성 추가

Avro를 사용하기 위해 프로젝트에 아래의 의존성을 추가해야 합니다.

<dependency>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro</artifactId>
    <version>1.10.2</version>
</dependency>

데이터 스키마 정의

Avro 데이터 파일을 생성하기 위해 먼저 데이터 스키마를 정의해야 합니다. Avro 스키마는 JSON 형식으로 작성됩니다. 예를 들어, 다음과 같은 간단한 사용자 스키마를 생성할 수 있습니다.

{
    "type": "record",
    "name": "User",
    "fields": [
        {"name": "name", "type": "string"},
        {"name": "age", "type": "int"},
        {"name": "email", "type": "string"}
    ]
}

Avro 데이터 파일 생성

Avro 데이터 파일을 생성하기 위해 DataFileWriter 클래스를 사용할 수 있습니다. 다음은 Avro 데이터 파일에 사용자 데이터를 쓰는 예제 코드입니다.

import java.io.File;
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.EncoderFactory;
import org.apache.avro.specific.SpecificDatumWriter;

public class AvroFileWriter {

    public static void main(String[] args) {
        // 데이터 스키마 초기화
        Schema schema = new Schema.Parser().parse(new File("user.avsc"));

        // Avro 데이터 파일 생성
        GenericRecord user = new GenericData.Record(schema);
        user.put("name", "John Doe");
        user.put("age", 30);
        user.put("email", "john.doe@example.com");

        DatumWriter<GenericRecord> datumWriter = new SpecificDatumWriter<>(schema);
        DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);

        try {
            dataFileWriter.create(user.getSchema(), new File("users.avro"));
            dataFileWriter.append(user);
            System.out.println("Avro 데이터 파일이 성공적으로 생성되었습니다.");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dataFileWriter.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Avro 데이터 파일 읽기

Avro 데이터 파일을 읽기 위해 DataFileReader 클래스를 사용할 수 있습니다. 다음은 Avro 데이터 파일에서 사용자 데이터를 읽는 예제 코드입니다.

import java.io.File;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;

public class AvroFileReader {

    public static void main(String[] args) {
        DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
        DataFileReader<GenericRecord> dataFileReader;

        try {
            dataFileReader = new DataFileReader<>(new File("users.avro"), datumReader);
            GenericRecord user = null;

            while (dataFileReader.hasNext()) {
                user = dataFileReader.next(user);
                System.out.println(user);
            }

            System.out.println("Avro 데이터 파일이 성공적으로 읽혔습니다.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 코드에서는 users.avro 파일을 읽고 각 사용자에 대한 정보를 출력합니다.

결론

Java에서 Avro 데이터 파일을 생성하고 읽는 방법에 대해 알아보았습니다. Avro는 빠르고 효율적인 데이터 직렬화 및 역직렬화를 제공하므로 대규모 데이터 처리 작업에 유용하게 사용할 수 있습니다.

더 많은 정보를 원하시면 Avro 공식 문서를 참조하십시오.