📝 한줄 요약 업무를 맡은 지 2주 된 공공기관 담당자가 Claude Code와 함께 옥외광고물 허가/신고 자동 판정 시스템을 개발 중이다. 현재 판정 엔진 API가 완성됐고, 담당자마다 달랐던 판정 기준을 하나로 통일하는 것이 목표다.
**바쁘시면 이것만 읽어도 돼요:**
- Claude Code로 법령 기반 간판 허가/신고 자동 판정 API 구축 중 (현재 12종 광고물 커버)
- AI도 사람처럼 헷갈린다 — 법령명을 잘못 찾아오면 내가 직접 확인하고 수정해야 한다
- 핵심 팁: "RAG 챗봇, 오픈소스, 깃허브" 3개 키워드로 검색 → 내 요구사항에 맞는 걸 추천받기
- 버그를 AI와 함께 추적한 과정이 가장 인상적이었다 (원인이 DB가 비어있던 것)
- 맨땅에 헤딩하지 않아도 된다 — 이미 훌륭한 오픈소스가 있다 - AI가 잘 하고 있는지 항상 감시해야 한다
## 🎯 이런 분들께 도움돼요
- 공공기관·지자체에서 반복 업무 자동화에 관심 있는 담당자 - 인수인계 받았는데 물어볼 사람이 없어서 힘든 신규 담당자
- 개발자 없이 AI로 업무 도구를 만들어보고 싶은 분
## 😫 문제 상황
(Before) 업무를 맡은 지 2주째였다. 간판 허가 민원이 들어오면 담당자는 법령집을 꺼내 확인해야 한다. 돌출간판인지, 벽면간판인지, 몇 층인지, 면적이 얼마인지에 따라 허가 대상인지 신고 대상인지가 달라진다. 법령이 옥외광고물법, 시행령, 서울시 조례, 강남구 조례까지 4개 층위로 쌓여 있어서 처음 배우는 사람은 어디서부터 읽어야 할지부터 막힌다. 더 큰 문제는 **사람마다 판정이 다르다**는 것이다. 법령 해석에 따라 담당자가 "이건 허가예요"라고 했다가, 다른 담당자는 "신고면 돼요"라고 하는 일이 생긴다. 그러면 민원이 발생한다. 그래서 매일 옆 팀원에게 물어봐야 했다. 팀원도 바쁜데 계속 불러세우는 게 미안했다.
_이 불편함을 없앨 수 없을까?_ 라고 생각하던 차에, CTO 오프 모임에서 힌트를 얻었다. > "맨땅에 헤딩하지 마세요. 이미 훌륭한 개발자들이 오픈소스로 공유해둔 게 있어요." 그 말 한마디가 시작이었다.
## 🛠️ 사용한 도구
- **도구명**: Claude Code - **모델**: Claude Sonnet 4.6
- **특이사항**: 자치구 내부망(인터넷 차단 폐쇄망) 배포 환경 고려 ---
## 🔧 작업 과정
### 오픈소스 검색부터 시작하다 CTO 모임에서 들은 조언을 바로 실행에 옮겼다. Claude Code에 딱 3개 키워드만 넣었다.
RAG 챗봇, 오픈소스, 깃허브 이 3개를 키워드로 내 요구사항에 맞게 오픈소스를 추천해달라
RAG(Retrieval-Augmented Generation)란 AI가 답변할 때 관련 문서를 먼저 찾아서 근거로 삼는 방식이다. 법령처럼 정확한 근거가 필요한 업무에 딱 맞는 기술이다. Claude Code는 LlamaIndex를 추천했고, 내 생각도 같았다. _나도 이걸 생각하고 있었는데._ 그냥 진행했다. 나중에 알게 됐지만, 이게 정말 중요한 방식이었다.
처음부터 만드는 게 아니라 이미 검증된 오픈소스를 내 상황에 맞게 조합하는 것. _왜 이걸 진작 안 했지?_ 라는 생각이 들었다.
법령 범위를 먼저 정했다 어떤 시스템을 만들 건지 Claude Code와 함께 구체화했다. '/home/jinkui/dev/SignCheck/광고판정_PRD.md' 이거 분석해서 보고 해줘. 좀 더 구체화해보자 처음엔 간판 4종만 대상이었다. 그런데 법령을 보니 훨씬 많은 유형이 있었다.
4종으로 제한을 두지 말고 여기 파일에 있는 광고물은 다 대상이다 ``` 돌출간판, 벽면이용간판, 옥상간판, 지주이용간판, 입간판, 현수막, 애드벌룬, 선전탑, 창문이용광고물까지. 결국 12종 전체를 커버하게 됐다.
법령 API 연동 — AI도 헷갈렸다 국가법령정보공단 Open API를 연결해서 법령 데이터를 불러오는 단계였다. 그런데 여기서 흥미로운 일이 생겼다. Claude Code가 서울시 조례를 잘못 찾아온 것이다. 내가 직접 검색해봐도 잘 안 나올 만큼 이름이 비슷한 조례가 여러 개 있었다. _아, AI도 나처럼 헷갈리는구나._ 사람이나 AI나 공식 명칭이 복잡하면 헷갈리는 건 마찬가지였다.
그래서 내가 직접 정확한 법령 정보를 찾아서 알려줬다. ``` 서울시 조례는 이거 아니야. 서울특별시 옥외광고물 등의 관리와 옥외광고산업 진흥에 관한 조례(서울특별시조례)(제9936호)(20260105) 요거 찾아라 ```
한국어 파일 스크린샷
법령 ID를 직접 제공하자 바로 정확하게 찾았다. 이 경험으로 깨달은 것이 있다. **AI가 잘 하고 있는지 항상 감시해야 한다.** 특히 법령명이나 공식 코드처럼 정확도가 중요한 데이터는 내가 직접 확인하고 넣어줘야 한다.
### 버그 발견 — 그리고 함께 추적한 과정 법령 임베딩까지 마치고 Docker 환경에서 판정 API를 처음 실행했다. 돌출간판 허가 여부를 물어봤는데, 응답이 이상했다. ``` 백엔드가 정상 시작됐습니다. 이제 /api/v1/judge 테스트합니다. ``` 결과를 보니 최대 규격이 전부 `null`로 나왔다. 허가 판정도 `"report"`(신고)로 잘못 나왔다. 돌출간판은 분명히 허가 대상인데. Claude Code와 함께 원인을 추적했다. 데이터베이스 테이블을 확인해보니 규칙 데이터가 아예 없었다. 0건. 시스템은 잘 돌아가는데 안에 데이터가 없으니 항상 기본값으로 빠지고 있었던 것이다. 이 과정이 가장 인상적이었다. 증상(null 반환)을 확인하고 → 원인(규칙 DB 비어있음)을 추적하고 → 해결책(규칙 데이터 삽입)을 찾는 과정을 AI와 함께 단계별로 밟아나간 것이다. 혼자였다면 어디서부터 봐야 할지 막막했을 텐데.
한국어 스크린샷
### 12종 간판, 15개 규칙 완성 버그 원인을 찾았으니 법령에서 규칙 데이터를 뽑아야 했다. ``` 추가 테스트 필요하다. 돌출간판의 경우 가로 세로 최대 규격이 정해져 있다. 법규 목록에 모든 간판의 규격이 있다. 이건 매우 중요한 데이터다 ``` 서울시 조례 PDF를 분석해서 간판별 최대 규격을 추출하고, 15개 규칙을 데이터베이스에 넣었다. 돌출간판은 돌출폭 1미터 이내, 세로 3.5미터 이내. 벽면이용간판은 층수에 따라 허가와 신고가 나뉘고. 이런 복잡한 조건들이 하나씩 정리됐다.
최종 검증 결과:
```
돌출간판: 허가 | 소심의 | 돌출 1m 이내, 세로 3.5m 이하 ✓
벽면이용간판(5층): 허가 | 대심의 | 면적 225㎡ 이하 ✓
지주이용간판: 신고 | 소심의 | 높이 5m, 1면 3㎡ 이하 ✓
창문이용광고물: 신고 | 소심의 | 가로·세로 0.3m 이내 ✓
현수막: 신고 | 소심의 | 가로 0.7m, 세로 2m 이하 ✓
```
처음에 `"report"`(오류)로 나오던 돌출간판이 `"permit"`(정상)으로 바뀐 순간, 뭔가 해낸 것 같았다.---
## ✅ 현재까지 완성된 것 (진행 중)
### Before vs 현재
| 항목 | Before | 현재 |
|------|--------|-------|
| 판정 방법 | 법령집 직접 찾기 + 팀원에게 질문 | API 호출 한 번으로 즉시 판정 (개발 완료) |
| 판정 기준 | 담당자마다 다름 | 법령 기반으로 통일 (엔진 완성) |
| 신규 담당자 | 법령 공부 + 계속 질문 | 시스템이 근거 조문까지 반환 예정 |
| 커버 범위 | 담당자 숙지 범위 | 12종 광고물 전체 (데이터 입력 완료) |
### 현재까지 완성된 기능
- 허가/신고/불가 자동 판정 API ✅
- 간판별 최대 규격 자동 반환 (돌출폭, 높이, 면적 등) ✅
- 판정 근거 법령 조문 3건 함께 반환 ✅
- 허가 수수료 자동 계산 ✅
- 필요 서류 목록 자동 생성 ✅
### 앞으로 남은 과제
- 프론트엔드 구현 (창구 직원용 화면)
- 공연간판 등 일부 유형 규칙 보완
- 강남구 내부망 배포
## 💬 이 과정에서 배운 AI 활용 팁
### 효과적이었던 것
1. **오픈소스 검색부터**: "RAG 챗봇, 오픈소스, 깃허브" 3개 키워드로 내 요구사항에 맞는 걸 추천받기. 처음부터 만들려 하지 말 것
2. **법령처럼 공식 자료가 있는 업무일수록 잘 맞는다**: 근거가 명확한 업무는 AI가 특히 잘 도와준다
3. **버그는 함께 추적한다**: 증상을 설명하면 원인까지 같이 파고든다
### 이렇게 하면 안 돼요
1. **AI 결과를 그냥 믿지 말기**: 법령명, 조례 번호 같은 공식 데이터는 반드시 직접 확인
2. **처음부터 다 만들려 하지 말기**: 이미 검증된 오픈소스를 조합하는 게 훨씬 빠르다
3. **감시를 게을리하지 말기**: AI가 잘 진행하고 있는지 매 단계 확인이 필요하다
## 🌍 다른 업무에 적용한다면?
이 방식은 **법령이나 규정을 근거로 판단해야 하는 업무**라면 어디든 적용 가능하다.
- 건축 허가 요건 사전 확인 시스템
- 식품 영업 허가 구비 서류 자동 안내
- 각종 민원 처리 기준 통합 조회 도구
공공기관이 아니더라도 사내 규정이나 계약 검토처럼 "기준이 복잡하고, 사람마다 판단이 달라서 민원이 생기는" 업무라면 비슷한 방식으로 자동화할 수 있다.
## 🚀 앞으로의 계획
지금은 API만 있다. 다음 단계는 **창구 직원이 실제로 쓸 수 있는 화면**을 만드는 것이다. 민원인이 간판 정보를 입력하면 바로 허가/신고 여부와 필요 서류가 나오는 형태로. 법령을 외우지 않아도 누구나 쓸 수 있는 도구가 목표다.