"이번 주말에 축구할래?": 친구들과의 만남을 재개시키는 오픈소스 AI
요약
이 글은 친구들과의 축구 모임에서 발생하는 일정 관리 및 사후 기록의 어려움을 해결하기 위해 개발된 오픈소스 AI 기반 봇 'Star Boy'를 소개합니다. Star Boy는 Telegram을 통해 경기 전 알림, 참석 여부 확인, 그리고 경기 후 통계 공유 및 플레이어 간 상호작용 기능을 제공하여 모임을 활성화하고 추억을 정리하는 데 도움을 줍니다.
핵심 포인트
- Telegram 기반의 오픈소스 AI 봇 'Star Boy'를 소개합니다.
- 경기 전: 일정 잡기, 참석 여부 확인, 알림 기능으로 참여율을 높입니다.
- 경기 후: 통계 기록 및 음성 메시지 공유로 추억과 플레이를 정리합니다.
- 주간 리더보드와 선수 카드를 통해 지속적인 동기 부여가 가능합니다.
"이번 주말에 축구할래?" 💬 … 읽음 14
모든 축구 친구들 사이에는 이런 그룹 채팅방이 있습니다.
누군가 수요일에 "주말에 경기 할까?"라고 물어봅니다. 몇몇 사람이 엄지손가락을 치켜세웁니다. 누군가는 "갈게."라고 말합니다. 금요일이 오면, 아무도 시간을 정하지 않았고, 절반은 잊었고, 나머지 절반은 누가 올지 기다립니다. 토요일 오후가 되어도 우리는 여전히 실내에 앉아 스크롤을 하다가 다음 주에 하자고 스스로에게 말합니다.
그리고 우리가 실제로 경기를 하게 되면, 아무것도 기억나지 않습니다. 누가 골을 넣었는지? 누가 팀을 이끌었는지? 누가 증거 없이 경기장에서 자신이 최고의 선수라고 주장하는지? 논쟁은 왓츠앱(WhatsApp)에서 며칠 동안 계속되고 누구도 이를 정리할 수 없습니다.
이것이 바로 제 친구들입니다. 우리는 게임을 사랑하지만, 경기 일정을 잡는 것이 어렵고 그 이후의 후속 조치가 없기 때문에 너무 많은 시간을 실내에서 보냅니다.
그래서 저는 그들을 위해 Star Boy를 만들었습니다. 하나로 연결됩니다. ⚽
Star Boy가 하는 일
Star Boy는 여러분의 지역 운동장을 친구들이 이미 열어둔 앱인 Telegram 안에서 살아 숨 쉬는 리그로 바꿉니다.
경기 전: 집 밖으로 나가게 합니다
- 모든 운동장(저희 곳은 <!-- ADD: your pitch name -->)에는 그곳에서 뛰는 모든 사람들의 페이지가 있습니다.
- 봇에서 ⚽ 새 경기를 누르고 → 버튼을 이용해 운동장, 날짜 및 시간을 선택하고 → 초대할 사람들을 체크합니다. 모두에게 **참석 ✅ / 어려움 ❌**이 포함된 초대가 전송됩니다.
- Star Boy는 여러분의 WhatsApp 상태에 올릴 수 있는 경기 포스터를 보냅니다.
- 그리고 친절하게 상기시켜줍니다: 전날 밤("내일: 오후 5시 축구. 너 올 거니? 🔥"), 두 시간 전, 그리고 답장을 하지 않은 사람에게는 한 번 더 알림을 보냅니다. 이 부분이 실제로 사람들이 방에서 나오게 만드는 부분입니다.
경기 후: 어떻게 진행되었는지 물어봅니다
- 경기가 끝나면, Star Boy가 모두에게 메시지를 보냅니다: "오늘 경기 어땠어? ⚽"
- 사용자는 자신의 **통계(골, 어시스트, 블록 및 태클, 또는 골키퍼의 경우 세이브 수, 그리고 Man of the Match 투표)**를 탭하거나, 우리가 평소 대화하는 방식으로 음성 메시지를 보낼 수 있습니다: "우리 5대 3으로 이겼어. 내가 두 골 넣고 에메카에게 어시스트 하나 해줬지."
- 팀원들은 한 번의 탭으로 사용자의 주장을 확인하거나 반박할 수 있습니다. 확인되지 않은 통계는 없습니다. (네, 저희는 역주행 방지 기술을 만들었습니다. 🧢)
- 그리고 가장 좋은 부분: "너는 마치…처럼 플레이했어." 두 골과 어시스트? 프라임 제이제이 오코차 같았어. 블록 여섯 개? 타리보 웨스트 에너지 같아. 조용한 경기였니? "비시즌 컨디션이야 😅. 다음 주가 네 차례야."
매주: 기록을 유지합니다
- 경기장별 리더보드: 골든 부트, 플레이메이커, 최고의 꾸준함(출전 경기 수), 철벽 수비수(The Wall), 최다 MOTM, 최다 승리.
- 모두를 위한 선수 카드가 있으며, 여기에는 컨디션 가이드, 연속 기록, 그리고 사용자가 "~처럼 플레이했던" 전설들이 담겨 있습니다.
- ⚖️ 판결: 두 명의 선수를 선택하고, Star Boy는 오직 확인된 수치만을 기반으로 판결을 내립니다. "바요가 이겼어: 툰데의 3골 대 5골, 경기당 평균 1.67골. 툰데, 공 좀 패줘." 예전에는 며칠 동안 이어지던 논쟁들이 이제는 하나의 메시지로 끝납니다.
- 경기 사진은 바로 봇으로 전송되어 게임의 갤러리에 저장됩니다.
이것이 제가 Star Boy가 우리 선수들의 경기장 위 모습을 어떻게 기록하는지 말할 때 의미하는 바입니다: 우리의 통계, 우리의 발전, 그리고 우리가 자랑할 권리까지. 다음 주에 돌아올 이유를 만들어줍니다.
데모
🔗 실시간: starboy-o9g6.onrender.com · 🤖 봇: @starboy_soccerbot
외부로 확장했습니다

