Hacktoberfest 오픈 소스 AI 챌린지 주차 2: 부업(Side Hustle)
요약
DepExit은 프로젝트의 위험한 의존성을 사전에 찾아내고, 각 항목에 대해 Gemma 4와 같은 LLM에게 대체 계획을 요청합니다. 이 과정에서 생성된 '의존성 종료 캡슐'에는 JSON 기록, Markdown 페이지, 패치가 포함되어 있어 신뢰할 수 있는 감사 보고서를 제공합니다.
핵심 포인트
- 위험한 의존성을 미리 찾아내고 대체 계획을 제시하는 도구입니다.
- LLM(Gemma 4)의 도움으로 빠르고 체계적인 코드베이스 감사가 가능합니다.
- 보고서와 검토 가능한 패치를 생성하여 실질적인 가치를 제공합니다.
이 글은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle에 제출하는 내용입니다.
제가 만든 것 (What I Built)
유지 관리자들은 보통 무언가 문제가 생겼을 때 특정 의존성(dependency)이 죽었다는 것을 알게 됩니다. DepExit은 위험한 의존성을 미리 찾아내고, 각 항목에 대해 Gemma 4에게 대체 계획을 요청하며, 이 계획을 격리된 사본에 적용하고 모든 것을 재설치한 후 테스트를 실행할 때까지 신뢰하지 않습니다. 각 의존성은 **의존성 종료 캡슐(Dependency Exit Capsule)**을 얻게 됩니다: JSON 기록, 읽기 쉬운 Markdown 페이지, 그리고 패치입니다. 이 안에 있는 모든 사실은 OBSERVED, MEASURED, AI-SUGGESTED 또는 AI · VERIFIED 태그가 붙어 있어, 어떤 주장이 파일에서 왔는지, 어떤 주장이 실행된 코드에서 왔는지, 아니면 모델의 단순한 제안인지 알 수 있습니다.
누가 비용을 지불할까요: 방치된 Python 코드베이스를 맡는 프리랜서와 소규모 에이전시, 그리고 그러한 코드를 물려받은 작은 팀들입니다. 오늘날 이러한 감사(audit) 작업은 하루 이틀 동안 changelogs를 읽고 추측하는 것을 의미합니다. DepExit은 이를 13분 만에 끝내는 실행으로 바꾸어, 고객에게 건넬 수 있는 보고서와 검토할 수 있는 패치를 생성합니다. 건강한 프로젝트에서 잘못된 마이그레이션(migration)은 아무것도 하지 않은 것보다 나쁘기 때문에, 비용을 지불할 가치가 있는 부분은 그것이 실행되기 전까지는 어떤 것도 수정되었다고 주장되지 않는다는 점입니다.
데모 (Demo)
영상 링크-
DepExit.mp4 - Google Drive
![]()
조직 주최 측의 LinkWatch 레포지토리 전체 실행 결과가 examples/linkwatch-run/에 커밋되어 있습니다. 클론(clone)한 후 report.html을 열거나, GitHub에서 SUMMARY.md를 읽어보세요. 이 보고서는 2026년 10월 15일에 Gemini API와 gemma-4-31b-it을 통해 생성되었으며 13분이 소요되었습니다.
| 측정 항목 (Measure) | 결과 (Result) |
|---|---|
| 분석된 의존성 수 (Dependencies analysed) | 16 |
| ... |
코드
GitHub logo sabeenaviklar / H26_404_TeamNotFound_DepExit
DepExit
증거 기반 의존성 이탈 계획 (Evidence-first dependency exit planning). Gemma 4가 제안하고 실행이 결정한다.
Hacktoberfest Hack Day Mumbai × ISTE KJSSE 2026 · 트랙 1: Gemma 4 · 의존성 복원력(Dependency Resilience) · 팀 404_TeamNotFound
DepExit은 Python 저장소를 가리키고, 해당 저장소에 위험을 초래하는 의존성을 찾아내며, 각 의존성에서 어떻게 벗어날 수 있는지 Gemma 4에게 질문한 다음, 변경 사항을 격리된 사본에 적용하고 모든 것을 재설치하며 테스트를 실행하기 전까지는 그 답변을 믿지 않습니다. 그 결과물은 모든 의존성에 대한 **의존성 이탈 캡슐(Dependency Exit Capsule)**입니다: JSON 기록, 읽기 쉬운 Markdown 페이지, 그리고 패치로 구성되어 있으며, 모든 사실에는 출처가 태그됩니다.
| 태그 | 의미 |
|---|---|
OBSERVED | 저장소 파일이나 PyPI 및 GitHub 메타데이터에서 읽음. 아무것도 실행되지 않았습니다. |
| ... | |
| … |
DepExit은 Python 표준 라이브러리만을 사용하므로, 도구 자체를 위해 설치할 것이 없습니다:
`bash
export GEMINI_API_KEY="your-key"
python -m depexit doctor
...
구축 과정 (How I Built It)
이 디자인의 규칙은 Gemma가 제안하고 실행이 결정한다는 것입니다.
- 결정론적 코드(Deterministic code)가 분석합니다. 이 코드는
requirements*.txt와pyproject.toml을 파싱하고,ast를 사용하여 모든 파일에서 임포트, 비공개 API 사용 및 몽키패치(monkeypatches)를 찾습니다. 또한, 깨끗한 가상 환경에 프로젝트를 설치하고, 각 패키지를 개별적으로 임포트하며, pytest를 실행하고, PyPI와 GitHub에서 릴리스 기록을 가져옵니다. - Gemma 4가 사고합니다. 이 모델은 DepExit이 수집한 증거와 관련된 정확한 파일만 받으며, 대체 결정(replacement decision), 코드 수정 사항(code edits), 요구사항 변경 사항(requirement changes) 및 저장소가 의존하는 동작을 포착하는 작은 테스트를 반환합니다. 저는 Gemini API를 통해
gemma-4-31b-it을 사용했으며, 자동으로gemma-4-26b-a4b-it으로 폴백(fallback)됩니다. Ollama를 통한 로컬 추론도 지원됩니다. - 결정론적 코드가 판단합니다. 이 코드는 계획을 새로 복사된 사본에 적용하고, 원래 테스트와 Gemma가 자체적으로 만든 테스트를 모두 원본 의존성 및 대체안에 대해 실행합니다. 계획은 모든 위험 지표(risk indicator)가 사라지고, 아무것도 회귀하지 않았으며, 이전 패키지가 더 이상 참조되지 않을 때만
검증됨(verified)으로 간주됩니다. 만약 실패하면, 구체적인 실패 출력 결과는 수정된 시도를 위해 다시 Gemma에게 전달됩니다.
Gemma는 결코 위험을 결정하거나 자신의 작업을 평가하지 않으며, OBSERVED 또는 MEASURED 필드의 출처가 되지 않습니다. 이 모델이 제안하는 패키지들은 PyPI와 비교되며, 모든 프롬프트와 원본 응답은 캡슐 옆에 저장됩니다.
이전 실행에서는 Gemma의 답변이 잘렸고 아무것도 변경되지 않았음에도 불구하고 requests를 검증된 것으로 표시했습니다. 저는 자체 캡슐을 읽어내서 이를 발견했고, 이후 파서를 수정하고 계획 유효성 검사 및 개별 지표 재검사를 추가했습니다. 커밋된 실행은 수정된 것입니다. 또한 관련 없는 프로젝트인 jazzband/prettytable (337개 테스트)에서 AI 없이 DepExit을 실행했는데, 이 과정에서 제가 같은 날 수정한 네 가지 레이아웃 버그가 노출되었습니다.
개방 혁신(Open Innovation)이 중요한 이유는 무엇일까요?
다른 사람의 코드를 감사하는 도구는 신뢰할 수 있어야 하며, 오픈 모델은 이러한 검증 가능성을 제공합니다.
- 감사 가능성(Auditable). Gemma 4의 가중치(weights)는 Apache 2.0 라이선스를 따르며, DepExit은 모든 프롬프트와 원본 응답을 저장합니다. 캡슐(capsule)은 블랙박스 답변이라기보다는 재현 가능한 기록이며,
depexit replay를 사용하면 모델을 호출하지 않고도 나중에 저장된 계획을 재검증할 수 있습니다. - 필요할 때만 프라이빗하게 작동. 이 제품에 비용을 지불하는 사용자들은 종종 클라이언트 코드를 폐쇄형 API로 보낼 수 없습니다. DepExit은 Ollama를 통해 로컬 Gemma 4에서 실행될 수 있으므로, 코드가 기기에 머무릅니다.
- 종속성 없음(No lock-in). 유료 서비스가 없으며, 모델을 전환하는 것은 재작성이 아니라 플래그(
--ai google또는--ai ollama)를 변경하는 것만으로 가능합니다.
나의 첫 사용자 (My First User)
제 첫 사용자는 오래된 의존성(dependencies)을 가진 Python 프로젝트에 DepExit을 적용해 보았고, 위험도가 높은 패키지를 식별하고 잠재적인 대체품을 이해하는 데 유용하다고 느꼈습니다. 그들은 특히 DepExit이 AI를 사용하여 마이그레이션(migrations)을 제안하는 것뿐만 아니라 실제로 테스트하고 작동 여부에 대한 증거까지 제공했다는 점을 좋아했습니다.
피드백에 따르면, 상세한 보고서가 의존성 문제를 이해하기 쉽게 만들었지만, 추천된 변경 사항에 대한 더 간단한 요약이 이 도구를 더욱 편리하게 만들 것이라고 합니다. 그들은 레거시 프로젝트(legacy projects) 유지보수에 DepExit을 사용할 것을 고려할 것이며, 개발자들이 무엇부터 수정해야 할지 결정하는 데 도움을 주기 위해 명확한 마이그레이션 우선순위 추가를 제안했습니다.
수상 부문 (Prize Categories)
Gemma, Blackboard.io, Best Use of GitHub Copilot
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기