공공데이터 API는 데이터가 아니라 조건표로 고른다

공공데이터포털에서 데이터를 고를 때, 무료인지 자동승인인지만 보고 신청하지 않으셨나요?

저도 그랬습니다. 비용 무료, 심의 자동승인, 하루 1만 건. 세 줄이 다 초록불이라 바로 신청했어요. 그런데 막상 화면을 만들려고 조건표를 열어보니 거르고 싶은 항목이 거기 없었습니다. 다 만들고 나서야 지역 조건이 없다는 걸 알았고, 걸러내는 로직을 통째로 다시 짰습니다.

공공데이터 신청하는 법을 알려주는 글은 많은데, 신청하기 전에 이 데이터로 도구가 되는지 판정하는 기준을 말하는 글은 못 봤습니다. 그래서 제가 밟은 순서를 판정표로 정리했습니다. 이용 조건 세 줄이 아니라 조건표 안쪽을 여는 네 가지 질문입니다.

공공데이터로 뭔가 만들어보려는 비개발자를 위해 씁니다.

공공데이터포털 상세 페이지의 비용·심의유형·신청 가능 트래픽 세 줄
이용 조건 세 줄 — 신청이 되느냐만 말한다

이용 조건 세 줄은 통과 조건이지 선택 기준이 아니다

상세 페이지에 있는 비용·심의유형·트래픽은 신청이 되느냐를 말합니다. 만들 수 있느냐는 다른 층입니다. 세 줄이 다 초록불이어도 조건표가 비어 있으면 도구는 안 나옵니다.

둘을 섞으면 신청 5분 뒤에 시작해서 하루를 버립니다. 저는 그 하루를 버렸습니다.

먼저 정리 — 이 글은 데이터를 추천하지 않습니다. 어떤 데이터든 신청 전에 같은 네 질문을 던지는 방법을 말합니다.

신청 전에 던지는 네 질문

첫 질문은 범위를 정합니다. 둘째는 설계를 정합니다. 셋째는 공수를 정합니다. 넷째는 포기할 것을 정합니다.

네 개가 각각 다른 걸 결정하기 때문에 순서를 바꾸면 헛수고가 생깁니다. 셋째부터 보면 만들 수 없는 데이터에 시간을 씁니다.

활용명세에 나열된 조건 코드 목록. 나이·소득·가구 형태는 있고 지역은 없다
조건표 실물 — 나이·소득·가구는 있는데 사는 곳이 없다

질문 1 — 거르고 싶은 항목이 조건표에 있는가

가장 먼저 볼 것이고, 가장 많이 빠뜨리는 것입니다. 활용명세에서 응답 필드를 열어 내가 화면에서 입력받을 항목이 실제로 있는지 확인합니다.

제가 쓴 데이터는 나이·성별·소득 구간·가구 형태가 다 있었습니다. 그런데 사는 곳이 없었어요. 사람들이 정부 혜택을 찾을 때 가장 먼저 넣는 조건이 지역인데 그게 없습니다.

상세 페이지의 활용명세에 스키마가 공개돼 있습니다. 신청 없이도 필드 이름과 설명을 볼 수 있어요. 값의 모양은 승인 후에나 보입니다.

기관 이름으로 지역을 대신 판단하는 우회

없는 항목을 다른 필드로 대신 판단해야 합니다. 저는 소관기관 이름에 내 동네 이름이 들어가는지로 지역을 판단했는데, 이건 우회지 해결이 아닙니다. 뒤에서 이 우회가 어떻게 새는지 적었습니다.

질문 2 — 서버가 조건 검색을 실제로 해주는가

문서에 파라미터가 적혀 있는 것과 그게 먹는 것은 다릅니다. 신청 전에는 못 부르니, 승인 직후 제일 먼저 이걸 확인합니다.

확인법은 간단합니다. 조건을 하나 붙여 부르고 응답의 총 건수를 봅니다. 조건 없이 부른 값과 같으면 무시된 겁니다.

왜 이게 무서운가

에러가 안 납니다. 상태 코드도 200이고 형식도 정상입니다. 저는 다섯 가지 조합을 바꿔가며 붙였는데 총 건수가 한 번도 안 움직였고, 한참 동안 제 문법을 의심했습니다.

판정 한 줄 — 조건 검색이 안 되는 데이터는 못 쓰는 데이터가 아닙니다. 전량을 받아 파일로 두는 설계로 가면 됩니다. 다만 그 결정을 화면을 만들기 전에 해야 손해가 없습니다.

질문 3 — 검색 한 번에 몇 번을 부르는가

이 숫자가 하루 한도와 만나는 지점이 도구의 수명입니다. 나눗셈 한 번이면 나옵니다.

