목록으로
지역사회 문제해결을 위한 AI 활용
우리 구 업무추진비는 어디에 쓰였을까 — 서울 업무추진비 132만 건을 AI와 정리하다
👤 어디썼 📅 2026-10-13 👁 조회 250
서울 구청 업무추진비는 공개돼 있지만 파일 114,488개로 흩어져 찾아보기 어렵습니다. AI가 짠 코드로 132만 건짜리 표 하나로 모아 검산하고, 휴대폰으로 보는 앱 '어디썼'을 만들었습니다.
한 줄 요약: 서울 구청 업무추진비는 공개돼 있지만 파일 114,488개로 흩어져 찾아보기 어렵습니다. AI가 짠 코드로 이걸 132만 건짜리 표 하나로 모아 검산하고, 휴대폰으로 보는 앱 '어디썼'을 만들었습니다.

서울시와 25개 자치구는 매달 업무추진비 사용 내역을 홈페이지에 올립니다. 누가(직책), 언제, 어느 식당에서, 몇 명이, 얼마를 썼는지가 다 나옵니다. 그런데 막상 열어 보면 "그래서 우리 구는 어디를 제일 많이 갔지?" 같은 질문에는 답할 수가 없습니다. 파일이 너무 많고 모양이 제각각이기 때문입니다.

저는 개발자이고, AI 코딩 도구 Claude Code와 함께 이 파일들을 하나의 표로 정리했습니다. 그 표로 누구나 휴대폰에서 볼 수 있는 앱 '어디썼'(토스 미니앱)을 만들었습니다. 이 글은 그 과정과, 누구나 따라 할 수 있는 순서를 적은 것입니다.

■ 1. 상황: 공개는 돼 있는데 읽을 수가 없다

- 서울시 본청·소방·의회와 25개 구 등 29곳의 공개 파일을 모으니 114,488개, 9.7GB였습니다.
- 형식은 PDF 62,290개, 엑셀(xlsx·xls) 40,786개, 한글(hwp·hwpx) 5,516개 등으로 섞여 있습니다.
- 칸 순서, 날짜 쓰는 법(2022-09-05 / 22.9.5 / 9월 5일), 결제수단 이름이 기관마다 다릅니다. 결제수단 표기만 109가지였습니다.

한 건 옮기는 데 10초만 잡아도 132만 건이면 3,600시간이 넘습니다. 그렇다고 AI에게 "이 PDF 읽어서 숫자 알려줘"라고 하면 숫자를 잘못 읽어도 알아챌 방법이 없습니다. 세금 이야기에서 숫자가 틀리면 안 됩니다.

■ 2. 어떤 AI를 어떻게 썼나: 숫자 대신 코드를 맡겼다

AI에게 숫자를 직접 읽게 하지는 않았습니다. 대신 AI에게 파일을 읽는 프로그램(파서)을 짜게 하고, 숫자는 그 프로그램이 원본에서 그대로 꺼냅니다. 이렇게 하면 같은 파일을 넣으면 늘 같은 결과가 나오고, 틀린 곳이 있으면 코드를 고쳐 전체에 다시 적용할 수 있습니다.

아래는 이 방식을 보여 주려고 강동구 도시경관과 2022년 9월 파일 하나로 다시 해 본 화면입니다. 실제로 입력한 프롬프트입니다.

> 강동구가 공개한 업무추진비 PDF야. 표를 날짜·시간·장소·인원·금액 CSV로 뽑아줘. 숫자는 눈으로 읽지 말고 코드로 뽑고, 시계에 없는 시각이나 달력에 없는 날짜는 따로 표시해줘.

47초 뒤, Claude Code는 PDF 안의 글자 정보를 표 단위로 꺼내는 코드(pdfplumber 사용, 이미지에서 글자를 추측하는 OCR은 쓰지 않음)를 짜서 23행짜리 CSV를 만들었습니다.

그리고 스스로 검산까지 했습니다. 23건을 더한 값이 PDF 맨 위 합계와 같은지 확인한 것입니다.

여기서 재미있는 것이 나왔습니다. 원본 PDF에 19:95, 18:82, 19:91 같은 시각이 적혀 있습니다. 시계에는 없는 시각입니다.

(첨부 그림 설명) 강동구 2022년 9월 도시경관과 시책추진업무추진비 집행내역 원본. 빨간 칸은 제가 표시했고, 사용자(직책) 칸은 특정인을 가리킬 수 있어 흐리게 처리했습니다. 이 시연 파일은 2022년 것이라 앱 데이터 기간(2023~2026년)에는 들어 있지 않습니다. 방식을 보여 주기 위한 예시입니다.

AI에게는 이런 값을 고치지 말고 표시만 하라고 했습니다. 입력 실수인지 다른 뜻인지는 원본을 만든 곳만 알 수 있기 때문입니다. 앱에서도 이런 건은 '확인 필요'로 따로 둡니다.

■ 3. 무엇이 달라졌나

