brunch

You can make anything
by writing

C.S.Lewis

by 알리스 May 09. 2022

내 서비스에 네이버 파파고 번역 기능 적용하기

오픈 API 탐색

외국인들은 구글 번역기를 사용하지만, 우리에겐 네이버 파파고가 있다! 몇 년 전만 해도 구글 번역기를 더 많이 사용했던 것 같은데, 지금은 번역 퀄리티가 높아졌는지, 많은 사람들이 파파고를 이용하는 듯하다. 그중에 하나가 나. 파파고는 다국어 처리에 대한 네이버의 기술과 경험을 번역 엔진에 적용해 보다 정확한 번역 결과를 제공하는 서비스라고 소개하고 있다. 학습을 통해 성능이 높아지며, 번역할 언어의 종류도 자동으로 감지한다. 한국어를 기본으로 하고 있으며, 문맥을 이해하는 번역 기술을 제공하여 자연스러운 결과를 얻을 수 있다. 그럼 내 서비스에 이렇게나 성능이 좋다는 파파고를 적용시키려면 어떻게 해야 하는 걸까? 






API(Application Programming Interface)

API란 Application Programming Ingerface의 약자로 클라이언트와 서버의 통신을 주고받는 방식이다. 서비스를 사용할 때 클라이언트가 서버에게 사진 다운로드, 로그인 정보 확인 등 수많은 작업을 요청하기 때문에 하나의 서비스에 다양한 API가 연결되어 있다. 


일반적으로 Backend 개발자가 서비스 구현 시 필요한 API를 만들고 해당 API를 기반으로 Frontend 개발자가 클라이언트를 개발한다. 때문에 Backend 쪽에서 API를 먼저 만들어야 Frontend 개발자가 진행할 수 있다. 또한 Backend개발자에 따라 API의 구조가 달라질 수 있으며, Frontend 개발자와 논의하여 필요한 부분의 API를 만든다. 내 최측근은 이렇게 일하더라.






파파고(Papago) 번역 API 살펴보기

파파고는 RESTful 형태의 API*를 제공하고 있으며, 아래와 같이 세 종류의 API를 제공하고 있다. 


Papago 번역 API : 파파고의 인공 신경망 기반 기계 번역 기술*로 텍스트를 번역한 결과를 반환하는 RESTful API. *인공 신경망 시계 번역 기술(NMT, Neural Machine Translation)

언어감지 API : 입력된 텍스트의 언어를 감지해 주는 RESTful API.

한글 인명-로마자 변환 API : 한글로 된 이름을 로마자 표기로 변환한 결과를 반환하는 RESTful API.



REST는 Representational State Transfer의 약자로 자원(Resouce)을 이름으로 구분하여 상태를 주고받는 모든 것으로, http URI를 통해 자원을 명시하고 http Method를 통해 해당 자원에 대한 CRUD operation을 적용하는 것을 말한다. 다시 말해, 데이터를 주소로 구분하고(http URI 자원 명시) 해당 데이터로 하고싶은 행위를 알려(http Method) Create, Read, Update, Delete 하는 것(CRUD Operation)이 REST이다. 

REST API는 REST의 원리는 따르는 API로서, 설계할 때 몇 가지 규칙을 고려해야한다. Restful API는 REST API의 설계규칙을 지킨 시스템을 말한다. 



Papago 번역 서비스는 http통신*을 통해 제공받을 수 있다. 파파고를 사용할 때를 생각해보면, 번역하고자 하는 텍스트를 입력하고, '번역'버튼을 눌러야만 번역 결과를 볼 수 있는데, 이렇게 버튼을 눌러 요청을 해야만 서버가 응답하고 그때서야 결과값을 볼 수 있는 것이다. 이것이 바로 http통신! 그럼 이제 파파고 API를 뜯어보자! 여기서는 Papago 번역 API에 관한 것만 살펴보겠다. 



