본문 바로가기
코딩/Python

파이썬으로 공공데이터포털(data.go.kr) 오픈 API 활용하기 예제/국세청 사업자등록 상태 조회

by 나홀로코더 2021. 12. 29.
반응형

목차

1. 주제 소개

2. API 활용신청하고 포털에서 API 사용해 보기

3. 파이썬으로 API 활용하기


 

1. 주제 소개

 

정부에서는 공공데이터의 제공 및 이용 활성화에 관한 법률 제21조에 따라 공공데이터포털을 운영하고 있다.

 

공공데이터포털은 공공기관이 생성 또는 취득하여 관리하고 있는 공공데이터를 한 곳에서 제공하는 통합 창구이며, 국민이 쉽고 편리하게 공공데이터를 이용할 수 있도록 파일데이터, 오픈API, 시각화 등 다양한 방식으로 제공하고 있다고 한다.

 

포털에 들어가 보면 정말 많은 자료들이 있는데, 크게 보면 엑셀이나 CSV 파일 등을 직접 다운로드할 수도 있게 해주는 파일데이터와, 앱 개발 등에 활용할 수 있는 오픈 API로 구분된다.

 

API는 Application Programming Interface의 약자인데, 여기에서는 간단한 HTTP 요청으로 필요한 데이터를 제공받을 수 있도록 해주는 것이라고 이해하면 되겠다.

 

예를 들면 공공데이터에 해당하는 지하철 도착 정보나 날씨 정보 등을 가지고 앱을 개발해 서비스를 제공하는 경우가 있는데, 그러한 서비스를 쉽게 개발할 수 있는 환경을 제공해주는 것이다.

 

여기에서는 국세청의 사업자등록 상태 조회 서비스를 예제로 공공데이터포털에서 제공하는 오픈 API를 활용하는 방법을 소개하려 한다.

 

해당 서비스는 원래 국세청 홈페이지에서 사업자등록번호를 입력하여 휴폐업 여부 등을 확인할 수 있도록 해주는 웹서비스였는데, 올 여름부터 오픈 API로 제공되기 시작한 것이다.

 

반응형

 

2. API 활용신청 하고 포털에서 API 사용해 보기

 

공공데이터포털에서 파일데이터 다운로드는 로그인 없이도 할 수 있지만, 오픈 API를 사용하려면 로그인을 해야 한다.

 

먼저 회원가입을 하고, 로그인을 하자. 네이버나 카카오 계정을 이용하면 간편하게 가입하고 로그인도 편하게 할 수 있다.

 

로그인 화면

로그인을 마쳤다면 이번 예제에서 사용해볼 오픈 API를 찾아 들어가 보자. 메인 화면에서 "국세청 사업자"를 검색한다.

 

검색화면

 

그러면 많은 검색 결과가 나오는데, 그 중 화면 가운데쯤 나오는 오픈 API 검색 결과를 보면 제일 위에 우리가 사용해보려는 API가 나타난다.

 

검색결과

 

클릭해보면 해당 API에 대한 오픈API 상세 화면이 나타난다. 내용을 살펴보기 전에 먼저 "활용신청"을 하자. 신청 방법은 따로 설명하지 않아도 될 만큼 간단하여 생략하겠다.

 

오픈API 상세 화면

 

국세청 사업자등록 API는 자동 승인이 되기 때문에, 신청만 하면 바로 마이페이지에서 "활용" 건으로 분류되어 표시가 된다. 해당 화면에서 국세청 사업자등록 API를 클릭해보자.

 

신청결과

 

 

반응형

 

그러면 "개발계정 상세보기" 화면이 나타난다. 파이썬으로 API 활용 스크립트를 만들어보기 전에, 먼저 여기에서 API를 사용해볼 것이다.

 

화면을 위에서부터 보면 "기본정보", "서비스정보", "활용신청 상세기능정보"가 나오고, 그 밑 화면 중간쯤에는 아래와 같이 API를 실행해볼 수 있도록 되어 있다.

 

API 실행 화면

 

그중 우리는 "사업자등록 상태조회 API"를 사용해 볼 것이니 해당 녹색 박스를 눌러보자. 그러면 뭔가 많은 내용이 표시되는데, 복잡해 보여도 긴장할 것 없다. 

 

API 실행 화면

 

우리가 할 것은 위의 두 그림에서 "인증키 설정"을 눌러 인증키를 입력하고, "OpenAPI 실행 준비"를 눌러 조회할 사업자등록번호를 입력하는 것이 전부이다.

 

먼저 인증키 설정을 한다. 인증키는 API를 이용해 HTTP 요청을 보낼 때 포함하여야 하는 본인의 고유 키인데, 현재 보고 있는 페이지의 "서비스정보" 부분에서 찾아볼 수 있다. 아래 그림의 하단에 있는 "일반 인증키"가 우리가 사용할 인증키이다.

 

 

위 인증키 2개 가운데 아랫것을 클립보드에 복사한 뒤에, 다시 아래로 내려가 "인증키 설정"을 눌러 복사한 인증키를 붙여넣고 "설정"을 눌러주면 아래 그림처럼 인증키 설정이 완료된다. "닫기"를 눌러 빠져나오자.

 

인증키 설정 화면

 

이제 API를 사용할 준비가 다 됐다. 다시 "사업자등록 상태조회 API"로 돌아와 "OpenAPI 실행 준비" 버튼을 누르자. 그러면 아래에 있던 검은 박스가 하얗게 바뀌면서 편집이 가능해진다.

 

