좌충우돌 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(/"/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에 환경변수를 적용하는 과정을 적어보겠다.