이제, DB에 있는 데이터들을 avro file 형태로 저장하는 로직을 구현해보도록 하겠습니다.
DB -> AVRO
application.yml
yml파일에 ddl-auto 옵션을 none으로 변경하고 실행하겠습니다.
jpa:
hibernate:
ddl-auto: none
show-sql: true # 실행되는 SQL 쿼리 출력
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
UserSchema.avsc
{
"type": "record",
"name": "User",
"namespace": "com.example.my_rest_api.model",
"fields": [
{"name": "id", "type": "int"},
{"name": "name", "type": "string"},
{"name": "email", "type": "string"}
]
}
RestController.java
호출할 url을 controller에 작성합니다.
@PostMapping("/write")
public void writeAvroFile() throws IOException {
restService.exportDataToAvro();
}
RestService.java
DB에서 가져온 데이터를 avro 파일로 export하는 서비스를 생성합니다.
public void exportDataToAvro() throws IOException {
// Avro 스키마 로드
Schema schema = new Schema.Parser().parse(new File("C:\\workspace\\intelliJ\\my_rest_api\\src\\main\\resources\\avro\\UserSchema.avsc"));
// PostgreSQL에서 데이터 가져오기 (모든 데이터 가져오기)
List<User> entities = userRepository.findAll();
// Avro 파일 작성 준비
File avroFile = new File("C:\\workspace\\intelliJ\\my_rest_api\\src\\main\\resources\\avro\\User.avro");
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);
dataFileWriter.create(schema, avroFile);
// 데이터를 Avro 파일에 쓰기
for (User entity : entities) {
GenericRecord record = new GenericData.Record(schema);
record.put("id", entity.getId());
record.put("name", entity.getName());
record.put("email", entity.getEmail());
dataFileWriter.append(record);
}
dataFileWriter.close();
}
URL POST method로 호출
Postman으로 RestController.java에 작성한 POST url을 호출합니다.
데이터 비교 (DB 조회화면 및 avro 파일)
DB 조회화면
생성된 avro 파일
'Apache Avro' 카테고리의 다른 글
Rest-API 구현 관련 과제 - 1 (Avro) (0) | 2024.10.27 |
---|---|
Rest-API 구현 관련 과제 (0) | 2024.10.09 |
Spring Boot REST API 및 DB 연동 실습 - 2 (JPA) (0) | 2024.09.28 |
Spring Boot REST API 및 DB 연동 실습 - 1 (환경설정) (3) | 2024.09.28 |
avro plugin을 이용한 Spring boot 실습 - 3 (avro read) (1) | 2024.09.24 |
댓글