DEVELOPMENT JOURNAL
AI 리포트를 연결하고, 우리 데이터가 말하는 범위를 다시 점검했습니다
무엇을 만들었나
AI 분석 리포트. 지역과 업종(선택적으로 질문과 재무 입력)을 보내면 리포트가 섹션별로 실시간 전송됩니다. 섹션은 종합 진단·상권 진단·충격 분석·정책자금이며, 재무 입력이 있으면 재무 시뮬레이션이 추가됩니다. 섹션 제목, 위험도 점수, 지표표, 매칭된 상품 목록은 코드가 바로 내보냅니다. AI(Gemini)는 해석 문단만 씁니다. AI 호출이 실패해도 섹션은 대체 문구로 채워집니다.
실제 금융상품 12건. 자리표시자 대신 iM뱅크 3건, 대구신용보증재단 5건, 정책자금 4건을 조사해 넣었습니다(확인일 9/17).
수집과 화면 정리. AI 검색 색인을 모두 마쳤고(3,560건), 상단 바에 홈 버튼과 BI 로고를 달았습니다. 첫 화면은 민트 색 기반의 새 디자인으로 바꿨습니다.
왜 그렇게 했나
- 결론은 코드가, 해석은 AI가 씁니다. 점수와 금액 같은 숫자를 AI가 만들지 않게 하려는 원칙입니다. AI가 실패해도 계산 결과는 남습니다.
- 리포트 모델은
gemini-3.8-flash로 정했습니다. 팀 결정은 “최신 정식(GA) Flash 모델”이었습니다. 모델 목록에서 미리보기·실험 모델을 제외하고 가장 최신인 것을 골랐습니다. - 상품 범위는 팀이 정했습니다. 중소벤처기업진흥공단·소상공인시장진흥공단처럼 대구 전용이 아닌 상품도 넣었습니다. 반대로 특정 구·군만 대상으로 하는 특례보증은 다른 동에 잘못 매칭되지 않도록 매칭 대상에서 뺐습니다.
이번 기록에서 확인한 것
리포트 실측. 대신동·카페로 실제 Gemini를 호출해 보았습니다.
| 항목 | 1차 | 리뷰 수정 후 |
|---|---|---|
| 이벤트 수 / 소요 시간 | 52건 / 10.4초 | 56건 / 12.3초 |
| 매칭 상품 | 10건 | 9건(달성군 한정 상품 제외) |
| 인용 자료 | 10건 | 10건 |
| 오류·대체 문구 | 0 | 0 |
브라우저 자동 시나리오도 통과했습니다(분석 완료 9.9초, 섹션 제목 5개, 참고 자료 표시). 코드 리뷰에서는 본문 인용 번호가 하단 참고 자료와 어긋나는 문제를 찾아 번호 대신 문서 제목으로 인용하게 바꿨습니다. 질문이나 검색 문서 안에 들어 있는 지시를 AI가 따르지 않게 막고, 질문 길이도 500자로 제한했습니다.
매칭 결함 두 가지. 프론트엔드와 상품 데이터가 서로 다른 업종 코드를 써서 한 상품은 어떤 업종에도 매칭되지 않았습니다. 또 사용자 나이를 받지 않는데도 나이를 모르면 청년 상품을 빼고 있었습니다. 둘 다 고쳤고, 나이를 모를 때는 나이 조건을 적용하지 않습니다.
수집 안정화. 온통청년 API가 유효한 키에도 간헐적으로 오류를 내 재시도를 넣었습니다. 조회 방식도 구·군별 8회 호출에서 전국 1회 조회 후 대구만 걸러 내는 방식으로 바꿨고, 결과는 서버 필터 결과와 같은 63건이었습니다. “신규 만료 공고 22건”이 수집 때마다 반복되던 원인은 수집기가 아니었습니다. 테스트가 개발 DB의 실제 데이터를 되돌리고 있었고, 테스트 전용 DB를 분리해 해결했습니다.
데이터 신뢰성 점검. 기능이 동작한다고 분석이 맞다는 뜻은 아닙니다. 그래서 DB를 직접 조회해 보았고, 다음 한계를 확인했습니다.
- 인허가 161,115건은 과거 폐업을 포함한 이력이지 현재 영업 중인 점포 수가 아닙니다. 카드 소비, 생활인구, 개별 점포의 실매출도 아직 없습니다.
- 지도는 선택 연도를 쓰는데 요약 카드는 2026년에 고정돼 있었습니다. 2026년은 연중 자료라 연간 확정치가 아닙니다.
- ‘성장률’의 실제 산식은 매출이 아니라 점포 증감률(개업−폐업 ÷ 전년 말 점포 수)입니다.
- 성내2동의 2025년 카페 폐업률은 약 95.8%(전년 말 190개 대비 폐업 182건)로 나왔습니다. 그중 137건은 개업 후 30일 안에 문을 닫은 기록입니다. 팝업 같은 단기 영업이 섞였을 수 있지만 원인은 확인하지 못했습니다.
- 위험 점수는 지역 간 상대 순위일 뿐 실패 확률이 아닙니다.
- 대구 빅데이터활용센터 데이터는 아직 받지 못했습니다. 기존 계획의 “9/28 반출”은 확정된 일정이 아니라 가정이었습니다.
남은 문제
- 분석 요청을 메모리에 저장하므로 서버 워커를 하나만 띄워야 합니다.
- AI 검색에 지역·기간 필터가 없어 다른 지역이나 오래된 뉴스가 섞일 수 있습니다.
- 배포 환경의 프록시가 실시간 전송을 버퍼링하는지는 배포 뒤에 확인해야 합니다.
- 금융상품 금리는 대부분 은행이 정하는 값이라 “은행별 상이”로 표시합니다.
- 프론트엔드에 ESLint 설정이 없어 lint는 돌리지 않았습니다.
다음에 할 일
- 연도 기준을 통일하고, 점검에서 나온 표현(폐업률·위험 점수)의 수위를 조정합니다.
- 백엔드 전체 코드를 최종 리뷰합니다.
- 배포, 시연 영상, 제출 서류를 준비합니다.