1편에서 뉴스 검색에 쓰던 사업 이름을 정부 공식 명칭으로 바로잡은 뒤, 원래 질문으로 돌아왔다. 지금 갖고 있는 13개 사업 목록이 정말 전부일까. 답은 정부의 예산 시스템 안에 이미 있었다.
작년엔 없던 게 올해 나타났다면 (열린재정 API, User-Agent 차단)
국가재정정보공개시스템(열린재정)은 정부기관별 예산 지출 내역을 세부사업 단위로 공개한다. 이 세부사업명이 1편에서 발견한 “정조대왕급 → 광개토-Ⅲ Batch-Ⅱ” 같은 공식 명칭이 나오는 바로 그 자리다. 여기서 발상을 하나 더 얹었다 — 특정 연도에 이 세부사업명 목록을 전부 받아서, 작년 목록과 비교하면 어떨까. 작년엔 없다가 올해 처음 등장한 이름이 있다면, 그게 곧 새로 시작한 사업이다.
방위사업청의 2023년과 2024년 세부사업명 목록을 비교해보니 47건이 나왔다. 그중엔 접적지역대드론통합체계처럼 13개 목록에 아예 없던 사업도 섞여 있었다. 뉴스 검색은 기사가 나와야 찾을 수 있지만, 예산은 사업이 시작되는 해에 이미 잡힌다. 기사를 기다리지 않고 찾을 수 있다는 뜻이다.
이 API를 쓰는 과정 자체도 순탄치는 않았다. 일반적인 방식으로 요청하면 “서비스에 접속할 수 없습니다”라는 응답만 돌아왔는데, 원인은 브라우저처럼 보이는 User-Agent 헤더가 없어서였다. 응답 본문도 한 번 더 함정이었다 — JSON을 파싱하면 딕셔너리가 아니라 문자열이 나오는 이중 인코딩 구조라, 한 번 더 파싱해야 실제 데이터가 나왔다. 그리고 특정 기관·연도 조합엔 애초에 데이터가 없는 게 정상인 경우도 있었다(2024년 5월에 생긴 우주항공청은 2023·2024년 데이터가 없다). 그래서 그런 응답을 에러로 취급하지 않고 정상적인 “데이터 없음”으로 넘어가도록 구분해야 했다.
나라장터엔 API가 두 개 있었다 — 공공데이터개방표준서비스 vs 입찰공고정보서비스
신규 사업을 찾은 다음 질문은 “그럼 이 사업에 어느 기업이 참여하나” 였다. 나라장터(조달청) 공공데이터를 찾아보니, 이름이 비슷한 API가 두 개 있었다.
하나는 공공데이터개방표준서비스. 낙찰정보 조회 기능이 있는데, 사업명으로 검색하는 기능이 없다. 검색 조건이 오직 “개찰일시” 뿐이고, 그마저도 하루 단위로만 조회할 수 있다. 결국 어떤 날짜에 낙찰이 있었는지도 모르는 채로, 하루치 전체 목록을 받아서 키워드로 걸러내는 식으로만 쓸 수 있었다. 나흘치를 훑게 했더니 2분이 지나도 끝나지 않아서, 결국 중간에 멈췄다.
다른 하나는 입찰공고정보서비스. 공고명을 부분 텍스트로 직접 검색하는 기능이 있었다. 이걸 먼저 찾았으면 좋았을 텐데, 공공데이터포털에서 “나라장터”로 검색한 결과 페이지를 다시 훑어보고 나서야 존재를 알았다. 이쪽은 조회 기간이 한 달로 제한된다는 것도 직접 넣어 보고 알았다. 석 달치를 넣으니 “입력범위값 초과 에러”가 돌아왔고, 한 달로 줄이자 정상으로 나왔다. 응답 필드 이름도 짐작해서 쓴 것과 달라서 공고일시· 개찰일시가 빈 값으로 나왔고, 원본 응답을 그대로 찍어보고서야 맞는 이름을 알 수 있었다.
두 API를 다 써본 결론은 이렇다. 나라장터는 대형 무기체계 획득 사업엔 잘 안 걸린다 — 방위사업청 자체 조달 시스템을 쓰는 것으로 보인다. 대신 R&D 용역이나 부품·설비 조달처럼, 원청 밑에 있는 협력업체·서브벤더를 찾는 데는 강했다. 그리고 정부 공식 세부사업명 전체보다, 그 안의 짧은 핵심 단어 하나로 검색하는 쪽이 훨씬 잘 걸렸다.
이렇게 열린재정으로 신규 사업을 찾고, 뉴스 검색으로 원청을 찾고, 나라장터로 하위 협력업체를 보강하는 세 단계가 갖춰졌다. 다음 편은 이 도구들을 원래 프로젝트에서 떼어내 별도로 만든 이야기다.