본문 바로가기
Apache Avro

avro dependency를 이용한 Spring boot 실습 (without plugins)

by 자는게젤루좋아 2024. 9. 24.

 

이번 포스팅은 번외입니다.

avro plugin 없이 순수한 avro dependency만을 이용하여 read & write를 해보겠습니다.

(크게 중요하게 다루는 파트는 아니기 때문에, 이 부분에 대해선 슥 훑고 넘어가는 정도로 작성하도록 하겠습니다.)

 

AvroController.java에 version 2로 plugin을 적용하지 않는 API를 추가합니다.

 

AvroController.java

@GetMapping("/v2/read")
public void readAvroFileWithoutPlugins() throws IOException {
    File file = new File("C:\\workspace\\intelliJ\\my_rest_api\\src\\main\\resources\\avro\\v2\\users.avro");
    avroService.readUserWithoutPlugins(file);
}

@PostMapping("/v2/write")
public void writeAvroFileWithoutPlugins() throws IOException {
    avroService.writeUserWithoutPlugins();
}

 

RestService.java

// 역직렬화를 통해 avro type의 파일을 다시 객체화 시켜 가져옵니다.
public void readUserWithoutPlugins(File file) throws IOException {

    Schema schema = new Schema.Parser().parse(new File("C:\\workspace\\intelliJ\\my_rest_api\\src\\main\\resources\\avro\\UserSchema.avsc"));

    // 마찬가지로 DatumReader를 이용하여 User class의 객체를 읽어옵니다. (역직렬화)
    DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
    // user file을 해당 schema로 읽어 옵니다.
    DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
    User user = null;
    while (dataFileReader.hasNext()) {
        user = dataFileReader.next(user);
        System.out.println(user);
    }
}

public void writeUserWithoutPlugins() throws IOException {

    // 이번엔 스키마 Class가 필요합니다.
    // Schema를 파싱하여 객체화 시킵니다. (역직렬화)
    Schema schema = new Schema.Parser().parse(new File("C:\\workspace\\intelliJ\\my_rest_api\\src\\main\\resources\\avro\\UserSchema.avsc"));

    // user1 에 대한 GenericRecord 객체 생성
    GenericRecord user1 = new GenericData.Record(schema);
    user1.put("name", "Alyssa");
    user1.put("favorite_number", 256);

    // user2 에 대한 GenericRecord 객체 생성
    GenericRecord user2 = new GenericData.Record(schema);
    user2.put("name", "Ben");
    user2.put("favorite_number", 7);
    user2.put("favorite_color", "red");

    // DataFileWirter에 schema와 user 정보를 같이 담아 파일화 시킵니다. (직렬화)
    File file = new File("C:\\workspace\\intelliJ\\my_rest_api\\src\\main\\resources\\avro\\v2\\users.avro");
    DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>(schema);
    DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
    dataFileWriter.create(schema, file);
    dataFileWriter.append(user1);
    dataFileWriter.append(user2);
    dataFileWriter.close();
}

 

Postman으로 write url 호출합니다.

write 결과가 잘 나옵니다.

 

Read API도 호출하도록 하겠습니다.

 

read 또한 정상적으로 출력되는 것을 확인하였습니다.

 

이로써 Avro Schema 와 Avro 객체를 이용한 실습은 얼추 마무리가 되었습니다.

심화적으로 파고들수도 있겠지만, 이번 편은 Avro type에 대한 기초적인 이해가 주된 목적이기에,

이쯤에서 마무리하도록 하겠습니다.

 

 

출처

https://avro.apache.org/docs/1.11.1/getting-started-java/

 

Getting Started (Java)

This is a short guide for getting started with Apache Avro™ using Java. This guide only covers using Avro for data serialization; see Patrick Hunt’s Avro RPC Quick Start for a good introduction to using Avro for RPC. Download Avro implementations for C

avro.apache.org

 

댓글