programming,

1# Google Translation Api 적용기

김민재 김민재 Linkedin Sep 23, 2019 · 2 mins read
1# Google Translation Api 적용기
Share this

좌충우돌 GCP Translation 적용기

Google Translation API 를 적용하여 고객사 글로벌 번역 시스템을 만들기 시작한지 2달 정도 지났다. 어려운 과정이 많았는데, 그동안 나타났던 문제들과 해결했던 경험을 적어본다.

GCP 환경 설정의 어려움

Credential File Path Setting

https://cloud.google.com/translate/docs/quickstart-client-libraries#client-libraries-install-java

위의 구글 API 문서에서 가이드를 보며 프로젝트를 생성하고, API Key 와 Credetial file 을 받는 것까지는 순조로웠다. 그리고 바로 예제 코드를 실행해 보았다.

// Imports the Google Cloud client library
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.Translate.TranslateOption;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;

public class QuickstartSample {
  public static void main(String... args) throws Exception {
    // Instantiates a client
    Translate translate = TranslateOptions.getDefaultInstance().getService();

    // The text to translate
    String text = "Hello, world!";

    // Translates some text into Russian
    Translation translation =
        translate.translate(
            text,
            TranslateOption.sourceLanguage("en"),
            TranslateOption.targetLanguage("ru"));

    System.out.printf("Text: %s%n", text);
    System.out.printf("Translation: %s%n", translation.getTranslatedText());
  }
}

실행을 하였더니 Credetial does not exist. 에러메세지가 나왔다. 분명 CMD 창에서 다음과 같이 입력하였는데 파일을 찾을 수 없다니…

set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

하지만 구글 API가 되는지 우선 확인하기 위해 Java 코드로 Credential 을 적용 해 보았다.

GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("D:\\CredentailFile.json"))
.createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));

구글 문서와 같이 set GOOGLE_APPLICATION_CREDENTIALS=[PATH] 를 시도할 경우 새 세션을 열 때 변수를 다시 설정 해야 하는 문제가 생기므로 다음의 경로로 찾아가서 환경 변수를 직접 넣어주었다.

제어판 > 시스템 > 고급 시스템 설정 > 환경변수

API Key Setting

그렇게 Credetial 문제는 한단락이 되고 기대하는 마음으로 다시 실행해보았지만 The request is missing a valid API key 에러메세지 떴다. 대체 API key는 어떻게 보내야하는 것인가. 이 내용은 구글 문서에 없었다. 그래서 몇가지 도전을 해봤다.

javascript에서 key를 파라미터로 보내 보기

$.ajax({
url: 'https://www.googleapis.com/language/translate/v2?key=apiKey'
, data: '&target=zh&format=html&q={"<code>hello</code>":"login"}'
, type: 'POST'
, success: function(r){
console.log(JSON.parse(r.data.translations[0].translatedText.replace(/&quot;/gi, '"').replace(/\<code\>([^<]+)\<\/code\>/, '$1')));
}
});

이 방법은 키가 인터넷 상에 노출되는 방식이므로, 보안상 java단에서 처리하는 것이 좋다고 생각했다.

자바 코드에서 구글이 제공하는 메서드 사용

TranslateOptions.newBuilder().setApiKey(apiKey);

이렇게 간단하면 좋았겠지만 이 메서드는 @Deprecated 된 것이었다. 거기에 해당하는 메세지를 읽어보았더니 답이 있었다.

.. an API key is looked for in the GOOGLE_API_KEY environment variable.

윈도우 환경변수에서 변수명을 GOOGLE_API_KEY 로 하고 key 값을 추가하면 된다.

Summary

처음하는 GCP에 막막하였지만 첫 단계를 잘 넘어가였다. 다음은 개발 서버에 반영하는 것인데 AWS EC2에 환경변수를 적용하는 과정을 적어보겠다.

김민재
Written by 김민재
유능하고 싶은 개발자