오늘 10월 10일에 했던 축구 경기는 오랫동안 느껴본 것 중 가장 즐거운 시간 중 하나였습니다. 저희는 'Eximia Football Academy'라는 팀이 있는데, 경기 일정을 계속 미루다가 나중에 그룹 채팅방에서 만나 De Angelo에서 아침 8시에 뛰었습니다... 저희는 4인제(4-aside)로 12명이 정도 참여했습니다. 이 이야기를 해서는 안 될 것 같습니다. 골키퍼와 일대일 찬스를 5개나 놓쳤거든요 (변명하자면, 저희는 작은 축구 골대를 사용합니다 :). 하지만 'Starboy'를 활용해서 재미있는 콘텐츠를 만들 수 있어서 정말 즐거웠고, 앞으로도 저희가 정기적으로 축구를 하는 라이프스타일이 되기를 바랍니다.
오픈 소스가 여기서 중요한 이유
운영 비용이 ₦0이라서 거리의 축구 선수들에게도 무료로 유지될 수 있습니다. Star Boy는 다음과 같은 무료 티어를 통해 오픈 웨이트 모델(open-weight models)로 작동합니다: 사고 과정에는 Gemma 4를, 청취 과정에는 Whisper를 사용합니다. 친구들에게 돈을 받거나 광고를 보여줘야 하는 메시지당 비용이 없습니다.
잠금 효과 없음 (No lock-in): 같은 앱이 제 2014년 노트북에서도 작동합니다. Star Boy는 AI_MODE라는 단일 스위치를 가지고 있습니다:
cloud: Google AI Studio의 무료 API를 통해 Gemma 4 (26B)와 Groq의 무료 티어를 통해 Whisper large-v3을 사용합니다. 저희 팀이 사용하는 방식입니다: 빠르고, 노트북 전원을 꺼둘 수 있습니다.local: Ollama + faster-whisper를 이용한 Gemma 4 E2B로, GPU가 없고 RAM이 8GB인 제 2014년 Intel i5 노트북에서 완전히 실행됩니다. 오디오는 기기를 벗어나지 않습니다. 속도는 느리지만 (보고서당 약 5초 대신 30~60초), 경기 후에는 즉각적인 답변이 필요하지 않습니다.
설정 하나만 바꾸면, 정확히 같은 앱이 무료 클라우드 API에서 제 자체 기기로 이동합니다. 이것은 모델들이 오픈이기 때문에만 가능합니다. 만약 제공업체가 내일 약관을 변경하더라도 Star Boy는 계속 작동할 것입니다.
솔직한 고백: 클라우드 모드에서는 음성 메모가 전사(transcription)를 위해 Groq으로 전송됩니다. Star Boy는 그 직후 자체 복사본을 삭제합니다. 만약 이것이 당신의 팀에게 중요하다면, 로컬 모드를 사용하세요.
오픈 모델은 우리의 축구를 배울 수 있습니다. 선수들은 피진어(Pidgin)를 사용하고 이보어(Igbo)를 섞어 쓰면서 "I bang am twice." 같은 말을 합니다. 오픈 모델을 이용하면 프롬프트를 조정하고, 모델을 교체하며, 궁극적으로 나이지리아 선수들이 실제로 말하는 방식에 맞춰 파인튜닝할 수 있습니다. 폐쇄형 API로는 그저 희망만 품게 할 뿐입니다.
작동 방식
| 작업 | 오픈소스/오픈가중치 모델 |
|---|---|
| 음성 메모를 통계로 변환하기 | Whisper (클라우드에서 large-v3, 로컬에서는 faster-whisper) → Gemma 4 |
| ... |
매우 논쟁적인 청중을 위해 작고 신뢰할 수 있는 AI 만들기
축구팀은 모든 것에 이의를 제기하기 때문에, AI는 절대로 숫자를 지어낼 수 없습니다. 제가 Star Boy에 적용한 규칙은 다음과 같습니다: 코드가 사실을 결정하고, Gemma는 이야기만 전달한다.
- 음성 메모: Gemma가 골, 어시스트, 그리고 결과를 추출하면, 코드가 이를 검증합니다. 2개 이상의 숫자는 실제로 말한 내용에 나타나야 하며, 스코어와 결과는 일치해야 하고, 모든 이름은 해당 경기 출전 선수 명단과 일치해야 합니다. 만약 불분명한 부분이 있다면, Star Boy가 "…에 대해서는 확신하지 못했습니다"를 표시하고, 사용자가 원터치로 수정하여 제출할 수 있게 합니다.
- "당신은 ~처럼 플레이했어요…": 코드가 사용자의 통계에서 전설적인 선수(해트트릭의 크로스, 예키니 또는 오심헨; 플레이메이커의 크루스, 사비 또는 미켈 오비; 클린 시트의 에녜아마 또는 부폰)를 선택합니다. Gemma는 그저 한 줄짜리 농담을 작성할 뿐이며, 언급된 모든 숫자는 검증됩니다.
- 결정하기: 코드가 비교 계산을 수행하고 승자를 결정합니다. Gemma가 이를 발표하고 설명합니다. 추측에 의존하거나, 잘못된 선수를 지목하거나, 숫자를 틀린 판결은 거부되고 재시도됩니다.
- 모든 것은 팀 동료들이 확인한 후에야 유효합니다. AI가 제안하면, 팀이 결정합니다.
무엇이 잘못되었고 (그리고 제가 바꾼 것)
- 무료 호스팅이 내 발밑으로 이동했어요. 저는 Gemma와 Whisper를 Hugging Face Spaces에 호스팅할 계획이었지만, 무료 Docker Spaces가 이제 결제를 요구한다는 것을 알게 되었습니다. 그래서 앱을 분리했습니다. Star Boy 자체는 Render의 무료 티어에서 실행되고, AI는 스위치 뒤로 옮겨졌습니다. 이 스위치는 무료 호스팅 오픈 모델이거나 아니면 저의 개인 노트북입니다.
- 모두가 음성 메시지를 보내고 싶어 하지는 않아요. 친구들과 테스트한 후, '내 통계 보기(Tap my stats)' 기능을 추가했습니다. 다섯 가지 간단한 버튼 질문을 할 수 있습니다. 이야기하는 것을 좋아하는 사람에게는 음성을, 그렇지 않은 사람에게는 버튼을 제공합니다. AI는 여전히 자신이 할 수 있는 부분만 처리합니다.
- 웹사이트는 부차적이었고, 핵심은 Telegram이었습니다. 제 팀원들은 또 다른 앱을 원하지 않습니다. 그래서 모든 것(가입, 게임 설정, 보고, 리더보드, 논쟁 해결)이 이제 Telegram 버튼에서 작동합니다.
- 첫 판결들이 너무 공손했어요. Gemma는 5골 대 3골 비교를 '무승부'라고 했습니다. 축구에서 그건 범죄입니다. 이제 코드가 승자를 결정합니다.
다음 계획 (What's next)
- 농구: (데이터 모델은 이미 스포츠에 구애받지 않습니다.)
- 팀 그룹 모드: Star Boy가 게임, 결과 및 주간 리더보드를 팀의 그룹 채팅방으로 직접 게시합니다.
- 시즌 수상과 '이달의 스타 보이(Star Boy of the Month)' 선정.
- 나이지리아 축구 대화에 오픈 음성 모델을 파인튜닝하여 향상된 피진어 및 억양 처리 구현.
제작 과정 (How I built it)
저는 Claude Code를 페어 프로그래머로 삼아 일주일 동안 Star Boy를 만들었습니다. 제품 개요서(product brief)를 작성하고 필요한 결정들(Telegram 우선, 버튼과 음성, 코드가 사실을 결정, 첫 버전이 일반적 보였을 때의 재설계)을 내렸으며, 팀원들과 실제 휴대폰으로 테스트했습니다. 그리고 Claude Code가 마일스톤별로 코드를 작성해 주었습니다.
코드 (Code)
GitHub: github.com/bukeeastrey/starboy
Gemma 4 (Apache 2.0), Whisper, faster-whisper, Ollama, FastAPI, React, MongoDB Atlas 및 Telegram Bot API로 구축되었습니다. 대표 사진: 나이지리아 아마군제(Amagunze)의 피크업 축구 경기 모습 (Pexels 제공 Kenechukwu Emmanuel 촬영).
나의 축구팀을 위하여. 하나된 사랑이여. For my football team. One love. ⚽💛dev.to/challenges/hacktoberfest-week1-2026-10-05)
- 기여하거나 질문할 내용이 있다면 언제든지 환영합니다. 감사합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기