*http 통신이란 말 그대로 HTML 파일을 전송하는 프로토콜로서, 클라이언트 요청이 있을 때만 서버가 응답하는 단방향 통신이다. JSON, Image, HTML 등 다양한 파일을 전송받을 수 있다. 양방향 통신은 Socket 통신이라고 한다. 카카오톡이 Socket 통신을 한다. 







Papago 번역 RESTful API의 Reqest 프로토콜

Papago RESTful API의 Reqest 프로토콜 (네이버클라우드플랫폼 파파고API 활용하기, 2019)




위의 이미지는 http 통신으로 Request를 보낼때의 프로토콜을 도식화한 것으로, 파파고 API는 왼쪽 그림처럼 http 통신으로 Request를 보내고 다시 http통신을 통해 응답(번역결과)를 전달한다. 여기서는 POST 방식의 Method*를 사용하기 때문에 Headers에는 API의 인증 키값이 들어가고, 실제 번역할 문장은 Body에 들어가서, 파파고 API로 Request를 보내는 구조로 되어 있다.

  


*기본적으로 http 통신할 때 보내는 데이터는 http 패킷이라고 하는데, 이 구조는 크게 Header와 Body영역으로 나뉜다. Header에는 여러 가지 Metadata와 어떤 방식의 Method를 사용하였는지 정의한다. http 프로토콜에서 데이터 전송을 하기 위해 지원하는 7가지 Method가 있는데, 그 중 하나가 바로 POST Method이다. 


POST 방식은 Body 영역에 데이터를 실어 보내는 방식이다. 때문에 데이터를 전송할 때 길이 제한이 없으며, 대용량 데이터를 보내는데 적합하다. POST와 함께 많이 쓰이는 Method는 GET 방식이 있는데, GET 방식은 URL에 Parameter를 붙여 보내는 방식이다. 즉 URL의 Parameter에 데이터를 전송하기 때문에 POST 방식과 다르게 Body영역을 사용하지 않는다. 때문에 대용량 데이터 전송에 제한이 있다.







Request Header

Papago API의 Request Header (네이버클라우드플랫폼 파파고API 활용하기, 2019)


Header에는 API의 인증키 값이 들어간다. 파파고 API의 인증키값은 네이버 클라우드 플랫폼 AI에서 어떤 어플리케이션에 해당 API를 사용할 것인지 어플리케이션 등록 시에 발급받을 수 있다. 이 때, 클라이언트 ID와 클라이언트 Secret이 값이 나오는데, 이 값을 설정하여 데이터를 전송하면 된다. 






Request Body

Papago API의 Request Body (네이버클라우드플랫폼 파파고API 활용하기, 2019)



Body에는 실제 번역하고자 하는 텍스트에 대한 데이터가 들어간다. 실제 번역될 데이터를 JSON* 형태로, 3가지 속성(Key)으로 1) sourse는 번역할 문장의 언어종류, 2) tartget은 번역대상 언어의 종류 그리고 3) text는 번역할 문장의 전체 텍스트로 구분한 형태로 Request를 보낸다. 여기서 고려할 것은 네이버가 지정해 놓은 언어 코드를 사용해야 하고, 번역할 텍스트에는 한글이 포함되어 있기 때문에 UTF-8*로 인코딩하여, 5000자 이하여야 결과를 받을 수 있다. 



*JSON이란 JavaScript Object Notation의 약자로 데이터를 저장하거나 전송할 때 많이 사용되는 데이터 교환 형식이다. 이름에서 보이는 것처럼 JavaScript의 객체 표기법을 사용한다. 어떠한 통신방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표현하는 방법일 뿐이다. 겁먹지 말자! 

JSON은 "속성(Key) : 값(Value)" 가 함께 쌍을 이루어 표현되는데, 예를 들어 과일 이름 중 사과를 JSON으로 표현하고 싶다면, "과일 이름" : "사과"라고 쓰면 된다. 일반 문자열일 때는 큰따옴표를 쓰지만, 숫자를 넣을 때는 연산을 위해 큰따옴표를 넣지 않는다. 이외 JSON 표현 방법에는 여러 가지 규칙이 있다. 







