본 글은 Hacktoberfest Open-Source AI Challenge: Week 3에 제출하는 내용입니다 (테마: 느리고 꾸준하게).
나무늘보는 천천히 움직이고, 에너지를 보존하며, 세상이 자신에게 오도록 내버려 둡니다. 새로운 소프트웨어 프로젝트를 시작하는 것은 그 정반대입니다. 계획을 작성하고, 요구사항을 정의하고, 아키텍처를 설계하고, 디자인 명세를 만들고, 백엔드(backend)와 프론트엔드(frontend), 테스트 코드, Docker 파일을 만듭니다. 매번 이 과정을 거칩니다. 재미있는 부분이 시작되기도 전에 말이죠.
그래서 국제 나무늘보의 날 주간을 맞아 저는 SoftwareUnit을 만들었습니다. 이는 8개의 AI 에이전트로 구성된 가상의 소프트웨어 팀입니다. 제가 프로젝트 아이디어를 입력하면, 이 팀이 검토할 수 있는 완전한 프로젝트를 돌려줍니다.
저장소(Repo): https://github.com/madhumitha-r26/SoftwareUnit_CrewAI
제가 만든 것 (What I Built)
SoftwareUnit은 오픈 소스 프레임워크인 CrewAI를 기반으로 하며, Ollama를 통해 Gemma가 구동되는 자동화된 소프트웨어 배포 워크플로우입니다. 프로젝트 아이디어를 제공하면 다음을 생성합니다:
- 계획 및 디자인 문서(planning and design documents)
- 작동 가능한 애플리케이션 스캐폴드(working application scaffold)
- QA 아티팩트(QA artifacts)
- 배포 파일(deployment files)
이 모든 결과물은 output/ 폴더에 저장됩니다.
생성된 앱들은 하나의 고정된 기술 스택을 따르기 때문에, 모든 에이전트는 동일한 기술 계약(technical contract)으로 작동합니다:
- 프론트엔드 (Frontend): React.js + Tailwind CSS
- 백엔드 (Backend): Node.js + Express.js
- 데이터베이스 (Database): MongoDB
- 배포 (Deployment): Docker + Docker Compose
이러한 스택 요구사항은 아키텍처, 구현(implementation), QA, 배포 전반에 걸쳐 흐르기 때문에, 프론트엔드, 백엔드, 테스트 코드, 그리고 Docker 파일들이 서로 일치하게 됩니다.
팀 소개 (Meet the Crew)
앱을 시작하면 프로젝트 아이디어를 요청하고 다음 단계를 실행합니다:
| # | 에이전트 | 제공하는 것 |
|---|
| 1 | 프로젝트 매니저 (Project Manager) | 프로젝트 계획(Project plan) |
| ... | | |
백엔드와 프론트엔드 작업은 **비동기적(asynchronously)**으로 실행되므로, 병렬로 빌드됩니다. 이후 QA와 DevOps는 이 두 가지 출력을 컨텍스트로 활용합니다. 실제 팀처럼, 후반 역할들은 앞선 역할들이 결정한 내용을 기반으로 구축됩니다.
결과물 (What Comes Out)
output/
documentation/
01_project_plan.md
...
tools.py에 있는 작은 파일 쓰기 도구는 output/ 폴더로 범위가 제한되어 있어, 에이전트들은 이 폴더 내부에서만 작성할 수 있고 제 컴퓨터의 다른 곳에는 쓸 수 없습니다.
사용해보기 (Try It)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install crewai crewai-tools
...
프롬프트가 나타나면 프로젝트 아이디어를 입력한 다음, output/ 폴더를 확인하세요.
데모 (Demo)
[ ](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F99je613ky0cf9373w22l.png
게으름의 보상 (The Lazy Payoff)
- 수동 작업: 2일 이상 소요될 수 있음
- SoftwareUnit 사용 시: 프로젝트가 2~5분 내에 완료됨
- 순수 이득: 프로젝트 개발을 위해 더 많은 시간을 절약할 수 있음
솔직히 말하자면, 출력물은 **뼈대(scaffolding)**입니다. 프로덕션에 들어가기 전에 여전히 검토, 구성 및 테스트가 필요합니다. 하지만 빈 폴더에서 한 번의 프롬프트만으로 검토 가능한 프로젝트로 만드는 것이 제가 원했던 바로 그 '게으름'이었습니다.
생성된 애플리케이션을 실행하려면, 에이전트들이 생성한 프론트엔드와 백엔드 코드 모두에서 자격 증명(credentials)을 업데이트해야 합니다.
여기서 오픈 이노베이션이 중요한 이유 (Why Open Innovation Matters Here)
- CrewAI는 오픈 소스입니다. 에이전트(agents), 태스크(tasks), 크루(crews)가 어떻게 연결되어 워크플로우를 형성하는지 읽을 수 있습니다. 각 역할의 목표와 프롬프트는 일반 Python 파일(
agents.py, tasks.py)에 저장되므로, 팀의 행동 방식을 변경하려면 파일을 편집하기만 하면 되고 벤더에게 의존할 필요가 없습니다.
- Gemma는 오픈 웨이트(open-weight) 모델이며, Ollama를 통해 서비스됩니다. 이 모델은 단일 설정 라인으로 구성되어 있어 프로젝트 전체를 다시 작성하지 않고도 다른 오픈 모델로 교체할 수 있습니다.
- 폐쇄형 제공업체(closed provider)에 대한 토큰당 API 비용이 없다는 점은, 8개의 에이전트가 실행되고 많은 생성이 발생하는 경우 중요합니다.
- **공유 스택 계약(shared stack contract)**은 제가 변경할 수 있습니다. 태스크 프롬프트를 편집하여 MERN을 다른 스택으로 교체하면, 동일한 크루가 완전히 다른 것을 구축합니다.
배운 점 (What I Learned)
- 각 에이전트에게 좁고 명확한 역할과 핸드오프(hand-offs)를 부여하는 것이, 모든 것을 처리하라는 단일 프롬프트보다 더 일관성 있는 출력을 생성했습니다.
- 모든 단계에 걸쳐 하나의 스택 요구 사항을 전달하는 것이 생성된 코드, 테스트, Docker 파일의 일관성을 유지하게 합니다.
- 로컬 LLM(Large Language Model)을 사용하면 제로 레이트 리밋(zero rate limits)으로 프로그램을 실행하는 데 도움이 됩니다.
- 이 애플리케이션을 위해 사용자 인터페이스가 생성될 예정이며, 출력 폴더를 다운로드하기 위한 프로젝트 아이디어를 입력할 수 있는 필드가 포함됩니다.
이를 클론(Clone)하고 자신만의 프로젝트 아이디어를 부여하여 크루가 무거운 작업을 수행하도록 하세요. 이슈(Issues)와 PR(Pull Requests)을 환영합니다. 해피 핵토버페스트(Happy Hacktoberfest)! 🦥
hf26challenge