- 뭘 해결하나: data.go.kr 인증키는 이미 있는데 새 API만 부르면
SERVICE_KEY_IS_NOT_REGISTERED_ERROR가 뜬다. 키는 하나여도 API마다 활용신청을 따로 해야 한다 - 설치 난이도: 코드 0줄. 검색 → 활용신청 폼 → 맨 아래 「동의합니다」 체크 → 신청. 자동승인 API라 13시 17분 캡처에 이미 [승인]
- 실제로 아낀 것: 승인 통보 직후 같은 키로 재시도 없이 응답. 제 사주 앱 기준표 8일치 일진이 8/8 일치해 「출처 빈칸」이 닫혔다

이런 문제 겪고 있다면
공공데이터포털(data.go.kr)에서 API 하나를 이미 쓰고 있는 분이 두 번째 API를 붙이면 이 에러를 만납니다.
SERVICE_KEY_IS_NOT_REGISTERED_ERROR
「등록되지 않은 서비스키」라는 뜻입니다. 이상하죠. 키는 멀쩡히 있고, 첫 번째 API는 그 키로 잘 돌아가거든요. 그래서 키를 다시 복사해 보거나 인코딩을 의심하기 쉽습니다. 원인은 키가 아니라 신청에 있습니다(이날 제 계정 기준).
저는 수학 과외를 하면서 AI와 앱을 만듭니다. 그중 하나가 생년월일로 사주 명식을 계산하는 앱인데, 이날 계산이 맞는지 대조할 기준표를 만들고 있었습니다. 기준표의 각 줄에는 「이 값은 어디서 왔나」 출처를 적어야 하고, 출처 칸이 비어 있으면 테스트가 실패하도록 짜 두었습니다.
- 오픈API: 기관이 데이터를 프로그램으로 받아 가게 열어 둔 주소. 주소에 인증키를 붙여 부른다
- 활용신청: data.go.kr에서 「이 API를 쓰겠다」고 신청하는 절차. 승인이 나야 키가 그 API에서 통한다
- 일진(日辰): 그날의 60갑자 이름(예: 병인). 사주에서는 태어난 날의 일진이 「일주」가 된다
음양력 정보 API가 하는 일 한 문단
한국천문연구원이 제공하는 「음양력 정보」 API는 양력 날짜를 넣으면 음력 날짜·윤달 여부·요일과 함께 그날의 일진을 돌려줍니다. 사주의 연주·월주는 절기 표로 따질 수 있지만, 일주는 60갑자를 하루씩 세어 나가는 값이라 따로 출처가 필요했습니다. AI가 선택지 네 개를 늘어놓고 비교한 끝에 이 API로 정했습니다. 근거는 「KASI 정본·URL 인용 가능」, 즉 천문연구원 원본 데이터이고 조회한 주소 자체를 출처로 적을 수 있다는 점이었습니다. 문제는 그 호출이 위의 에러로 막혔다는 것. AI가 확인해 보니 제 키는 특일 정보 API에만 활성화돼 있었습니다.

그림 왼쪽이 5월에 신청해 둔 특일 정보, 오른쪽이 이날 막힌 음양력 정보입니다. 키는 같습니다. 다른 건 그 API에 대한 활용신청 여부 하나입니다.
설치 — 실제로 누른 순서
1) 요구 사항
- data.go.kr 회원 로그인. 이미 다른 API를 쓰고 있다면 그 계정 그대로입니다.
- 쓰려는 API 이름. 이날은 「한국천문연구원_음양력 정보」였습니다.
이날 결제 단계는 없었습니다.
2) 검색해서 API 찾기
AI가 준 순서의 첫 줄은 이랬습니다.
- data.go.kr 로그인 → 「한국천문연구원_음양력 정보」 검색(제공기관 한국천문연구원, 오퍼레이션
getLunCalInfo).
검색하면 비슷한 이름이 여러 개 나옵니다. 월령 정보, 태양고도 정보, 천문우주지식정보처럼요. 「오픈API」 딱지가 붙은 음양력 정보를 고릅니다. 「파일데이터」 딱지는 API가 아니라 파일을 내려받는 항목입니다.

3) 활용신청 폼 채우기
「활용신청」을 누르면 「오픈 API 개발계정 신청」 화면이 나옵니다. 위쪽 기본 정보에서 확인할 줄은 심의여부입니다. 이 API는 「자동승인」이었습니다. 사람이 심사하는 API라면 바로 안 날 수 있으니, 신청 전에 여기서 기대치를 잡아 두면 좋습니다.

