⚙️ NoLife Models - Symfony를 활용한 AI 런타임 (runtimes) 로컬 인프라를 향하여
요약
AI 모델 사용이 원격 API 호출에서 로컬 인프라 구축으로 변화함에 따라, AI는 단순한 챗봇을 넘어 소프트웨어 인프라의 영역으로 진화하고 있습니다. 이 글은 Symfony를 활용하여 이러한 새로운 로컬 AI 모델 생태계를 탐구하는 'NoLife Models' 프로젝트를 소개합니다. NoLife Models는 모델 카탈로그 탐색, Ollama 모델 목록화, 비교 및 벤치마크 실행 등 로컬 인프라 관리에 필요한 기능을 제공하며, 추상화된 런타임 인터페이스를 통해 특정 AI 서비스(Ollama, OpenAI 등)에 종속되지 않는 아키텍처를 구축하는 것이 핵심입니다.
핵심 포인트
- AI 모델 사용의 패러다임이 원격 API 호출에서 로컬 인프라 관리로 전환되고 있음.
- 모델 생태계는 models.dev와 같은 표준화된 카탈로그(구조화된 객체)를 통해 모델의 속성(모달리티, 컨텍스트 윈도우 등)을 정의하고 탐색하는 방향으로 발전함.
- Docker 생태계처럼 AI 런타임 생태계가 구축되고 있으며, Ollama와 같은 로컬 HTTP 서비스가 이를 대중화시키는 핵심 역할을 함.
- NoLife Models는 Symfony 프레임워크를 사용하여 모델 카탈로그 탐색, 모델 비교, 벤치마크 실행 등 '모델 인프라 거버넌스' 기능을 구현한 프로젝트임.
- 핵심 아키텍처 설계는 특정 AI 서비스 제공업체(Ollama, OpenAI)에 의존하지 않는 추상화된 `LocalModelRuntimeInterface`를 정의하는 데 중점을 둠.
수년 동안 AI 모델을 사용하는 것은 원격 API를 호출하는 것을 의미했습니다. 워크플로우는 비교적 간단했습니다: 프롬프트 (prompt)를 보내고, 응답을 기다리고, 텍스트를 표시하는 것이었습니다. 하지만 지난 몇 달 동안, 로컬 모델을 중심으로 새로운 생태계가 형성되고 있습니다. 이 생태계는 다음과 같이 구성됩니다: 모델 카탈로그 (catalogues de modèles), 로컬 런타임 (runtimes locaux), 벤치마크 시스템 (systèmes de benchmark), 구조화된 내보내기 (exports structurés), 관찰 가능성 (observabilité), 거버넌스 (gouvernance), 오케스트레이션 (orchestration). 그리고 점진적으로, AI는 단순한 챗봇 (chatbot)이라기보다 소프트웨어 인프라 (infrastructure logicielle)에 더 가까워지기 시작했습니다. 이러한 맥락에서 * NoLife Models - : NoLife Models GitHub SlideWire presentation repository 가 탄생했습니다. 이는 AI 모델을 둘러싼 이 새로운 로컬 인프라 계층을 탐구하기 위해 설계된 Symfony 8 프로젝트입니다.
문제: 로컬 모델의 폭발적 증가
오늘날 Qwen, Llama, Granite, Gemma, Mistral, Phi, DeepSeek 등 엄청난 양의 모델이 존재합니다. 그리고 각 모델은 다음과 같은 특성을 가집니다: 서로 다른 크기, 서로 다른 양자화 (quantizations), 서로 다른 능력, 서로 다른 컨텍스트 윈도우 (context windows), 서로 다른 동작 방식. 따라서 문제는 더 이상 "어떻게 모델을 사용하는가?"가 아니라, "어떤 모델을, 어떤 맥락에서, 어떤 런타임 (runtime) 위에서, 어떤 성능으로 사용할 것인가?"가 되었습니다.
models.dev: 모델의 표준화된 카탈로그를 향하여
이러한 진화 과정에서 특히 흥미로운 프로젝트는 models.dev 입니다. 아이디어는 간단합니다: 모델을 도구들이 활용할 수 있는 구조화된 객체 (objets structurés)로 변환하는 것입니다. 이제 우리는 단순히 "모델 이름"만을 말하지 않습니다. 이제 우리는 다음과 같은 요소들을 이야기합니다: 모달리티 (modalities), 추론 플래그 (reasoning flags), 가격 책정 (pricing), 기능 (capabilities), 컨텍스트 윈도우 (context windows), 제공업체 (providers), 런타임 호환성 (compatibilité runtime). 이는 Docker Hub가 컨테이너 (containers)에 대해 했던 역할과 매우 유사합니다.
modles: 소프트웨어 아티팩트 (artefacts)로서의 모델 탐색
이 아이디어를 중심으로 modles와 같은 탐색 인터페이스도 등장하고 있습니다. 이제 주제는 모델의 실제 능력을 필터링하고, 비교하고, 탐색하고, 이해하는 것으로 확장됩니다.
우리가 containers, packages, runtimes, cloud images, OCI와 함께 시작했던 방식과 정확히 일치합니다.
Docker ecosystem ↔ AI runtime ecosystem
Docker와의 비유는 점점 더 적절해지고 있습니다.
Docker ecosystem
- Docker Hub
- Images
AI runtime ecosystem
- models.dev
- GGUF / model weights
- dockerd
- Ollama / Kronk / vLLM
- Kubernetes
- agent orchestration
- Observability (inference tracing)
- OCI runtime
- runtime abstraction layers
따라서 주제는 더 이상 단순히 "LLM을 실행하는 것"이 아닙니다. 주제는 "모델 인프라를 거버넌스(governing)하는 것"이 됩니다.
Ollama: 로컬 HTTP 런타임 (runtime)
이러한 접근 방식을 대중화했을 가능성이 높은 런타임은 바로 Ollama입니다.
Ollama는 모델을 로컬 HTTP 서비스로 노출합니다. 몇 가지 엔드포인트(endpoints)만 있으면 충분합니다:
- /api/tags
- /api/generate
- /api/chat
그러면 즉시 다음과 같은 일이 가능해집니다:
- 어떤 애플리케이션이든
- 어떤 언어든
- 어떤 오케스트레이터(orchestrator)든
로컬 모델과 상호작용을 시작할 수 있습니다. 이러한 단순함은 매우 강력합니다.
NoLife Models
이러한 통찰이 바로 다음의 생성 동기가 되었습니다:
NoLife Models
NoLife Models는 다음과 기술로 구축된 로컬 애플리케이션입니다:
- Symfony 8
- Symfony UX
- Twig
- Live Components
- Turbo
- HttpClient
이 프로젝트를 통해 다음을 수행할 수 있습니다:
- 모델 카탈로그 탐색
- 설치된 Ollama 모델 목록화
- 여러 모델 비교
- 벤치마크 실행
- 결과 내보내기
런타임 지향 아키텍처 (A runtime-oriented architecture)
이 프로젝트의 핵심은 아마도 다음과 같은 추상화(abstraction)일 것입니다:
interface LocalModelRuntimeInterface {
/*- @return list<LocalModel> */
public function listLocalModels(): array;
public function generate(GeneratePromptCommand $command): ModelInferenceResult;
}
이 결정은 아키텍처를 완전히 변화시킵니다.
도메인(domain)은 더 이상 다음 사항에 의존하지 않습니다:
- Ollama
- OpenAI
- 특정 프로바이더(provider)
도메인은 오직 다음 사항에만 의존합니다:
- 추론 계약 (inference contract)
그리고 이는 즉시 다음과 같은 미래를 향한 길을 열어줍니다:
- LM Studio
- vLLM
- OpenAI 호환 런타임 (OpenAI-compatible runtimes)
- 임베디드 런타임 (embedded runtimes)
- 어댑터 (adapters)
Symfony 8 + 육각형 아키텍처 (Hexagonal Architecture)
이 프로젝트는 DDD (Domain-Driven Design) / 육각형 (hexagonal) 접근 방식을 따릅니다.
UserInterface ↓ Application ↓ Domain ports ↓ Infrastructure adapters
책임은 다음과 같이 분리됩니다:
| 계층 (Layer) | 역할 (Role) |
|---|---|
| Domain | 계약 (contracts) + 모델 (models) |
| Application | 오케스트레이션 (orchestration) |
| Infrastructure | Ollama 어댑터 (adapter), 내보내기 (exports) |
| UserInterface | Symfony UX + 컨트롤러 (controllers) |
이로써 런타임 (runtime)은 단순한 인터페이스의 구현체가 됩니다.
로컬에서 모델 비교하기
이 프로젝트에서 가장 흥미로운 요소 중 하나는 비교 엔진 (comparison engine)입니다.
동일한 프롬프트 (prompt).
동일한 런타임 표면 (runtime surface).
동일한 설정 (configuration).
하지만 여러 모델을 사용합니다.
이를 통해 다음을 비교할 수 있습니다:
- 지연 시간 (latency)
- 로딩 시간 (temps de chargement)
- 생성 속도 (vitesse de génération)
- 추론 (raisonnement)
- 응답 품질 (qualité des réponses)
- 환각 (hallucinations)
- OCR 비전 (OCR vision)
가장 중요한 점은 수학적 벤치마크 (benchmarks)만으로는 충분하지 않다는 것입니다. 품질은 여전히 인간의 읽기(human reading)에 달려 있습니다.
벤치마크 및 재현성 (Benchmarks et reproductibilité)
이 프로젝트는 벤치마크 스위트 (benchmark suites)를 실행하는 것도 가능하게 합니다.
핵심 아이디어는 통제된 파라미터 (paramètres) 하에 여러 모델에 대해 여러 프롬프트를 실행하고 구조화된 결과를 생성하는 것입니다.
이는 프로젝트를 점진적으로 다음 단계로 이동시킵니다: 평가 시스템 (système d’évaluation) → 런타임 관측소 (observatoire runtime) → 관측성 계층 (couche d’observabilité).
내보내기 (Exports) 및 거버넌스 (gouvernance)
내보내기는 매우 중요한 역할을 합니다:
JSON, CSV, Markdown
아티팩트 (artifact) 없는 추론 (inference)은 감사 (auditer)하기 어렵기 때문입니다.
내보내기를 통해 다음이 가능합니다:
추적 (tracer), 재현 (reproduire), 비교 (comparer), 보관 (archiver), 분석 (analyser).
그리고 바로 이 지점에서 단순한 "프롬프트 엔지니어링 (prompt engineering)"을 벗어나게 됩니다.
Kronk: 또 다른 방향
특히 흥미로운 또 다른 프로젝트는 Kronk입니다.
Kronk를 "더 나은 Ollama"로 봐서는 안 됩니다.
철학이 다릅니다.
Ollama는 모델을 로컬 HTTP 서비스로 노출합니다.
Kronk는 추론 (inference)을 애플리케이션 프로세스 내부로 직접 밀어 넣습니다.
이로써 추론은 다음과 같이 변합니다:
임베디드 (embarquée), 프로그래밍 가능 (programmable), 애플리케이션 런타임에 통합 (intégrée au runtime de l’application).
다음과 함께:
GGUF, llama.cpp, OpenAI와 호환되는 스트리밍 API (streaming APIs).
모델은 점진적으로 단순한 HTTP 엔드포인트 (endpoint)가 아니게 됩니다.
그것은 소프트웨어 의존성 (software dependency)이 되어갑니다.
로컬 AI 인프라를 향하여
이러한 진화에서 가장 흥미로운 점은, 아마도 클라우드에서 보았던 것과 동일한 패턴들이 다시 나타나고 있다는 사실일 것입니다: 런타임 카탈로그 (runtime catalogues), 관찰 가능성 (observability), 오케스트레이션 (orchestration), 정책 (policies), 내보내기 (exports), 트레이스 (traces), 거버넌스 (governance). 하지만 이번에는 로컬 추론 (local inference)에 적용되고 있습니다.
결론
NoLife Models는 다음과 같은 용도로 설계되지 않았습니다: 챗봇 (chatbot), OpenAI의 래퍼 (wrapper), 또는 단순한 Ollama UI.
대신 이 프로젝트는 더 넓은 질문을 탐구합니다: 로컬 AI 런타임 (AI runtimes) 인프라는 어떤 모습일까? 다음과 같은 요소들을 포함하여: 런타임 카탈로그 (runtime catalogues), 벤치마크 (benchmarks), 내보내기 (exports), 관찰 가능성 (observability), 런타임 추상화 (runtime abstractions).
우리는 아마도 이 생태계의 초기에 머물러 있을 것입니다. 하지만 프리미티브 (primitives)들이 이미 나타나기 시작했습니다. 그리고 이를 관찰하는 것은 매우 흥미로워지고 있습니다.
Depots github 🐙
AI 모델의 오픈 소스 데이터베이스 (An open-source database of AI models). : https://github.com/anomalyco/models.dev
☺️ 오픈 소스 모델을 로컬에서 실행하기 위한 개인용 엔진 (Your personal engine for running open source models locally) : https://github.com/ardanlabs/kronk
Sources 🚀
J’ai créé une app pour comparer vos LLM en local avec Ollama. : https://www.youtube.com/watch?v=YzxE3jQqItI
🧩 Extract Insights from Videos with Docling + OpenRAG : https://www.youtube.com/watch?v=Y0b1TANWZ-Y
🤯 AI Model explorer based on models.dev : https://github.com/dgageot/modles
😮 Baby steps with Kronk https://k33g.hashnode.dev/baby-steps-with-kronk-1
😋 How to cook a little coding agent with Docker Model Runner and Docker Agent (and sbx) https://k33g.org/20260419-little-coder-agent.html
😍 fabpot Activity https://github.com/symfony/models-dev/commits?author=fabpot
🔗 Liens de la semaine
Symfony Level Up #9 Sylvain Blondeau : https://symfonylevelup.substack.com/p/symfony-level-up-9
Les géants US vont toujours plus loin (trop ?) et la Chine montre la voie : https://www.youtube.com/watch?v=L4LCSXvA7LU
Oussama Pour la suppression massive d’emplois !
https://www.youtube.com/watch?v=GLfPVWRns-U AI로 월 0에서 10,000€까지: 내가 가졌으면 좋았을 정확한 방법: https://www.youtube.com/watch?v=sRtQmFEhlBE Fouloscopie 어떻게 효과적으로 대화할 것인가? https://www.youtube.com/watch?v=8J1opDS1otY MACI #158 - 우리의 관리형 Kubernetes인 CKE를 만나보세요 - Antoine Blondeau 및 Gilles Biannic와 함께: https://www.youtube.com/watch?v=FtAF5kN_8pY Github Open Source Friday with Spec-Kit : https://www.youtube.com/watch?v=2IArMAhkJcE Docker Model Runner와 Open WebUI를 사용하여 로컬에서 이미지 생성하기 https://www.docker.com/blog/blog-generate-images-locally-dmr-open-webui/ 국방 디지털 사령부 (Commissariat au Numérique de Défense) - DEF'LAN 2026 | 라이브: https://www.youtube.com/watch?v=OW4VCl6P-l4 왜 TTS 모델이 이제 LLM처럼 보이는가 — Samuel Humeau, Mistral : https://www.youtube.com/watch?v=3jGAU2sbAyY 채팅 에이전트에게 목소리를 부여하세요 — Luke Harries, ElevenLabs : https://www.youtube.com/watch?v=DCZZ3AJKzuc Voice AI:
(Carlos Diaz와 함께) : https://www.youtube.com/watch?v=74TpWDkYpdE Suraj vs The Future | With ChatGPT : https://www.youtube.com/watch?v=bMmEEa8-6fU 초보자가 모르는 Claude의 가장 중요한 3가지 기능 : https://www.youtube.com/watch?v=tkpdPvx65A0 Next.js에서 비디오 스트리밍을 개선하는 방법 - 적응형 비트레이트 스트리밍 (Adaptive Bitrate Streaming) 튜토리얼 | ImageKit : https://www.youtube.com/watch?v=MKbdkWfVZ1w 프랑스 관료주의에 특화된 AI 에이전트를 위한 기술 : https://github.com/romainsimon/paperasse 체스 코치 만들기 — Anant Dole와 Asbjorn Steinskog, Take Take Take : https://www.youtube.com/watch?v=FlzpEGHNVKQ Uncode School과 함께 노코드 (no code) & AI를 활용한 프로덕트 빌더 (Product Builder) 되기 : https://www.youtube.com/watch?v=8Ikwj_SNSNI Anthropic이 방금 범용 인공지능 (AGI)을 매장했습니다 (그리고 아무도 이를 알아차리지 못했습니다) : https://www.youtube.com/watch?v=qqhQDBClm1Y 이제 당신의 에이전트가 모델을 학습시킬 수 있습니다 — Merve Noyan, Hugging Face : https://www.youtube.com/watch?v=OV56RddyFuU 🎶 음악 크레딧 New York New Jersey에서 온 약간의 발재간. ⚽ #FIFAWorldCup : https://vm.tiktok.com/ZNRGDjFGx/ @fifaworldcup New York New Jersey에서 온 약간의 발재간. ⚽ #FIFAWorldCup ♬ sonido original - FIFA World Cup 중국 학생들이 베이징 인민대회당에서 Trump 대통령을 환영합니다 💐 🎥: @MargoMartin47 중국 학생들이 베이징 인민대회당에서 Trump 대통령을 환영합니다 💐 🎥: @MargoMartin47 pic.twitter.com/wChlpVnphh — Rapid Response 47 (@RapidResponse47) 2026년 5월 14일
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기