이번 포스팅은 번외입니다.
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
'Apache Avro' 카테고리의 다른 글
avro plugin을 이용한 Spring boot 실습 - 3 (avro read) (1) | 2024.09.24 |
---|---|
avro plugin을 이용한 Spring boot 실습 - 2 (avro write) (1) | 2024.09.24 |
avro plugin을 이용한 Spring boot 실습 - 1 (환경설정) (0) | 2024.09.21 |
직렬화와 역직렬화 (0) | 2024.09.21 |
apache avro 란? (0) | 2024.09.21 |
댓글