본문 바로가기

Slack 채널 정리

armeria 사용 gradle 설정

간만에 시간 좀 나서 얼마 전 모님이 얘기했던 armeria 이용해서 간단한 샘플 코딩 해봤습니다. 샘플 코드 등은 좀 더 공부한 후 공유해보도록 하겠고 오늘은 gRPC, thrift 코드 자동 생성 하기 위한 방법 우선 공유합니다.
(gRPC, thrift 프로그래밍 방식에 대한 세세한 설명은 빼고 소스 자동 생성에 관련된 부분만 설명합니다)

1. gRPC
- 확장자가 proto 인 IDL 파일을 src/main/proto 밑에 작성해둡니다.
- build.gradle 보면 grpc, protobuf 가 들어간 설정들이 보일텐데 reposioty 에서 grpc 라이브러리 다운 받아 protobuf 로 코드 생성해주는 것들입니다.
- 위 두 단계만으로도 소스는 자동 생성되었습니다. 하지만 정작 서비스 구현하려고 하니 생성된 코드를 찾을 수 없다는 에러에 부딪혔습니다. 소스는 build/generated/source/proto 밑에 생성되는데 위 build.gradle 에서 idea { module { ... }} 이란 부분을 넣어준 후에야 에러 없이 소스 참조할 수 있었습니다.

2. thrift
- src/main/thrift 에 확장자 thrift 인 IDL 파일을 작성해둡니다.
- thrift 는 gRPC 에 비해 설정은 간단했습니다. compileThrift 부분에서 거의 모두 해결됩니다.
- gRPC 와 달리 이 녀석은 소스 생성해주는 thrift 실행 파일이 추가로 필요했습니다. thriftExecutable 설정값으로 컴파일러 위치를 지정해주면 됩니다.
- 소스는 build/generated-sources/thrift 밑에 생성됩니다. gRPC 와 달리 따로 소스 디렉토리 설정 안해줘도 서비스 구현 시 에러 없이 잘 찾습니다. 왜 그런지는 저도 잘 모르겠어요 ㅎ.이상입니다. intellij 환경에서 테스트한거라 이클립스에서는 어떨런지 모르겠습니다. 그리고 gradle 잘 모르고 쓰는거라  설명 중 오류 있을 수 있다는 점 염두에 두셔요.

buildscript {
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8'
    }
}
plugins {
    id "io.spring.dependency-management" version "1.0.7.RELEASE"
    id "org.jruyi.thrift" version "0.4.1"
}
​
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'com.google.protobuf'
apply plugin: "org.jruyi.thrift"
​
repositories {
    mavenCentral()
}
​
dependencyManagement {
    imports {
        mavenBom 'com.linecorp.armeria:armeria-bom:0.84.0'
    }
}
​
protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.7.1'
    }
​
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.20.0'
        }
    }
    generateProtoTasks {
        ofSourceSet('main')*.plugins {
            grpc {}
        }
    }
}
​
dependencies {
    compile 'com.linecorp.armeria:armeria'
    compile 'com.linecorp.armeria:armeria-grpc'
    compile 'com.linecorp.armeria:armeria-thrift'
    compile 'io.projectreactor:reactor-core:3.2.8.RELEASE'
    compileOnly 'jakarta.annotation:jakarta.annotation-api:1.3.4'
    compileOnly 'org.projectlombok:lombok:1.18.6'
    annotationProcessor 'org.projectlombok:lombok:1.18.6'    
    runtime 'org.slf4j:slf4j-simple:1.7.26'
}
​
tasks.withType(JavaCompile) {
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
    options.encoding = 'UTF-8'
    options.debug = true
    options.compilerArgs += '-parameters'
}
idea {
    module {
        sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java");
        sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/grpc");
    }
}
​
compileThrift {
    thriftExecutable "D:/libs/thrift.exe"	
    recurse true
    generator 'html'
    generator 'java', 'private-members'
}

'Slack 채널 정리' 카테고리의 다른 글

리눅스 fuser 명령어  (0) 2019.11.29
git HTTP Basic: Access denied 에러  (0) 2019.11.29
graphql 기초 용어  (0) 2019.11.29
Flogo 삽질  (0) 2019.11.29
conda-forge  (0) 2019.11.29