본문 바로가기

케이스 분석

번역 API를 활용하여 카톡 메세지 번역하기

 

저도 같은 생각입니다

 

 

 

  트위터는 google translator를 활용해 번역 서비스를 지원한다. 트위터에 탑재 되어 있는 번역 기능은 언어가 다른 사람들끼리 소통하는 데 매우 유용하며, 사람과 사람을 이어주는 SNS의 기능을 더 강화시켜 준다.

 

(k-pop 팬들이 죽어가는 트위터를 살렸다는 말이 있듯이, 실제로 전세계의 K-pop 팬들은 트위터에서 활동하며 번역 서비스를 통해 소통하기도 하고, 또 우스꽝스러운 번역으로 밈도 엄청나게 만들어 낸다. 해투만 뺑뺑 도는 아이돌을 좋아하는 바수니라면 트위터 번역 서비스는 필수^^!).    

 

  이 같은 트위터의 번역 기능에 착안하여, 카카오톡 서비스도 프로덕트 내부적으로 번역 기능이 있으면 좋겠다는 생각이 들었다. 나는 채식 오픈카톡방에 있는데, 한국 내 채식 음식점이나 정보가 많이 없다보니 채식을 하는 외국인들도 상당수 들어와 있다. 하지만 다들 한국어로 소통을 하기 때문에 외국인들이 소외가 될 때도 많고, 또 외국인들이 질문을 하더라도, 외국어를 이해하지 못한 한국인들이 필요한 정보를 주지 못하는 경우도 많다. 

 

  이처럼 한국에 사는 외국인이라면 (거의 무조건) 카톡을 써야 한다는 점에서, 프로덕트 내 번역 서비스가 있다면, 소통과 네트워킹이라는 SNS 기능이 만나 시너지 효과가 날 것이라 생각한다. 물론 유저가 문장을 copy & paste 해서 다른 번역 서비스를 활용해도 되겠지만, 귀찮은 건 둘째치고, 파파고나 구글을 쓰지 카카오i 서비스는 안 쓸 것 같다. 카카오의 AI 번영과 홍보를 위해서라도 카카오톡에 번역 기능을 탑재하면 좋을 것이다. 

 

  부디 개발자들이 화가 나지 않기를 희망하며... 과연 내 기획이 가능할지 한번 API 문서를 살펴봐야겠다. 

 


 

  번역 API가 제공하는 기능은 1) 문장 번역과 2) 언어 감지이다. 문장을 read & write 할 때 모두 편리하게 해주는 기능이라 할 수 있다. 총 18개의 언어를 지원하고, 영어, 일본어, 중국어는 한국어와 양쪽 번역이 가능하다. 카카오 번역 API는 REST API만 지원이 되는데, REST API란 HTTP 형식으로 자원에 접근하고, 요청하는 API 방식을 뜻한다.    

  

 

 일단 내가 구상해본 방식은 1. 문장을 번역해서(write) 보내고 싶을 경우,

 

  1) 아래 그림처럼 +서랍으로 들어가서 번역 서비스로 접속한다. 카카오 i에서 번역 후 "번역 전송하기" 버튼을 누르면 번역된 문장이 카카오 톡 메세지로 바로 보내진다.

 

 

 

 

 

 

2) 또 다른 방법으로 환경설정에서 "번역 간편모드 사용"을 추가한 뒤 채팅 입력창 옆에 번역 버튼을 생성하여 바로 연결한다. 

 

 

 

 

 

2. 받은 메세지를 번역(read)하고 싶을 때는, 말풍선을 길게 눌러 번역 버튼을 생성해 번역 서비스로 연결한다. 

 

 

 

 


그럼 본격적으로, "문장 번역" API부터 살펴보자.. 

 

카카오에 따르면, 

문장 번역 요청한 문장을 다양한 언어로 번역하는 API로써 입력된 텍스트를 기반으로 번역 텍스트 결과를 전달합니다. 한국어와 타언어간 번역외에도 타언어간 번역도 지원됩니다.

 

또, 

"app_key Authorization 헤더에 담아 GET 또는 POST로 요청합니다. 요청이 성공하면 JSON 객체로 번역 결과 목록을 전달합니다."

 

  • 헤더: 서버에 요청을 보낼 때 요청에 대한 정보를 담아 서버에 보내는데, 이러한 정보를 HTTP 메세지라고 하며, 시작줄, 헤더, 본문으로 이루어져 있다. 요청 헤더에 Authorization 헤더가 있다. 

 

 

 

 

출처: goddaehee.tistory.com/169

 

  • Authorization: 유저의 궁극적 목표는 자원(resource)에 접근하는 것인데, 이를 위해서는 인증(authentication)과 권한(authorization)의 과정을 거쳐야 한다. Authentication이 본인의 신분을 증명하고 신분증을 받는 것과 같다면(아이디와 비밀번호를 치고 로그인 하는 것도 예이다), Authorization은 신분증을 받은 후 특정 행동(얻고 싶은 정보를 얻고, 원하는 곳에 가는 것)을 할 수 있도록 허락하는 것을 의미한다. 보통 인증 후 권한이 부여된다. 

     인증과 권한이 중요한 이유는 이를 통해 등록된 유저만 API 요청을 허락하여 데이터를 보호하고, 우리의 기능을 누가  요청을 하는 지 확인할 수 있으며, 유저에 따라 다른 수준의 허락을 적용할 수 있기 때문이다.  

 

 

 

 

  • app_key:  Authrization에는 여러가지 방법이 있는데, API key도 그러한 방법 중 하나이다. API key는 주로 요청 URL이나 요청 헤더에 포함되는 긴 문자열이다.  API key는 주로 누가 API를 호출하는 지 식별하는 역할을 한다. 

 

 

 

 

 