활용목적은 「앱개발(모바일,솔루션등)」을 골랐고, 설명 칸에는 AI가 제안한 문구 「사주 명식 계산 검증(개인 개발)」을 그대로 넣었습니다. 회색 상자의 위치기반서비스사업자 안내는 위치정보를 포함한 서비스를 하는 사업자 대상이라 이번 경우엔 해당하지 않았고, AI도 이 폼을 보고 「다 맞습니다」라고 했습니다.
그 아래 상세기능은 네 개(음력일정보 조회·특정 음력일 정보조회·율리우스적일 정보조회·양력일정보 조회)가 모두 체크된 상태였고, 각각 일일 트래픽 10000으로 표시됐습니다. 캡처상 네 개 모두 체크된 그대로입니다.
4) 맨 아래 한 칸 — 「동의합니다」
내기 전에 폼을 캡처해 AI에게 보냈습니다. AI가 화면을 읽고 답했습니다.
① data.go.kr 활용신청 — 한 칸 남았습니다. 데이터명·자동승인·상세기능 4개 체크·활용목적 문구까지 다 맞습니다. 맨 아래 「라이선스 표시 → 이용허락범위 제한 없음 → 동의합니다」 체크박스가 비어 있어 신청 버튼이 안 먹습니다.

캡처를 보면 빨간 글씨가 이미 말하고 있습니다. 「이용허락범위에 동의하셔야 신청이 가능합니다.」 상세기능 네 개가 체크돼 있으니 폼이 다 찬 것처럼 보입니다. 맨 아래 체크박스 하나가 비어 있다는 건 AI가 캡처를 읽고 짚었습니다. 학생들이 답안지 마지막 장 뒷면을 안 넘기고 내는 것과 같은 모양의 빈칸입니다.
체크하고 「활용 신청하기」를 눌렀습니다.
5) 설치 확인 — 「됐는지 어떻게 아나」
마이페이지 「활용신청 현황」으로 갑니다. 13시 17분에 찍은 화면(맨 위 이미지)에서 음양력 정보는 이미 승인 상태([승인])였고, 신청일 2026-09-22, 만료예정일 2028-09-22였습니다. 폼을 캡처한 게 12시 55분이니 그 사이 22분 안에 신청과 승인이 다 끝난 셈입니다. 정확한 신청 시각은 기록이 없어서 「몇 초 만에」라고는 말하지 않겠습니다.
같은 화면 아래쪽에 5월에 신청한 특일 정보가 [승인]으로 나란히 있습니다. 한 계정 안에 API별로 한 줄씩 쌓인다는 게 이 화면에서 바로 보입니다.
실행 — 첫 1회
승인을 확인하고 AI에게 한 줄 보냈습니다. 「승인 확인 했어.」 AI가 사주 앱 쪽 작업 창에 알렸고, 그쪽 AI가 미리 짜 두었던 조회 스크립트를 돌렸습니다. 스크립트가 부르는 주소는 이 모양입니다.
https://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getLunCalInfo?solYear=1990&solMonth=01&solDay=01&_type=json&serviceKey=[내-인증키]
solYear·solMonth·solDay에 양력 날짜를 넣고, _type=json이면 JSON으로 옵니다. 응답의 lunIljin 필드에 그날 일진이 「병인(丙寅)」처럼 한글과 한자로 들어 있습니다. 스크립트 사용법은 날짜를 늘어놓는 한 줄입니다(아래는 스크립트에 적힌 사용 예시이고, 이날은 8개 날짜를 조회했습니다).
python scripts/fetch_golden_day_pillars.py 1990-01-01 2011-11-08
기준표에 실제로 들어간 1990-01-01 줄의 출처 칸은 이렇게 채워졌습니다.
일진 data.go.kr 한국천문연구원_음양력 정보 `getLunCalInfo?solYear=1990&solMonth=01&solDay=01` → 병인(丙寅)(조회 2026-09-22)
스크립트가 출처 칸에는 serviceKey를 뺀 주소만 찍도록 짜여 있습니다. 키는 비밀이라 출처에 남기면 안 되니까요.
실제로 이득 본 경험
- 재시도 0회. 승인 전에는 같은 명령이 계속
SERVICE_KEY_IS_NOT_REGISTERED_ERROR였습니다. 통보 직후 8일치를 부르자 바로 응답이 왔다고 작업 창 AI가 보고했습니다. - 8/8 일치. 받은 일진(1990-01-01 병인 · 2000-02-04 임진 · 2010-06-21 임인 · 2015-12-22 임신 · 2024-02-04 무술 · 2011-11-08 정묘 · 1955-02-04 병신 · 1988-10-09 정유)이 앱 계산과 전부 맞았습니다. 앱이 「1990-01-01은 병인」을 기준점으로 날짜를 세는데, 그 기준점이 처음으로 바깥 출처와 대조된 순간입니다.
- 출처 빈칸이 닫혔다. 기준표 11줄의 출처 칸이 전부 채워졌고, 그날 그 변경이 앱에 합쳐졌습니다.
- 다음 날엔 기준표를 늘리면서 작업 창 AI가 새 날짜 34개의 일진도 같은 API로 조회했고, 34/34 맞았습니다.
마지막에 제가 한 건 체크박스 하나와 버튼 하나였습니다. 그 한 칸이 비어 있는 동안 사주 앱 쪽 작업은 멈춰서 기다리고 있었고요.
겪은 함정
함정 1 — 키가 같으니 될 줄 알았다. 문제는 「키가 없다」가 아니라 「이 API에 신청이 없다」였습니다. 실패 사례는 맨 위의 에러 그대로입니다. 해결은 활용신청. 실천법: 새 API를 붙이기 전에 마이페이지 활용신청 현황에 그 API 이름이 [승인]으로 있는지 먼저 봅니다.
함정 2 — 동의 체크박스 한 칸. 다른 칸이 전부 채워져 있으면 마지막 빈칸은 눈에 잘 안 들어옵니다. 이날도 AI가 캡처에서 짚기 전까지 비어 있었습니다. 실천법: 「활용 신청하기」를 누르기 전에 빨간 글씨가 남아 있는지 한 번 훑습니다.
함정 3 — 필드 이름만 보고 쓰면 틀린다. 제가 내려받아 건넨 API 활용가이드 문서를 AI가 읽고 뽑아 준 주의점입니다. 응답에는 lunSecha·lunWolgeon처럼 연·월 간지로 보이는 필드도 있는데, 음력 기준이라 사주의 연주·월주 출처로 쓰면 안 됩니다(사주는 절기 기준으로 해가 바뀝니다). 그래서 작업 창 AI가 기준표 머리말에 「이 둘은 출처가 아니다」를 적어 두었습니다. 일주에 쓰는 건 lunIljin 하나입니다.
조회 주소를 출처로 적을 때 serviceKey= 뒤는 반드시 뺍니다. 기준표는 저장소에 올라가는 문서라, 키가 들어가면 그대로 공개됩니다.
FAQ
Q. 인증키를 새로 받아야 하나요?
아니요. 이날은 특일 정보에 쓰던 키를 그대로 썼고, 승인 뒤 같은 키로 응답이 왔습니다. 바뀌는 건 키가 아니라 「이 API에 대한 신청 상태」입니다.
Q. 승인까지 얼마나 걸리나요?
심의여부가 「자동승인」인 API는 이날 기준 폼 캡처(12:55)부터 승인 화면(13:17)까지 22분 안이었습니다. 심의가 있는 API는 폼 위쪽 「심의여부」에서 미리 확인하세요.
Q. 기간이 끝나면요?
화면에 만료예정일이 신청일로부터 2년 뒤로 찍혀 있고, 현황판에 「활용연장」 칸이 따로 있습니다. 저는 아직 연장을 해 보지 않아서, 만료가 가까워지면 그 메뉴를 확인할 생각입니다.
Q. 개인 개발자도 신청할 수 있나요?
활용목적 설명에 「사주 명식 계산 검증(개인 개발)」이라고 적어 냈고 승인됐습니다.
그래서 뭘 하면 되나
| 시점 | 할 것 | 확인 방법 |
|---|---|---|
| 오늘 | 쓰려는 API 이름으로 마이페이지 활용신청 현황 확인 | [승인] 줄이 있으면 신청 불필요 |
| 오늘 | 없으면 검색 → 「오픈API」 딱지 → 활용신청 | 폼 위 「심의여부」로 대기 시간 예상 |
| 오늘 | 폼 맨 아래 「동의합니다」 체크 | 빨간 안내 글씨가 사라졌는지 |
| 신청 뒤 | 같은 키로 한 번 호출 | 에러 대신 응답 필드(이 API면 lunIljin)가 오는지 |
표의 핵심은 셋째 줄입니다. 이 글에서 새로 알아야 할 절차는 사실 없습니다. 다 채웠다고 믿는 순간 빈칸 하나를 놓친다는 것, 그게 이날의 오답이었습니다. 키가 있는데 등록되지 않았다는 에러가 뜨면 키를 의심하기 전에 그 API의 활용신청 현황부터 보세요.
같은 날 오후엔 앱 세 개가 함께 쓸 신고용 메일 주소도 0원으로 만들었습니다. 그 과정은 cafe24 DNS + ImprovMX 도메인 메일 따라하기에 있습니다. 데이터 출처는 공공데이터포털 「한국천문연구원_음양력 정보」입니다.