"오픈소스 + 계획 + 자기검증 — 맨땅 헤딩 없이 AI 개발 2탄"

📝 한줄 요약

하루 동안 AI와 9번의 대화를 이어가며 간판 판정 시스템을 완성했다. 핵심은 세 가지였다. 오픈소스를 활용하고, 계획을 세우고, 그 계획을 AI 스스로 검증하게 한다. 맨땅에 헤딩하지 않아도 된다는 걸 몸으로 익힌 날이었다.

바쁘시면 이것만 읽어도 돼요:

  • AI와의 대화가 길어지면 컨텍스트가 날아간다 — handoff.md 하나로 해결했다

  • "TASK-A1 진행해" 처럼 잘게 끊어서 시키면 AI가 길을 잃지 않는다

  • 노트북LM 같은 챗봇과 이 시스템의 차이: 판정 대상을 입력받아 결정을 내리는 시스템이다

  • 돌출간판 6층 이상 "설치불가" 판정이 처음 나왔을 때 — 그 순간이 가장 인상적이었다

  • AI가 엉뚱한 법령 조문을 붙여오기도 한다 — 결과를 항상 검토해야 한다

  • 오픈소스 + 계획 + 자기검증 = 처음부터 만들 필요 없다

🎯 이런 분들께 도움돼요

  • AI로 뭔가 만들어보고 싶은데 어디서부터 시작해야 할지 모르는 분

  • AI에게 큰 작업을 맡겼다가 중간에 산으로 간 경험이 있는 분

  • 단순 챗봇 말고 "실제로 판단해주는 시스템"이 뭔지 궁금한 분

😫 이번엔 어떤 문제였나

API가 완성됐다고 끝이 아니었다.

시스템이 돌아가는 건 맞는데, 판정이 틀렸다. 돌출간판을 6층에 설치한다고 입력해도 "신고"로 나왔다. 법령상 명백히 "설치불가"여야 하는데. 설치 규격을 초과했을 때도 마찬가지였다. 시스템은 멀쩡히 동작하는데 결과가 틀리다 — 이게 생각보다 훨씬 위험한 상태다. 모르고 쓰면 민원이 생긴다.

그리고 또 다른 문제가 있었다. 작업이 길어지니까 AI가 앞에서 뭘 했는지 잊어버리기 시작했다. 새 대화창을 열면 처음부터 다시 설명해야 했다. 하루에 9번 대화를 새로 시작하면서, 매번 "현재 상황은 이렇고, 지금까지 한 건 이거고..." 를 반복하는 건 비효율이었다.

이 두 가지를 해결하는 게 이날의 목표였다.

🛠️ 사용한 도구

  • 도구명: Codex (GPT-5.4)

  • 특이사항: 하루 9개 세션, 세션 간 handoff.md로 컨텍스트 이어붙임


🔧 작업 과정

AI가 잊어버리기 전에 — handoff.md 도입

처음엔 그냥 새 대화를 열고 다시 설명했다. 그런데 세 번째 세션쯤 되니까 이게 너무 비효율적이었다. AI한테 같은 말을 반복하고 있는 나를 발견했다.

그래서 Codex에게 물었다.

컨텍스트 관리를 위해 이번 세션은 종료하고 새로운 세션으로 작업하려고 하는데,
sign-rule-expansion-plan.md 이거만 다음 세션에 제공해주면 이어서 작업하나?
아님 추가로 인수인계를 위한 handoff.md를 만드는 게 나을까?

Codex는 handoff.md를 추천했다. 단순히 계획서를 넘기는 것보다, "지금까지 뭘 완료했고, 다음은 뭘 해야 하고, 어디서 막혔는지" 를 정리한 문서가 훨씬 낫다고 했다. 그렇게 만들어졌다.

이후부터 세션을 끝낼 때마다 Codex가 handoff.md를 업데이트했다. 다음 세션을 열 때는 한 줄만 던지면 됐다.

docs/handoff-sign-rule-expansion.md 다음 작업 이어하자