확인할 것내 경우
엔드포인트 수2개 (목록 + 조건)
전체 건수 ÷ 한 쪽 크기10,968 ÷ 1,000 = 11쪽
검색 1회당 호출22번
개발계정 하루 한도10,000
버티는 검색 횟수454회

표에서 이상한 건 마지막 줄입니다. 454라는 값의 단위가 방문자가 아니라 버튼을 누른 횟수거든요. 한 사람이 조건을 세 번 바꿔 누르면 세 번으로 셉니다. 그래서 체감보다 훨씬 빨리 닿습니다.

질문 4 — 필드 값이 사람이 읽는 모양인가

스키마에 필드가 있어도 값이 이상하면 거기서 시간이 갑니다. 실제 응답 몇 건을 눈으로 보는 게 문서 열 장보다 빠릅니다.

제가 쓴 데이터는 대상 구분 값이 여러 개를 기호로 이어 붙인 모양이었습니다. 그 필드를 안 보고 넘기면 기업 대상 사업이 개인 결과에 섞입니다. 그리고 조건 묶음마다 "해당사항없음"이라는 값이 따로 있어서, 그걸 어떻게 볼지 정하지 않으면 결과가 3.6배 흔들립니다.

코드보다 해석을 정하는 데 시간이 간다

값의 모양이 이상한 데이터는 코드가 아니라 해석을 정하는 데 시간이 갑니다. 저는 이 데이터에서 화면 만드는 시간보다 값을 읽는 시간이 길었습니다.

네 질문을 표로

질문확인 위치❌ 이면
거를 항목이 있나활용명세 응답 필드다른 필드로 우회 설계
조건 검색이 먹나승인 후 첫 호출전량 수집으로 전환
검색당 호출 수전체 건수 ÷ 쪽 크기 × 엔드포인트실시간 호출 포기
값의 모양실제 응답 몇 건해석 규칙 먼저 정하기

❌가 하나도 없으면 실시간 호출로 가도 됩니다. 하나라도 걸리면 수집해서 파일로 두는 쪽이 편합니다. 저는 네 개 중 셋이 걸렸습니다.

그래서 전량 수집 방식이 됐습니다. 결과적으로 그 방식이 인증키 노출 문제까지 없앴어요.

그래서 이 판정표를 통과한 데이터인가

짚을 것이 있습니다. 제가 쓴 데이터는 네 질문 중 셋에서 걸렸습니다.

거를 기준(지역)이 없었고, 조건 검색이 안 먹었고, 값의 모양이 이상했습니다. 통과한 건 세 번째 질문뿐인데 그마저도 하루 454회라는 낮은 값이었습니다.

그래도 만들었습니다. 우회할 방법이 다 있었거든요. 판정표의 용도는 탈락시키는 게 아니라 각오할 것을 미리 아는 겁니다. 저는 몰라서 다 만든 다음에 뒤집었고, 알았으면 처음부터 그렇게 짰을 겁니다.

결과 목록에 서울특별시 관악구 배지와 서울특별시 배지가 섞여 있는 화면
우회가 새는 자리 — 광역 이름만 걸려도 통과한다

우회한 곳에서 무엇이 샜나

지역을 기관 이름으로 판단한 우회가 양쪽으로 샙니다. 이건 제가 나중에 세어보고 알았습니다.

한 자치구 조건으로 돌려 세어보니 지역으로 분류된 항목의 절반 가까이가 다른 자치구 공단 사업이었습니다. 분류상 기초자치단체로 안 잡히는 기관들이라, 광역 이름 하나만 걸리면 통과해버립니다.

반대 방향도 있습니다. 동 단위 사업은 기관 이름에 동 이름이 안 들어가서 놓칩니다. 우회는 우회라서 두 방향으로 다 틀립니다.

무료·자동승인이 알려주지 않는 것

공공데이터를 소개하는 글에서 자주 보이는 문장이 있습니다. "무료이고 자동승인이라 누구나 바로 쓸 수 있습니다."

신청까지는 맞는 말입니다. 그런데 도구를 만드는 관점에서는 아무것도 알려주지 않는 문장입니다. 무료이고 자동승인인데 조건표가 비어 있는 데이터가 실제로 있고, 제가 쓴 게 그중 하나였습니다.

정리

네 질문을 다시 접으면 하나가 남습니다. 공공데이터는 조건표가 곧 그 데이터의 능력입니다. 이용 조건 세 줄은 문을 열어주고, 조건표는 그 안에서 뭘 할 수 있는지를 정합니다.

그래서 다음에 데이터를 고르실 때는 비용·심의유형을 본 다음 활용명세를 한 번 열어보시길 권합니다. 거기서 내가 입력받고 싶은 항목을 찾을 수 있으면, 나머지는 다 우회할 수 있는 문제입니다.

이 판정표를 실제로 굴려 웹앱까지 만든 과정은 영상으로 정리해뒀습니다.

댓글 남기기 → 목록으로