안녕하세요 오늘은 교내 AI 자동화 시스템 개발 대회에 참가한 후기를 남겨보려고 합니다!
아쉽게도 입상은 못했지만, 독립된 서비스의 워크플로우를 직접 설계하고 배포하고 트러블슈팅까지 팀원들과 진행한, 아주 값진 경험을 할 수 있었습니다 ㅎㅎ
특히 Upstage의 제품군들을 서비스에 적용해 워크플로우를 쉽게 구성할 수 있다는 점이 인상적이었던 것 같습니다.
📍프로젝트 주제
프로젝트의 주제는 'REFILL: 처방전 사진 분석 기반 개인 맞춤형 영양소 추천 서비스'였습니다.
저희 팀은 평소 처방전/영양제 가이드에 따라 약을 복용하고 몸에 기운이 없어지거나 목이 마르는 등의 보편적인 경험에 집중했습니다. (실제로 이러한 현상은 처방전의 약에 따라 특정 영양소가 고갈되며 일어날 수 있는 현상이라고 합니다. 저도 이번 기회에 새롭게 알게 된 사실이었어요!)
사용자의 대략적인 Workflow는 다음과 같습니다. (글 맨 하단에 시연영상 첨부했습니다.)
1. 처방전 사진을 올린다.
2. AI가 처방전 사진을 기반으로 고갈될 수 있는 영양소 / 추가적으로 복용하면 좋은 영양소 등의 내용을 포함한 Report를 생성한다.
3. Report 하단의 'AI에게 더 물어보기' 버튼을 통해 AI챗봇과 대화하며 궁금증을 해소한다.
4. 2에서 생성된 Report는 과거 스토리지에서 찾아볼 수 있으며, 어느 때든 AI에게 질문 할 수 있다.
📍프로젝트에서의 역할
팀 내 개발자로 활약했던 분들은 저 포함 3명이었고, 주영 님은 프론트엔드(Softr 디자인 및 연동), 다은 님은 n8n 파이프라인 구축 및 서버 연결을 맡아주셨어요.
저는 이 프로젝트에서 백엔드 부분(AI/데이터 & RAG 시스템)을 맡았습니다.
자세히 서술하자면 -
- 지식베이스 구축: 성분-영양소 매핑, 영양제 추천 근거, 복용 가이드 데이터
- 데이터 청크 분할 전략 + 임베딩 생성 (Solar Embedding API)
- RAG 검색 로직 (유사도 top-k, 메타데이터 필터)
- AI 챗봇 백엔드 (분석 결과 + 검색된 청크 → Solar LLM 프롬프트)
- Airtable 스키마 설계
- 프롬프트 엔지니어링 (리포트용·챗봇용)
- 필요 역량: Python, 벡터 DB, LLM 프롬프트, 임베딩 개념
이전에 진행했던 팀플들에 비해 큰 비중을 차지하는 부분이어서 살짝 부담으로도 느껴졌으나, 결국 장기적으로 봤을 때 배워가는 것이 많다고 생각했기 때문에 새로운 도전으로 받아들이고 적극적인 마음으로 임했습니다.
📍프로젝트 진행 중 트러블슈팅
1. 챗봇 서버 로컬 실행 테스트 중 Python 버전에 따른 오류가 발생

Python 3.10 문법을 Python 3.9 호환 문법으로 변경해서 다시 빌드 및 실행했다.
| 파일 | 변경 전(3.10+) | 변경 후(3.9) |
| airtable_client.py | prescription_id: str | None = None |
| solar_client.py | conversation_history: list[dict] | None = None |
| main.py | list[dict] | None = None |
ㄴ수정한 문법

챗봇에 연결 성공한 모습이다!

FastAPI로 간단한 챗봇 API를 구현해볼 수 있었다.
2. 챗봇 실행 시 발생한 오류

챗봇을 실행하자 터미널에서 다음과 같이 404(Not Found), 500(Internal Server Error) 에러가 발생했다.

