Avro Gradle Plugin (디폴트 설정)

itbuddy·2024년 9월 27일

Avro

목록 보기
3/4

Avro가 다양한 언어에서 스키마를 지원 하듯 자바에서도 지원 합니다. 그리고, *.avsc 스키마 파일을 자바 객체로 변환 해주는 플러그인도 존재 하는데요. 이번 포스트에서는 이를 디폴트 설정으로 사용해보는 시간을 가져 보겠습니다.

Java 에서 Avro객체를 생성하는 방법

Avro는 json으로 스키마를 작성하며, 이를 gradle plungin을 통하여 java 객체 생성이 가능합니다.
queryDSL 사용시 Entity를 작성하면 QEntity를 자동으로 만들어 주는 것과 같은 원리로 동작합니다.

setting.gradle

// -> 가장 위에 추가
pluginManagement {
    repositories {
        gradlePluginPortal()
        mavenCentral()
    }
}

//  <-
rootProject.name = 'spring-kafka-avro'

avro 스키마 예제

{
  "name": "OrderCancelKafkaEvent",
  "namespace": "com.example.springkafkaavro.common.kafka.model",
  "type": "record",
  "fields": [
    {
      "name": "odrderId",
      "type": "long"
    }
  ]
}

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.4'
    id 'io.spring.dependency-management' version '1.1.6'
    // avro gradle plugin
    id "com.github.davidmc24.gradle.plugin.avro" version "1.9.1"
}



group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}


configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // kafka
    implementation 'org.springframework.kafka:spring-kafka'
    // avro
    implementation "org.apache.avro:avro:1.12.0"

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

    testImplementation 'org.springframework.kafka:spring-kafka-test'
}

tasks.named('test') {
    useJUnitPlatform()
}
// avro
avro{
    outputCharacterEncoding = "UTF-8"
}

avsc 파일의 위치와 변환하는 방법

com.github.davidmc24.gradle.plugin.avro 가 *.avsc 파일을 읽는 위치는 디폴트로 src/avro가 지정 되어 있습니다.
해당 위치에 avsc 파일을 작성하고 ./gradlw build을 수행하면
다음처럼 avsc -> java 자동으로 변환 됩니다.

Ref

gradle-avro-plugin Github Repo

profile
프론트도 조금 아는 짱구 같은 서버 프로그래머

0개의 댓글