같은 방식으로 29곳 전체를 정리했습니다.

- 데이터: 원본 파일 114,488개 → 영수증 1,321,286건(2023.1~2026.8) 한 표
- 결제수단 표기: 109가지 → 5가지(카드·제로페이·현금·이체·기타)
- 날짜·시각 이상: 몰랐음 → 9,743건 찾아 원본과 자동 대조

날짜·시각이 이상한 9,743건을 원본 파일과 자동으로 맞춰 봤더니 셋으로 나뉘었습니다.

- 4,543건: 원본은 멀쩡한데 제가 짠 파서가 잘못 읽은 것. 관악구·성북구의 "9:05"처럼 앞자리 0이 없는 시각 표기가 대부분이었고, 관악구·성북구 파서는 같은 날 시각 표기를 맞추도록 고쳤습니다.
- 323건: 원본부터 19:95처럼 이상한 것. 고치지 않고 '확인 필요'로 표시했습니다.
- 4,877건: 금액·장소로 원본에서 같은 행을 자동으로 찾지 못한 것. 맞다 틀리다 판단하지 않고 보류했습니다.

원본과 대조하지 않았으면 4,543건은 틀린 시각 그대로 앱에 나갈 뻔했습니다.

이 표로 만든 앱은 숫자를 비교해서 보여 줍니다.

- 성동구 결제 중 상호에 '막국수'가 들어간 가게의 결제 건수 비중은 서울 25개 구 평균의 4배였습니다(396건, 성동구 결제 건수의 1%).
- 용산구는 시계 브랜드 '브라이틀링'에서 102번 결제했습니다. 알고 보니 브랜드가 운영하는 카페·식당이었습니다(603만원).
- 기간은 모두 2023.1~2026.8, 상호명 기준입니다. 카드 화면은 2026-10-13 앱에서 그대로 캡처했습니다.

카드에는 좋다 나쁘다 하는 말 없이 숫자만 적었습니다.

■ 4. 나만의 방식

1. 검산 기준은 원본 안에서 찾았습니다. PDF 맨 위 합계, 연번이 빠짐없이 이어지는지 같은 것들입니다.
2. 이상한 값은 고치지 않고 표시만 했습니다. 원본을 바꾸면 그때부터 공개 자료가 아니게 됩니다.
3. AI가 한 일은 다른 AI(서브에이전트)에게 다시 검사시켰습니다. 실제로 쓴 지시는 "그것들 잘못된 건 없는지 너가 검사해봐", "데이터 문제없다고 판단될 때까지 손봐. 문제없다고 판단되면 서브에이전트 시켜서 진짜 문제없는지 확인해" 같은 짧은 말이었습니다.
4. 개인정보는 처음부터 모으지 않았습니다. 공무원 이름은 수집하지 않고 직책·부서만 씁니다. 원본 파일은 다시 올리지 않고 출처 링크만 답니다.

■ 5. 따라 해 보기 (우리 동네 파일 하나로 10분)

1. 구청 홈페이지에서 '업무추진비'를 검색해 한 달 치 파일을 하나 받습니다.
2. 빈 폴더에 파일을 넣고 그 폴더에서 Claude Code(또는 코드를 실행할 수 있는 AI 도구)를 엽니다. 개발 도구가 낯설다면 파일 업로드가 되는 채팅형 AI에 PDF를 올리고 같은 프롬프트를 써도 됩니다. 이때도 "코드로 뽑아줘"라고 꼭 적어야 AI가 숫자를 눈대중으로 옮기지 않습니다.
3. 위의 프롬프트를 그대로 붙여 넣습니다. 구 이름만 바꾸면 됩니다.
4. 결과가 나오면 꼭 이렇게 한 번 더 묻습니다: "금액을 다 더해서 원본 맨 위 합계와 같은지 확인해줘."
5. CSV를 엑셀로 열어 장소별로 정렬해 봅니다. 우리 구가 자주 가는 식당이 보입니다.
6. 이상표시 칸에 뭔가 적혀 있으면 원본 PDF에서 그 행을 직접 확인합니다. 단정하지 말고 "원본에 이렇게 적혀 있다"까지만 말합니다.

파일이 여러 개라면 4번까지 확인한 코드를 "이 폴더의 파일 전부에 같은 방식으로 돌려줘"라고 하면 됩니다. 양식이 다른 파일에서 오류가 나면 그 파일을 보여 주고 고쳐 달라고 하면 됩니다. 제가 29곳을 정리한 방식도 이것의 반복이었습니다.

- 자료 출처: 서울특별시 및 25개 자치구 홈페이지 업무추진비 공개 자료, 서울 열린데이터광장·정보소통광장. 인용한 원본: 강동구 「2022년 9월 도시경관과 시책추진업무추진비 집행내역」.
- 사용한 AI: Claude Code(Anthropic). 파서 작성·검사·앱 개발에 사용.
- 숫자 기준: 2023-01-01~2026-08-31 결제, 데이터 버전 2026-10-09.
← 목록