알고보니 Airtable의 링크에서 확인할 수 있는 AIRTABLE_BASE_ID 값을 잘못입력한 탓이었다.
해당 ID값을 입력하고 모델명을 일치시키니 바로 연결이 가능했다.
이렇게 글로 작성하니 별거 아니었지만, 실제로 문제를 파악하고 해결하는데 2시간이 걸렸다.. ㅎㅎ
이를 통해 안정적인 빌드는 기본적인 사항들을 확인하는 꼼꼼한 자세에서 비롯된다는 교훈을 얻을 수 있었다!!
3. 백엔드를 Deploy하는 과정에서의 오류
Github에 올린 백엔드를 Railroad로 배포해 Softr에서 fetch하는 방법을 사용했는데, 실제 배포하는 경험이 처음이었다 보니 여러 시행착오를 겪었다. 간단히 정리하자면 다음과 같다..

핵심은 GitHub 레포 루트와 로컬 폴더 루트가 달랐던 것에서 기인한 문제였다. 다행히 여러 시도들을 통해 잘 배포를 완료할 수 있었다.

저 Online 문구를 보며 정말 기뻤던 기억이 난다 ㅎㅎ
4. Softr 분석 보고서와의 연동 문제
이전의 문제들은 백엔드 구현 / 구축 과정에서의 문제로 분류할 수 있었다면, 해당 문제는 프론트와 연동되어 실제 사용자가 사용중 불편함을 느낄 수 있는 문제이기 때문에 더 복잡하게 느껴졌다.

이렇게 복용약물, 고갈 예상 영양소, 추천 영양제 등의 리스트가 뜨지 않는다는 문제가 발생했다.
백엔드 상의 코드는 prescription_id 에서 Airtable record ID(rec...)를 찾고 있는데, 실제로는 Link 필드라서 Airtable 내부적으로 record ID 배열로 저장되어 있었다. 근데 FIND 함수로 검색할 때 표시되는 값(user_id)과 매칭이 안 된다는 것을 파악하게 되었다.
이 문제는 Airtable의 user_id를 조회하도록 로직을 변경함으로써 해결할 수 있었다.

📍프로젝트 결과물 및 느낀점
실제 사용하는 시연영상을 첨부해보았으니 어떻게 나왔나~정도로 봐주시면 감사하겠습니다 😊





참조: Github 링크 (https://github.com/hj090/RE-FILL)
다같이 오후 9시에 시작해 오전 4시까지 진행하는 등 모든 것을 동원해 힘을 많이 쏟았던 개발 과정이었습니다! 포기하지 않고 같이 개발하고 오류를 개선하는데 최선을 다해준 팀원들에게 너무 고마웠고 힘을 낼 수 있었던 것 같습니다!

또한 다른 팀들의 발표를 들으면서 기획의 중요성을 다시 한 번 깨닫게 된 것 같습니다.
한 팀은 소비자학과만으로 이루어진 팀이었는데, 자신들이 학과에서 배운 지식을 기반으로 소비자의 권리를 보장하는 서비스를 기획한 프로그램을 만들었더군요. 자신들의 지식을 공유하고 공익을 위한 서비스를 기획하는 모습에서 인상적이었습니다!
이외에도 정말 인상적인 팀이 많았고, 발표뿐만 아니라 Upstage 직원분들/교수님의 피드백을 들으며 인사이트가 확장되는 경험을 할 수 있었습니다.
비록 입상하지는 못했지만, 입상이라는 기쁨 그 이상의 뿌듯함과 영감을 얻을 수 있었어요.
역시 도전은 시도하면 할수록 이득이라는 생각이 듭니다.
그럼 다음 도전으로 돌아오겠습니다~
감사합니다!
'ITstudy' 카테고리의 다른 글
| [🏆] AWS NxtCloud | Kirothon for AI : Outthinkers Sookmyung 해커톤 수상 후기 (0) | 2026.05.18 |
|---|---|
| [📖논문리뷰] Retrieval-Augmented Generation for Knowledge-Intensive NLP tasks (0) | 2026.04.01 |