그러면 Codex는 바로 파악하고 시작했다. 내가 설명할 필요가 없었다. 이게 이렇게 편할 줄이야.


TASK 단위로 끊어서 시키기

판정 오류를 고치는 작업이 생각보다 범위가 넓었다. 돌출간판 하나만 고치면 되는 게 아니라, 12종 간판 전체의 판정 조건을 법령에 맞게 다시 검토해야 했다.

한 번에 다 맡기면 어떻게 될까? 써봤다. AI가 중간에 흔들렸다. 어디까지 했고 어디서 멈췄는지 스스로 헷갈려했다.

그래서 방식을 바꿨다. 먼저 전체 로드맵을 짜게 하고, 그걸 작은 태스크로 쪼갰다.

돌출간판에서 시작해서 모든 간판으로 판정을 확장하는 계획을 세우고 보고해줘

Codex가 TASK-A1부터 Epic D까지 구조를 짰다. 그다음부터는 이렇게만 말했다.

TASK-A1 진행해
TASK-A2 진행해

한 태스크가 끝나면 다음 태스크. 단순하지만 이게 훨씬 잘 됐다. AI가 지금 뭘 해야 하는지 명확하니까 길을 잃지 않았다. 그리고 내가 보기에도 진행 상황이 눈에 보였다.


그리고 마침내 — "좋네 잘 반영되네, 좋은데"

테스트를 해봤다. 돌출간판, 6층, 면적 초과. 판정 결과를 봤다.

"설치불가."

처음 보는 결과였다. 전날까지는 이 조건에서도 "신고"가 나왔다. 그게 드디어 "설치불가"로 바뀐 것이다.

좋네 잘 반영되네, 좋은데

짧은 한마디였지만, 그 순간이 가장 인상적이었다. 법령에서 규칙을 뽑고, 그걸 DB에 넣고, 엔진이 그 규칙대로 판정하고, 화면에 결과가 나오는 전체 흐름이 처음으로 완전하게 맞아떨어진 순간이었다.


막혔던 순간들

물론 매끄럽지만은 않았다.

첫 번째 막힌 것: 입간판을 11층, 30㎡로 입력했는데 "설치불가"가 안 나왔다.

아직 DB에 오류가 있다. 입간판의 경우 11층에 30제곱미터로 설치한다고 했는데
불가 판정이 안 나온다.

이건 DB에 입간판 층수 조건이 누락된 것이었다. 규칙은 법령에 있는데 DB에 안 들어가 있었다. 증상은 API 응답인데 원인은 데이터였다. 이 두 가지를 구분해서 볼 줄 알아야 찾을 수 있었다.

두 번째 막힌 것: 판정 결과와 함께 나오는 "근거 조문"이 전혀 엉뚱한 내용이었다.

근데 근거 조문은 전혀 상관없는 것이 생긴다.

RAG가 의미적으로 비슷한 문장을 가져오다 보니, 돌출간판 판정인데 현수막 조문이 붙어오는 일이 생겼다. 이건 완전히 해결하지 못한 채 넘어갔다. AI도 못 하는 게 있다. 그리고 그걸 인정하고 다음으로 넘어가는 것도 중요하다.

한국어 텍스트가 포함된 페이지의 스크린샷

이 시스템이 노트북LM이랑 다른 이유

한 가지 더 깨달은 게 있었다.

누군가 "그거 그냥 노트북LM으로 법령 올려놓고 물어보면 되지 않아요?"라고 할 수 있다. 실제로 나도 처음엔 그 선택지를 고려했다.

차이는 이거다. 노트북LM은 질문하면 답해준다. 이 시스템은 판정 대상을 입력받아서 결정을 내린다.

민원인이 "돌출간판, 6층, 가로 2m, 세로 4m, 조명 있음"을 입력하면 시스템이 "설치불가 — 세로 3.5m 초과"를 반환한다. 담당자가 판단하는 게 아니다. 시스템이 법령 기준대로 판단한다. 담당자마다 달라지는 해석의 여지가 없다.

챗봇과 결정 시스템의 차이. 그게 이 프로젝트의 핵심이었다.


