상세 컨텐츠

본문 제목

Db2 SQL로 오픈 API 호출하기

Db2 for i

by 아이구르미 2023. 3. 11. 19:29

본문

오픈 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입니다.

1. 네이버 오픈API 를 사용하기 위한 준비

회원가입 -> 애플리케이션 등록 -> 클라이언트 아이디와 클라이언트 시크릿 확인

https://developers.naver.com/docs/common/openapiguide/appregister.md

 

사전 준비 사항 - Open API 가이드

사전 준비 사항 네이버 오픈API를 사용하려면 먼저 네이버 개발자 센터에서 애플리케이션을 등록하고 클라이언트 아이디와 클라이언트 시크릿을 발급받아야 합니다. 클라이언트 아이디와 클라

developers.naver.com

 

2. Db2 에서 사용할 주요 함수의 이해

HTTP 함수

  • HTTP 요청을 하는 데 사용되며, 웹 서비스를 사용합니다. 
  • URL 매개 변수는 http: 와 https: URL을 지원합니다. 
  • HTTP 함수는 요청시 사용할 Method와 데이터의 유형 및 크기에 따라 선택하면 됩니다. (*전체 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

 

3. 오픈API를 호출하기 위해 필요한 요소

HTTP 함수로 오픈API를 호출하기 위해서는 다음과 같은 매개변수가 필요합니다.

  • URL : http 또는 https 로 시작하는 오픈API 의 URL
  • Header : HTTP 호출이 사용하는 헤더값으로 헤더값에 네이버 오픈API 사전 준비에서 발급받은 클라이언트 아이디와 클라이언트 시크릿을 포함해야 합니다. 또한, HTTP_POST 함수의 경우 Header 값을 JSON 형태로 전달해야 합니다. 
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')
  • Body : HTTP Post Request 호출시 API 요청에 사용할 입력값을 포함해야 함. 파파고 API의 경우 source, target, text 3개의 입력값이 필요합니다.
    • 한국어를 영어로 번역하고 싶은 경우 : source=ko&target=en&text=<번역하고 싶은 원문>
    • 예) source=ko&target=en&text=지금 몇시에요?

 

4. 오픈API를 활용해서 Db2 테이블의 특정 컬럼값(한글)을 영어로 번역하는 SQL

아래와 같은 테이블의 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를 사용하는 방식은 거의 유사하므로 이 방식을 이용해서 다양하게 활용해볼 수 있겠습니다.

관련글 더보기

댓글 영역