출처: 

idratherbewriting.com/learnapidoc/docapis_more_about_authorization.html

hanee24.github.io/2018/04/21/authentication-authorization/

https://yuda.dev/250

 

 

  • GET: GET은 서버로부터 정보를 조회하기 위한 메소드이다. 즉, 서버에서 데이터를 가져와서 보여주는 용도이기 때문에 서버의 값이나 상태 등을 바꾸지 않는다.  GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고 쿼리스트링(Query String)에 담아 보낸다. 쿼리스트링이란 사용자가 입력 데이터를 전달하는 방법 중 하나로, url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것을 말한다. 쿼리 스트링은 URL의 끝에 ?와 함께 이름(key)과 값(value)으로 쌍을 이루는 요청 파라미터를 의미한다.
  • - 예: www.velog.com?id=velog&pass=1234: key값은 id, password이고 value는 velog와 1234이다. 

 

 

  • POST: 반면 POST는 서버의 자원을 생성, 변경하기 위한 메소드이다. 따라서 GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송한다. HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있기 때문에  POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있다.

출처: 

hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/

velog.io/@magnoliarfsit/ReDjango-3.-GET-POST-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B0%8F-api-%EC%84%A4%EA%B3%84

 

 

  • Json 객체: Javascript Object Notion의 줄임말로, 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 DATA 교환 형식이다. Javascript에서 객체를 만들 때 사용하는 표현식을 의미한다. 통신 방법이나 프로그래밍 언어가 아니라 데이터를 표현하는 방법이다. (자바스크립트의 객체처럼 코딩 줄이 간결하고 짧다.)   

 

 


"app_key Authorization 헤더에 담아 GET 또는 POST로 요청합니다. 요청이 성공하면 JSON 객체로 번역 결과 목록을 전달합니다."

  따라서, 위 문장을 다시 한 번 정리해보면, 번역 기능을 쓰기 위해서는 카카오 번역 API 문서의 규칙을 따라, 헤더 줄에 우리가 누군지를 알려주는(Authorization) 문자열(app_key)을 주면서, 정보를 조회(GET)하거나 변경하는(POST) 요청을 담아야 한다. 만약 요청이 성공적이라면, JSON 객체로 표현된 데이터를 전달 받을 것이다. 


 

요청(request) 예시 

 

 

 

API 문서 뜻:
dapi.kakao.com(도메인 주소) 서버에게,
얘는 app_key라는 애니까 한 번 확인 해보고, 들여보내서 문장 번역 정보 좀 보내줄래?

 

 

 

 

API 문서 뜻: 
api.kakao.com(도메인 주소) 서버에게,
얘는 app_key라는 애니까 한 번 확인해보고, 정보 줄테니까 받아서 번역 정보 변경좀 해줄래? 우리가 주는 데이터 형태는 application/x-www-form-urlencoded(아무것도 안 쓰면 자동으로 지정되는 거)야.  

 

*Content-type: POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 합니다. 데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추합니다. 만약, 알 수 없는 경우에는 application/octet-stream로 요청을 처리합니다 

 

출처: hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/

 

 

 

 

 

 

 

 

샘플 

 

 

dapi.kakao.com(도메인 주소) 서버에게, 
얘는 KKKKKKKKK라는 애니까 한 번 확인 해보고, 들여보내서 문장 번역 정보 좀 보내줄래? 한국말에서 영어로 번역해서 보내줘. "지난해 3월 ~"이 물어보고 싶은 거야. 

 

 

 

 

dapi.kakao.com(도메인 주소) 서버에게, 
얘는 KEY 라는 애니까 한 번 확인 해보고, 정보 줄테니까 받아서 번역 정보 변경 좀 해줄래? 한국말에서 영어로 보내줘. "지난해 3월 ~"이 물어보고 싶은 거야. 

 

 

 

정보 찾았어 (200)
요청한 번역한 텍스트 여깄다: KakaoTalk orders, which opened in March last year,~

 

 

 


 

  "언어 감지하기" API도 "문자 번역" API 방식과 유사하다. 다만, 언어를 감지한 결과의 신뢰도가 추가적으로 전달된다..  

 

app_key를 Authroization 헤더에 담아 GET 또는 POST로 요청합니다. 요청이 성공하면 JSON 객체로 감지된 언어와 결과의 신뢰도를 전달합니다.

 

 

 

 

 

 

  예를 들어, 위와 같은 응답(response)을 보았을 때, 영어의 신뢰도가 99%로 매우 높고, 나머지 독일어와 스페인어가 각각 0.001%에 가까운 아주 낮은 신뢰도를 보이기 때문에, 입력 언어를 영어로 인지한다. 

 

 

 


    물론 카톡 내부에 번역 기능을 탑재하는 것이 API 말고도 개발적으로 할 일이 많겠지만(뭐가 더 있을까? 프론트엔드 + 데이터에서 테이블 수정???), 그래도 이 정도면 개발자가 화낼 정도는 아니지 않을까?