기본값으로 입력되어 있는 "0000000000"을 지우고, 조회하려는 사업자등록번호를 입력한다. 그런 다음 아래에 있는 파란 "OpenAPI"호출" 버튼을 눌러준다.

 

여러 사업자번호를 동시에 조회하려면 위에서 API를 호출할 때 사업자번호 여러 개를 쉼표로 구분해서 리스트 형태로 넘겨주면 된다.

 

API 호출 화면

 

버튼을 누르면 그 아래쪽으로 아래와 같이 호출 결과가 표시된다. 호출 결과는 우측 아래에 있다. 예제에는 존재하지 않는 사업자번호를 넣었기 때문에 등록되지 않은 사업자등록번호라고 회신이 되었다.

 

API 호출 결과

 

이제, 파이썬 스크립트를 작성하여 공공데이터포털에 접속하지 않고도 API를 호출할 수 있도록 해볼 것이다.

 

넘어가기 전에 위의 화면에서 Curl에 표시된 내용을 클립보드에 복사해 두자.

 

반응형

 

(번외) Curl로 API 호출해보기

 

위에서 Curl에 표시된 내용을 복사했는데, 이것은 파이썬에서 곧바로 사용할 수는 없다.

 

curl은 커맨드라인에서 사용하는 데이터 전송 툴로서, 여기에서는 파이썬에서 requests 라이브러리를 이용해 HTTP 요청을 보내듯, 커맨드라인에서 HTTP 요청을 보낼 수 있게 해주는 툴이라고 생각하면 되겠다. 위에서 복사한 것은 curl 커맨드이다.

 

curl은 다양한 운영체제에서 사용이 가능하고, 리눅스의 경우 따로 설치하지 않아도 기본적으로 curl을 사용할 수 있는데, 필자는 스마트폰에 리눅스 커맨드라인 환경을 제공해주는 termux를 설치해 사용 중이므로 재미 삼아 termux에서도 예제의 API 호출이 가능하다는 것을 소개한다.

 

curl을 사용할 수 있는 환경에서는 아래와 같이 위에서 복사한 코드를 복사해 커맨드라인에 입력하기만 하면 API가 호출되어 사업자등록 상태가 조회된다.

 

~ $ curl -X POST "https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=[본인의 서비스키 입력] -H "Content-Type: application/json" -d "{ \"b_no\": [ \"1234567890\" ]}"

{"request_cnt":1,"status_code":"OK","data":[{"b_no":"1234567890","b_stt":"","b_stt_cd":"","tax_type":"국세청에 등록되지 않은 사업자등록번호입니다.","tax_type_cd":"","end_dt":"","utcc_yn":"","tax_type_change_dt":"","invoice_apply_dt":""}]}

 

스마트폰에서 리눅스 커맨드라인 환경을 사용하는 방법이 궁금하다면 아래 게시글을 참조하기 바란다.

 

스마트폰(태블릿)에서 Git 사용하기/termux, github

 

3. 파이썬으로 API 활용하기

 

파이썬에서 예제의 API를 호출할 때에는 requests 라이브러리를 사용하면 된다. 위에서 본 두 가지 방법에 비하면 조금은 더 복잡하지만, 코드 몇 줄이면 된다.

 

requests 라이브러리를 이용해 API를 호출할 때에도 위에서 본 것과 같은 내용을 형식만 달리 해서 작성하면 될 텐데, 이를 정말 편리하게 할 수 있는 도구가 있다.

 

curlconverter 홈페이지(https://curlconverter.com/)에 접속해 curl command 박스에 위에서 복사한 curl 커맨드를 붙여 넣기만 하면 자동으로 파이썬 requests 코드로 변환을 해준다.

 

curl converter

 

그 결과물을 가져다 쓰면 되는데, 왜인지 모르겠지만 코드를 그대로 붙여 넣으면 오류(syntax error)가 난다.

 

필자는 들여쓰기된 부분들을 제거하고 탭 키를 이용해 들여 쓰기를 다시 하니 오류가 해결되었다.

 

import requests

headers = {
    'accept': 'application/json',
    'Authorization': [본인의 인증키],
    'Content-Type': 'application/json',
	}

params = (
    ('serviceKey', [본인의 인증키]),
	)

data = '{ "b_no": [ "1234567890" ]}'

response = requests.post('https://api.odcloud.kr/api/nts-businessman/v1/status', headers=headers, params=params, data=data)

 

위의 코드 중 맨 아랫줄이 API를 호출하는 코드인데, 코드가 API 호출 결과를 response 변수에 저장하는 데 그쳤으므로 아래와 같이 코드를 추가해서 회신 결과를 출력해보자.

 

그냥 print 함수를 사용해도 되지만, 좀더 예쁘게 출력하기 위해서 pprint를 import 해서 사용하였다.

 

import pprint

pprint.pprint(response.json())

 

위 코드를 추가하고 스크립트를 실행해보면 앞에서 본 것과 똑같은 결과가 출력된다.

 

출력된 결과를 보면 전체는 딕셔너리 형태이고, 그중 키가 data인 부분(사업자등록 상태)의 값은 딕셔너리의 리스트 형태일 것이다. 

 

따라서 회신된 내용 중에 일부분만 출력해 보고 싶을 때는 아래와 같이 키값과 색인 번호를 이용해 원하는 부분만 출력할 수가 있다.

 

result = response.json()["data"] # data 부분(사업자등록 상태)만 떼어내서 result 변수로 저장

print(result[0]["b_stt"]) # data 부분의 첫번째 항목에서 b_stt 부분만 출력
반응형

댓글