자바용 gRPC 서버 스켈레톤

스켈레톤 gRPC 서버를 다운로드하여 완전한 gRPC 서버 구현을 시작할 수 있습니다.

시작하기

  1. 자바 gradle 프로젝트 (gRPC-booking-service)를 만들고 src/main 아래에 'proto' 디렉터리를 만듭니다.

  2. 예약 서비스 정의상태 확인 프로토콜을 다운로드하여 src/main/proto 아래에 배치합니다. 이 파일은 Actions Center API 및 상태 확인을 위한 gRPC 메서드와 메시지를 정의합니다.

  3. build.gradle 파일을 업데이트하고 Gradle용 종속 항목과 protobuf 플러그인을 추가합니다. protobuf-gradle-plugin 소개 및 가이드는 여기에서 확인할 수 있습니다.

        apply plugin: 'java'
        apply plugin: 'com.google.protobuf'
    
        repositories {
            mavenCentral()
        }
    
        // updating the version in our release process.
        def grpcVersion = '1.8.0' // CURRENT_GRPC_VERSION
        def nettyTcNativeVersion = '2.0.7.Final'
    
        dependencies {
            compile "com.google.api.grpc:proto-google-common-protos:0.1.9"
            compile "io.grpc:grpc-netty:${grpcVersion}"
            compile "io.grpc:grpc-protobuf:${grpcVersion}"
            compile "io.grpc:grpc-stub:${grpcVersion}"
            compile "io.netty:netty-tcnative-boringssl-static:${nettyTcNativeVersion}"
            compile "org.bouncycastle:bcmail-jdk15:1.46"
    
            testCompile "io.grpc:grpc-testing:${grpcVersion}"
            testCompile "junit:junit:4.12"
            testCompile "org.mockito:mockito-core:1.9.5"
        }
    
        buildscript {
            repositories {
                mavenCentral()
            }
            dependencies {
                // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
                // gradle versions
                classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.1'
            }
        }
    
        protobuf {
            protoc {
                artifact = 'com.google.protobuf:protoc:3.4.0'
            }
            plugins {
                grpc {
                    artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
                }
            }
            generateProtoTasks {
                all()*.plugins {
                    grpc {}
                }
            }
        }
    
        // Inform IDEs like IntelliJ IDEA, Eclipse or NetBeans about the generated code.
        sourceSets {
            main {
                java {
                    srcDirs 'build/generated/source/proto/main/grpc'
                    srcDirs 'build/generated/source/proto/main/java'
                }
            }
        }
    
        // Generate IntelliJ IDEA's .idea & .iml project files
        apply plugin: 'idea'
    
        // Provide convenience executables for trying out the examples.
        apply plugin: 'application'
    
        startScripts.enabled = false
    
  4. 다음 명령어를 실행하여 라이브러리를 빌드하고 protoc 빌드 플러그인에서 코드를 자동 생성합니다.

      ./gradlew build
    
  5. 서버에서 TLS를 사용 설정하려면 src/main/certificates/에서 다음 파일이 필요합니다.

    • server_cert_chain.pem: PEM 형식의 서버 인증서 체인
    • server_private_key.pem 서버 인증서 체인의 비공개 키는 PKCS#8 비공개 키여야 합니다.
    • trusted_client_roots.pem은 클라이언트를 인증할 때 신뢰할 수 있는 루트 인증서인 경우 Mozilla와 같은 기관에서 신뢰할 수 있는 루트 세트를 가져오거나 Google Internet Authority G2에서 현재 권장하는 루트 세트를 설치할 수 있습니다. 후자의 경우, 인증 과정에서 루트 인증서를 수동으로 업데이트하고
  6. 이 저장소에서 샘플 코드를 가져옵니다.

      git clone https://maps-booking.googlesource.com/java-maps-booking-grpc-server-skeleton
    

    BookingService.javasrc/main/java/ext/maps/booking/partner/v2에, Health.javasrc/main/java/gRPC/health/v1에 배치합니다. 두 파일에서 TODO에 따라 구현을 완료합니다.

  7. 다음 코드를 추가하여 gradle.build 파일을 업데이트하여 서버 실행 파일 생성을 지정합니다.

    task bookingService(type: CreateStartScripts) {
        mainClassName = 'ext.maps.booking.partner.v2.BookingService'
        applicationName = 'booking-service'
        outputDir = new File(project.buildDir, 'tmp')
        classpath = jar.outputs.files + project.configurations.runtime
    }
    
    applicationDistribution.into('bin') {
        from(bookingService)
        fileMode = 0755
    }
    
  8. 서버를 컴파일합니다.

    ./gradlew installDist
    
  9. 예약 서버를 실행합니다.

    ./build/install/grpc-booking-service/bin/booking-service
    

최종 디렉터리 구조

src
|---main
    |---certificates
        |---server_cert_chain.pem
        |---server_private_key.pem
        |---trusted_client_roots.pem
    |---java
        |---ext.maps.booking.partner.v2.BookingService.java
        |---grpc.health.v1.Health.java
    |---proto
        |---booking_service.proto
        |---health.proto
|---test

기타 참조