DEVELOPMENT JOURNAL
최종 리뷰로 결함을 걷어내고, 남은 이틀의 역할을 나눴습니다
이 글은 9월 18일 오전의 기록입니다. 이후 연도 전달·사전상담 전환·제출 문서 작성이 완료됐고 코드 프리즈가 해제됐습니다. 현재 상태는 같은 날 후속 기록을 따릅니다.
무엇을 정했나
백엔드 460개 파일(약 13,600줄)을 세 영역으로 나눠 리뷰했습니다. 세 영역 모두 “수정 후 병합” 판정이었고 Critical 결함은 없었습니다. 리뷰 결과를 두고 팀은 다음을 결정했습니다.
- 기본 연도는 마지막으로 완결된 해인 2025년입니다. 2026년은 선택할 수 있지만 “(집계 중)”으로 표시합니다.
- 코로나 충격 데이터를 대구 기준으로 바꿉니다. 서울 코드에서 넘어온 수도권 거리두기 5건을 지우고 대구 타임라인으로 교체합니다.
- 최신 대출금리 조회 기능을 추가합니다. 시뮬레이터 대출금리의 기본값은 한국은행 최신 중소기업 대출금리로 채웁니다.
- 다른 도시 뉴스는 삭제합니다.
리뷰 수정을 반영한 뒤 작업 브랜치를 main에 병합해 팀 공통 기준점으로 삼았습니다. 남은 기간의 역할도 나눴습니다.
왜 이렇게 했나
- 2026년은 아직 한 해가 끝나지 않았습니다. 연중 자료를 전년과 같은 기준으로 비교하면 폐업률이나 점포 증감이 왜곡됩니다.
- 서울 코드의 흔적이 대구 결과에 섞여 있었습니다. 충격·검색 모듈은 서울 원본과 한 글자도 다르지 않았습니다. 구·군 뉴스 키워드 “중구 상권” 같은 것은 광주·울산·대전 기사까지 끌어왔습니다. 모은 587건 가운데 대구가 언급된 기사는 68건이었습니다.
- 역할은 기능 단위로 나눴습니다. 김충식·류준이 기능 하나씩을 백엔드부터 프론트엔드까지 끝까지 맡아 백엔드·프론트엔드 작업을 고르게 나누고, 팀장은 구현 대신 계약·리뷰·제출에 집중합니다.
이번 기록에서 확인한 것
고친 결함(일부).
| 증상 | 조치 |
|---|---|
| “달서구에서 카페”를 서구로 인식 | 긴 지명을 먼저 비교 |
| “1억 5천만원”을 1억으로, “2층 카페 5천만원”은 예산 없음으로 인식 | 단위가 붙은 숫자를 찾고 연속 단위를 합산 |
| 랜드마크 15곳 중 7곳이 존재하지 않는 행정동에 연결됨 | 실제 행정동으로 교정하고 검사 테스트 추가 |
| 잘못된 재무 입력에 서버 오류(500) | 입력 오류(422)로 안내 |
| 여러 단계로 된 정기 수집이 마지막 단계 실패만 감지 | 가장 나쁜 종료 코드를 기록하고 중복 실행 방지 |
뉴스 정리. 키워드에 “대구”를 붙였습니다. 모호한 키워드로 수집됐고 제목·요약에 ‘대구’가 없는 기사는 백업한 뒤 삭제했습니다. 삭제 직후 정기 수집이 옛 코드로 432건을 다시 넣어 한 번 더 지웠고, 병합 후 남은 오염 기사는 0건입니다.
대구 충격 타임라인. 2020년 2월 18일 첫 확진과 신천지 관련 확산, 3월 15일 특별재난지역 선포, 3월 22일부터 12월 7일까지의 거리두기 단계를 넣었습니다. 항목마다 정부 브리핑이나 주요 언론 출처를 달았고, 리뷰에서 3건을 원문과 대조해 일치를 확인했습니다. 이어서 공공데이터로 2020년 12월 8일부터 2021년 7월 27일까지의 거리두기 구간 7건을 추가해 충격 이벤트는 29건이 됐습니다.
API 키가 로그에 남은 사고. 전날 수집이 실패했을 때 오류 메시지에 요청 주소 전체가 담기면서 외부 API 키 하나가 서버 로그 파일에 기록됐습니다. 로그 파일은 저장소에 올리지 않는 파일이라 커밋되지 않았습니다. 로그의 키 값은 가렸고, 주소에 키를 넣는 모든 외부 연동에서 오류 메시지의 키를 지우게 고쳤습니다. 가짜 키로 오류를 흉내 내 메시지에 키가 남지 않는지 테스트했습니다. 해당 키는 재발급을 권장하며, 재발급은 아직 하지 않았습니다.
실서버 검증. 서버를 재시작한 뒤 확인한 결과입니다.
- “달서구에서 카페, 예산 1억 5천만원” → 달서구·1억 5천만 원으로 인식
- 최신 중소기업 대출금리 조회 → 2026년 7월 4.22%
- 잘못된 재무 입력 → 422
- 한 문장 깔때기 E2E 통과(지도 기본 연도 2025), AI 분석 E2E 통과(13.4초, 섹션 제목 5개·참고 자료 표시)
- 백엔드 테스트 334개 통과·1개 건너뜀, 프론트엔드 테스트 96/96, 타입 검사 통과
공공데이터 추가 후보 조사. 전통시장은 브이월드 API로 바로 적재할 수 있습니다(대구 좌표 범위 113곳, 주소 기준 107곳). 나들가게는 파일을 받으면 좌표까지 적재할 수 있습니다. 온누리상품권 가맹점과 백년가게는 주소만 있어 구·군 단위까지만 연결됩니다. 도시철도 승하차는 역 이름을 맞추는 작업이 필요합니다. 마감 전에는 전통시장과 나들가게만 다룹니다. 코드나 DB는 아직 바꾸지 않았습니다.
역할 분담
장민석(팀장)은 구현 대신 API 계약, 배포 구조, 범위와 우선순위, 리뷰와 병합 승인, 제안요약서·시연 대본·접수를 맡습니다. 김충식·류준은 기능 하나씩을 끝까지 맡습니다.
| 기능 | 담당 |
|---|---|
| ① 기간 일치 — 지도에서 고른 연도를 AI 분석까지 전달 | 김충식 |
| ② AI 진행 표시 — 내부 용어 대신 실제 수행 작업으로 안내 | 김충식 |
| ③ 자금 점검 동선과 계산 가정 표시 | 류준 |
| ④ 데이터 신뢰 표시 — 카페 단기 개폐업 검증, 지표의 분모·기간·건수 | 류준 |
| ⑤ 배포 | 김충식(백엔드) · 류준(프론트엔드) |
| ⑥ 공공데이터 적재(여력 시) — 전통시장·나들가게 | 류준 |
| ⑦ 시연 영상 | 김충식(대본 장민석) |
충돌을 줄이기 위해 계약을 먼저 확정하고, 기능별 브랜치 → PR → 팀장 승인 → main 순서로 합칩니다. 코드 프리즈는 9월 19일 18:00, 접수는 9월 20일 오후가 목표입니다.
남은 문제
- AI 분석에는 지도에서 고른 연도가 아직 전달되지 않습니다(기능 ①).
- 뉴스 정기 수집은 모든 키워드가 실패해도 정상 종료로 기록됩니다.
- 일부 테스트는 저장소에 없는 원본 데이터 파일이 있어야 돌아갑니다.
- 배포, 시연 영상, 제안요약서, 제출 서류는 아직 시작하지 않았습니다. 참가신청서는 초안만 있습니다.
- 카페 단기 개폐업의 원인과 위험 점수의 해석은 여전히 검증 전입니다.
다음에 할 일
- 기능 ①~④를 계약에 맞춰 구현하고 PR로 합칩니다.
- localhostdaegu.cloud에 배포하고 배포 주소에서 전체 흐름을 점검합니다.
- 9월 19일 18:00에 코드를 멈추고, 시연 영상과 제안요약서를 마무리해 9월 20일에 접수합니다.