✅ 결과 (After)

Before vs After

항목

Before (Day 1 시작)

After (Day 3 완료)

판정 종류

허가/신고만

허가/신고/설치불가 모두

커버 간판 수

4종

12종 전체 + 세부 조건

세션 관리

매번 처음부터 설명

handoff.md로 이어받기

배포 계획

없음

Windows PC + Docker 내부망 배포

GitHub

없음

연결 완료


💬 이 과정에서 배운 AI 활용 팁

효과적이었던 것

  1. handoff.md로 컨텍스트를 이어간다: 새 세션을 열 때마다 AI에게 상황을 설명하지 말고, 직전 세션 AI가 남긴 인수인계 문서를 넘겨라. 그게 훨씬 빠르다.

  2. 큰 작업은 TASK 단위로 쪼갠다: "이 기능 다 만들어줘"보다 "TASK-1 진행해" → 완료 확인 → "TASK-2 진행해" 방식이 AI가 길을 잃지 않는다.

  3. 계획에 자기검증을 붙인다: 계획을 받고 나서 한 번 더 "이 계획에 논리적 오류나 빠진 부분이 없는지 스스로 검토해라"고 하면 품질이 올라간다.

  4. 오픈소스를 먼저 찾는다: 처음부터 만들려 하지 말 것. 이미 검증된 구조를 내 상황에 맞게 조합하는 게 훨씬 빠르고 안정적이다.

이렇게 하면 안 돼요

  1. AI 결과를 그냥 믿지 말기: RAG 근거 조문이 엉뚱하게 나온 것처럼, AI도 틀린다. 특히 법령처럼 정확도가 중요한 데이터는 반드시 직접 확인.

  2. 큰 작업을 한 번에 맡기지 말기: 범위가 넓은 작업일수록 AI가 중간에 흔들린다. 잘게 쪼개서 하나씩 확인하면서 가야 한다.

  3. AI가 막혀도 억지로 밀어붙이지 말기: RAG 조문 오류처럼 당장 해결이 안 되는 것도 있다. 인정하고 다음으로 넘어가는 것도 전략이다.

🌍 다른 업무에 적용한다면?

handoff.md + TASK 단위 방식은 간판 판정 시스템에만 쓰이는 게 아니다.

  • 보고서 작성처럼 단계가 나뉘는 작업

  • 데이터 정리처럼 반복적이지만 판단이 필요한 작업

  • 여러 날에 걸쳐 이어가야 하는 프로젝트

어떤 업무든 "이 작업을 TASK로 쪼갤 수 있는가?" 를 먼저 물어보는 것. 그리고 세션이 끊길 때마다 AI에게 인수인계 문서를 남기게 하는 것. 이 두 가지만 해도 AI와의 협업 품질이 눈에 띄게 달라진다.

🚀 앞으로의 계획

이제 시스템은 완성됐다. 다음은 실제 창구에서 쓰이는 것을 보는 것이다.

강남구 내부망에 배포하고, 실제 담당자가 민원인 앞에서 판정 버튼을 누르는 장면. 그게 목표다. 코드가 아니라 업무가 바뀌는 것이 진짜 완성이다.

📋 재사용 가능한 프롬프트

프롬프트 1: 세션 인수인계 문서 만들기

이번 세션을 종료하기 전에 다음 세션을 위한 handoff 문서를 작성해줘 포함할 내용: 오늘 완료한 작업, 다음에 해야 할 작업, 현재 막힌 부분, 주의사항

프롬프트 2: 큰 작업을 태스크로 쪼개기

[목표]를 달성하기 위한 전체 계획을 세워줘 독립적으로 실행 가능한 TASK 단위로 분리해서 목록으로 작성해줘 각 TASK는 완료 여부를 체크할 수 있게 명확하게 정의해줘

프롬프트 3: 계획 자기검증

방금 세운 계획을 스스로 다시 검토해라 논리적 오류, 빠진 전제, 단계 간 충돌 가능성이 없는지 자기검증해라

2

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요