← 로그

두 달 만에 최우수팀: B-BOT 개발 회고

KT 디지털인재장학생 부산팀. 범위를 다시 협상하고, 혼자서 프론트·백엔드·크롤러·RAG를 연결해 PoC를 완성하기까지.

KTB-BOTRAGFlaskReactOpenAI챗봇회고

2025년 KT 디지털인재장학생으로 선발되어 부산팀의 AI 기반 사회문제 해결 프로젝트에 참여했다. 결과부터 말하면 최종 발표에서 18개 팀 중 최우수 프로젝트상, 개인으로는 최우수 디지털인재상을 받았다. 그 과정에서 배운 것을 남겨둔다.

처음 받은 과제는 너무 컸다

처음 전달받은 과제는 부산 청년에게 창업지원 제도와 공고를 한 번에 안내하는 챗봇이었다. 그런데 개발 기간은 두 달, 전담 개발자는 사실상 나 한 명. 이 범위로는 정확성과 완성도를 둘 다 지키기 어렵다고 판단했다.

팀원들과 제공 가능한 데이터와 일정을 다시 검토하고, 청년공간과 프로그램 안내에 먼저 집중하자고 제안했다. KT 블루보드와 함께 부산경제진흥원에 개발 여건과 대안을 설명했고, 논의 끝에 범위를 조정했다. 고객의 요구를 그대로 받아들이기보다 제한된 조건에서 실제로 구현할 수 있는 형태로 바꾸는 일. 이 프로젝트에서 가장 중요한 결정이었다.

무엇을 만들었나

B-BOT(부산 청년 공간 알리미). 부산 34개 청년공간과 프로그램 정보를 버튼 · 지역 지도 · 키워드로 탐색하고, 버튼으로 해결되지 않는 질문은 GPT-4o RAG가 DB에 저장된 정보만 근거로 답한다.

구분 스택
Frontend React(Vite), GitHub Pages, GitHub Actions
Backend Flask, SQLAlchemy, SQLite, Gunicorn, Render
데이터 requests + BeautifulSoup 크롤러, override 병합 로직
AI OpenAI API(GPT-4o), RAG, 프롬프트 엔지니어링

정보 수집부터 검색 · 답변 · 화면까지 직접 구현했다.

설계 문서 먼저, 코드는 그다음

데이터 모델, API 명세, 크롤링 · override 병합 로직을 담은 설계 문서를 먼저 쓰고, AI 개발 도구가 생성한 코드가 스펙과 일치하는지 단계별로 대조 검증했다. 백엔드 구현 후에는 API 키 노출 여부, CORS 설정, 개인정보 미수집 원칙을 별도로 점검했고, 프론트엔드는 라이트/다크 모드 대비와 모바일 레이아웃을 직접 확인했다.

품질은 데이터에서 갈렸다

1차 개발 후 팀원 전원이 서비스를 직접 쓰며 34개 청년센터의 링크 · 전화번호 · 주소 오류를 하나하나 검증하는 QA를 했다. 이 과정에서 크롤링이 요청 시점마다 실행되어 타임아웃이 나는 문제를 발견했고, 서버 기동 시 1회 크롤링 후 캐시로 응답하고 매일 자동 갱신하는 구조로 바꿨다.

RAG 쪽은 질문 유형별 프롬프트 비교, 메타데이터 기반 필터링, 재랭킹으로 잘못된 응답을 줄였다. 응답 오류율 기준 약 18% 개선.

시연, 그리고 피드백

8월 초 부산경제진흥원 · 부산청년센터 · KT 담당자 앞에서 시연했다. “프로그램 정보를 더 쉽게 확인하고 싶다”, “디자인을 개선해 달라”는 의견을 받아 반영해 다시 전달했다. 요구를 듣고 현실적인 대안을 제시하며 합의를 만들어가는 일이 재미있다는 걸 이 자리에서 느꼈다. 시연 자리에서 만난 지역 공공기관이 KT의 고객이기도 하다는 점에서, B2B 컨설팅 쪽에도 관심이 생겼다.