EndPoint & Method


Papago API의 EndPoint (네이버클라우드플랫폼 파파고API 활용하기, 2019)



이제 Request를 보내기 위한 세팅이 끝났다. 그럼 세팅한 Request를 어디로 보내야 번역된 문장을 볼 수 있는 것일까? 바로 파파고 API에서 정의해 놓은 EndPoint* 로 보내면 된다. 



*EndPoint란 API가 서버에서 자원(Resource) 접근할 수 있도록 하는 URL이다. 즉, 네이버가 다년간 축적해 놓은 데이터와 다국어 언어 처리를 할 수 있도록 마련한 곳으로 Request를 보내는 URL. 즉, 주소이다. 



다시 말해, 번역할 텍스트를 Body에 담는 POST 방식의 Method로 네이버가 정의해 놓은 EndPoint URL로 보내면 된다. 그러면 JSON으로 결과값(번역된 텍스트)을 얻을 수 있다. 








파파고(Papago) 번역 API를 사용해보자.

아래 이미지는 실제 Python에서 파파고 번역 API를 사용한 모습이다. 하나씩 뜯어보자. 

Papago API의 Python 적용 모습 (네이버클라우드플랫폼 파파고API 활용하기, 2019)



1번: Request Header 부분이다. 네이버 클라우드 플랫폼 AI에서 어플리케이션 등록 시 얻은 클라이언트 ID와 클라이언트 시크릿 인증키값과 아래로 EndPoint 주소가 보인다. 

2번: 번역할 텍스트를 먼저 정의해놓았다. 

3번: Request Body 부분으로 source, target, text를 JSON 형태로 설정하였고, 2번에서 정의해 놓은 텍스트를 가져왔다.

4번: 네이버가 지정해 놓은 언어코드를 주석 처리하였다.

5번: 1번의 header 값을 정의해놓았다. 

6번: 텍스트의 번역 모습이 보인다. 3번에서 targer 언어를 zn-CN 즉 중국어 간체로 설정했기 때문에 2번의 텍스트가 중국어 간체로 번역된 모습을 볼 수 있다. 



파파고 API는 RESTful API로 제공하기 때문에 Python, Node.js, Java, php 등 어떤 프로그램을 사용하던지 해당 구현 로직은 같다.




그럼 내 서비스에 파파고(Papago) 번역 서비스, 어떻게 적용시킬 수 있을까?

실제로 파파고 API는 네이버 Clova와 LINE 메신저 번역 서비스에서 사용되고 있다. 네이버 Clova서비스에서는 음성을 텍스트로 전환하여, 파파고에서 번역하여, 다시 음성으로 전환하여 결과를 알려주고, LINE 메신저 번역 서비스에서는 번역봇을 채팅방에서 추가하여 텍스트를 실시간으로 번역해주고 있다. 이렇게 http 통신만 가능하다면, 모든 서비스에 파파고 API를 적용시킬 수 있다.


이렇게 http 통신(단방향 통신)을 하고, 실시간 번역이 필요한 서비스라면 파파고를 활용할 수 있을 것 같다. 한국어 기반 서비스이고, 문맥에 따른 번역을 하기 때문에 한국 시장을 타겟으로 해외의 콘텐츠를 보여주는 서비스에 적용시키면 적합할 듯 하다. 하지만 양방향 통신을 하는 경우에는 적용하기 어려워 보인다. 때문에 LINE 메신저도 카카오톡처럼 소켓통신(양방향통신)을 하는지는 모르겠으나, 단방 향통신을 하는 파파고 API를 LINE 메신저 자체에 바로 넣지 않고 챗봇을 통해 서비스를 제공하는 것 같다.  








참고자료


매거진의 이전글 애자일, 워터폴, 스크럼, 칸반.... 이게 다 뭐람?

작품 선택

키워드 선택 0 / 3 0

댓글여부

afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari