오픈 API란?
오픈 API(Open Application Programming Interface, Open API, 공개 API) 또는 공개 API는 개발자라면 누구나 사용할 수 있도록 공개된 API를 말하며, 개발자에게 사유 응용 소프트웨어나 웹 서비스의 프로그래밍 적인 권한을 제공한다.반대말은 프라이빗 API(Private API)다. 쉽게 말하면, "하나의 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 프로그래밍 인터페이스가 오픈 API다"라고 정의할 수 있다.
네이버 지도, 구글맵, 오픈스트리트맵 등이 대표적인 예이다. 지도 서비스 및 다양한 서비스들에서 시도되고 있으며 누구나 접근하여 사용할 수 있다는 장점이 있다. 메타블로그도 오픈 API를 사용하여 만든 예시이다. 최근에 코로나 사태로 라이브코로나, 코로나 맵 등의 서비스가 생겼는데, 네이버클라우드플랫폼의 API 지원을 받고 있다. (출처: 위키백과)
각종 기관에서 제공하는 오픈 API를 활용하는 예제는 대부분 Java로 되어 있습니다만, SQL 로도 오픈API를 손쉽게 활용할 수가 있습니다. 이번 글에서는 Db2에 있는 데이터를 입력값으로 해서 오픈API를 호출해 결과값을 가져오는 과정을 정리해보겠습니다.
테스트에 사용할 오픈API는 네이버의 파파고 번역 API입니다.
회원가입 -> 애플리케이션 등록 -> 클라이언트 아이디와 클라이언트 시크릿 확인
https://developers.naver.com/docs/common/openapiguide/appregister.md
사전 준비 사항 - Open API 가이드
사전 준비 사항 네이버 오픈API를 사용하려면 먼저 네이버 개발자 센터에서 애플리케이션을 등록하고 클라이언트 아이디와 클라이언트 시크릿을 발급받아야 합니다. 클라이언트 아이디와 클라
developers.naver.com
HTTP 함수
이번 예제에서는 HTTP_POST 함수를 사용할 것입니다.
https://www.ibm.com/docs/en/i/7.4?topic=functions-http-post
HTTP_POST
The HTTP_POST scalar function updates a text-based resource under the specified URL through an HTTP POST request. url An expression that returns a built-in character string or graphic string data type that specifies the URL of the resource being accessed.
www.ibm.com
JSON 함수
JSON 데이터를 파싱(Parsing)해서 Db2 테이블 형태로 변환하거나, Db2 테이블을 JSON으로 변환할 때 사용합니다.
이번 예제에서는 JSON_VALUE 함수와 JSON_OBJECT 함수를 사용할 것입니다.
https://www.ibm.com/docs/en/i/7.4?topic=programming-working-json-data
Db2 for i SQL: Working with JSON data
Working with JSON data Db2 for i can consume and generate formatted JSON data. JSON concepts JSON (JavaScript Object Notation) is a popular format for interchanging information. It has a simple structure and is easily read by humans and machines. Due to it
www.ibm.com
https://www.ibm.com/docs/en/i/7.4?topic=functions-json-object
JSON_OBJECT
The JSON_OBJECT function generates a JSON object using the specified key:value pairs. If no key:value pairs are provided, an empty object is returned. key-name-expression The name of the JSON key. The name must not be null. When using the colon form for de
www.ibm.com
HTTP 함수로 오픈API를 호출하기 위해서는 다음과 같은 매개변수가 필요합니다.
JSON_OBJECT(
'header' value 'Content-Type, application/x-www-form-urlencoded',
'header' value 'X-Naver-Client-Id, <클라이언트 아이디>',
'header' value 'X-Naver-Client-Secret, <클라이언트 시크릿>',
'sslTolerate' value 'true')
아래와 같은 테이블의 COLUMN2 를 영어로 번역해서 보여주도록 해봤습니다.
COLUMN1 | COLUMN2 |
1 | 사과 |
2 | 수박 |
오픈API 호출 SQL (결과값 그대로 가져오기)
SELECT
column1,
column2,
QSYS2.HTTP_POST(
'https://openapi.naver.com/v1/papago/n2mt',
cast('source=ko&target=en&text=' concat column2 as clob(10k)),
cast(JSON_OBJECT(
'header' value 'Content-Type, application/x-www-form-urlencoded',
'header' value 'X-Naver-Client-Id, <클라이언트 아이디>',
'header' value 'X-Naver-Client-Secret, <클라이언트 시크릿>',
'sslTolerate' value 'true') as clob(1k))) ENGLISH_NAME
FROM myschema.table1;
결과값은 JSON 형태로 많은 내용이 포함되어 있습니다.
{"message":{"result":{"srcLangType":"ko","tarLangType":"en","translatedText":"apple","engineType":"PRETRANS"},"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0"}} |
오픈API 호출 SQL (결과값 JSON에서 원하는 값만 추출)
- 이 중에서 원하는 값인 translatedText 만 가져오기 위해 JSON_VALUE 함수를 다시 적용했습니다.
SELECT
column1,
column2,
JSON_VALUE(
QSYS2.HTTP_POST(
'https://openapi.naver.com/v1/papago/n2mt',
cast('source=ko&target=en&text=' concat column2 as clob(10k)),
cast(json_object(
'header' value 'Content-Type, application/x-www-form-urlencoded',
'header' value 'X-Naver-Client-Id, <클라이언트 아이디>',
'header' value 'X-Naver-Client-Secret, <클라이언트 시크릿>',
'sslTolerate' value 'true') as clob(1k))),
'$.message.result.translatedText'
RETURNING VARCHAR(75) CCSID 933) ENGLISH_NAME
FROM myschema.table1;
COLUMN1 | COLUMN2 | ENGLISH_NAME |
1 | 사과 | apple |
2 | 수박 | Watermelon |
JSON_VALUE로 원하는 값만 간단히 가져왔습니다.
지금까지 Db2 SQL 함수로 네이버 파파고 오픈API를 이용해서 번역한 결과를 가져오는 방법을 정리해보았습니다.
기관마다 오픈API를 사용하는 방식은 거의 유사하므로 이 방식을 이용해서 다양하게 활용해볼 수 있겠습니다.
유니코드(Unicode) - Part 1 (1) | 2023.05.11 |
---|---|
Db2 for i 클라우드, Pub400.com (무료) (0) | 2023.04.10 |
쿼리 성능 최적화를 위한 팁 (ft. 통계정보 사용이 어려울 때) (0) | 2023.02.13 |
SQL OLAP 함수로 데이터 분석하기 (0) | 2023.01.20 |
SQL로 REST API 서비스 만들기 (1) | 2023.01.04 |
댓글 영역