LLM을 활용한 웹 기반 확장 가능한 소프트웨어
TL;DR – LLM은 전통적인 부담 없이 웹 앱을 확장 가능하게 만들며, Cloudflare Dynamic Workers는 이를 생산성 높은 플랫폼으로 구현하기 위해 필요한 격리, 관찰 가능성, 데이터 원시 기능을 이미 제공합니다.
장미형 문제와 LLM의 중요성
대부분의 웹 애플리케이션은 수요 곡선의 상단을 중심으로 서비스하며, 소수의 사용자 니즈를 충족시키지 못하는 장미형(롱테일) 문제를 남깁니다. 작은 사용자 집단을 위한 기능을 추가하면 모든 사용자의 UI가 복잡해지고, 전통적인 개발 주기는 이러한 장미형 요구를 충족시키기에 역량이 부족합니다.
LLM은 경제적 모델을 바꿉니다: 필요에 따라 사용자 맞춤형 코드를 생성할 수 있어, "하나를 위한 소프트웨어"를 취미적인 아이디어에서 확장 가능한 서비스로 전환합니다. 제레미 모렐이 지적한 바와 같이, "지난 1년 동안 사용자들은 갑자기 코드를 말로 만들어내는 능력을 갖추게 되었습니다."
커뮤니티 인사이트
"충족되지 않은 기능의 장미형은 현실입니다. 대부분의 앱은 일반적인 사례를 잘 처리하지만, LLM으로 생성된 확장 기능은 핵심 제품의 부담 없이 이 간극을 메울 수 있습니다." – harlan_pdx (HN 댓글)
웹 기반 확장 가능한 소프트웨어의 실제 모습
확장 가능성은 앱 이벤트(레코드 업데이트, 크론 작업, UI 동작 등)에 연결하고, LLM이 생성한 스크립트를 사전에 격리된 환경에서 실행하는 것을 의미합니다. 사용자는 자연어로 요청을 작성하고, 시스템은 이를 코드로 변환한 후 엄격한 권한 집합으로 실행합니다.
안전한 확장 엔진을 위한 핵심 요구사항
| 요구사항 | 왜 중요한가 |
|---|---|
| 경제적인 실행 – 거의 제로의 대기 비용, 호출당 1센트 미만 | 수천 또는 수백만 개의 스크립트를 저렴하게 실행해야 합니다. |
| 빠른 콜드 스타트 – 요청 경로 확장에서 단일 자릿수 밀리초 지연 | 사용자는 확장을 자연스럽게 느끼기를 기대하며, 백그라운드 작업처럼 느껴지길 원하지 않습니다. |
| 세밀한 제한 – CPU, 메모리, 네트워크, 로그 용량, 실행 시간 | 무한 루프(예: while true { print })와 같은 문제로 플랫폼이 다운되는 것을 방지합니다. |
| 강력한 격리 – 사전 격리된 환경을 통해 한 사용자의 코드가 다른 사용자에게 영향을 주거나 데이터를 유출하지 못하게 합니다 | 다중 테넌트 SaaS는 스펙트르 스타일 공격과 자격 증명 유출을 방지해야 합니다. |
능력 기반 I/O – 코드는 명시적인 참조(예: fetchApprovedEmail)를 통해만 동작할 수 있습니다 |
복잡한 프록시 로직이 필요 없으며, 보안 논리가 명확해집니다. |
기존 웹 규모 확장성: Salesforce의 사례
Salesforce는 다중 테넌트 프로그래머블 플랫폼이 대규모에서 성공할 수 있음을 입증했습니다. Apex 언어를 통해 개발자는 커스텀 엔드포인트, 스케줄된 작업, UI 훅을 추가할 수 있으며, 플랫폼은 격리, 제한, 트랜잭션 안전성을 강제합니다.
"Salesforce의 Apex는 핵심 제품 내에서 실행되는 커스텀 로직을 작성할 수 있게 해주며, 플랫폼이 라우팅, 인증, 테넌트 격리를 처리합니다." – Jeremy Morrell
오늘날의 핵심 차이점은 LLM이 Apex 스타일의 코드를 자동으로 생성할 수 있다는 점이며, 이는 비엔지니어에게도 접근 장벽을 크게 낮춥니다.
실행 원시 기능을 위한 기술 옵션
| 옵션 | 장점 | 단점 |
|---|---|---|
| 인터프리터 (Lua, QuickJS, 커스텀 DSL) | 작은 크기, 쉽게 내장 가능 | 성능 제한, 커스텀 사전 격리 강화 필요 |
| V8 Isolates | 성숙한 JIT, 강력한 격리, Cloudflare 이미 사용 중 | 각 Isolate당 메모리가 많음, 여전히 능력 기반 게이팅 필요 |
| 마이크로VM (Firecracker, libkrun) | 거의 네이티브 수준의 OS 격리, POSIX 지원 | 시작 지연 > 1초, 더 많은 리소스 소모 |
| WebAssembly + WASI | 언어 독립적, 내장 I/O 없음(사전 격리에 적합) | 호스트 측 능력 주입 필요, 도구 복잡성 |
HN 토론에서의 합의는 V8 Isolates와 능력 기반 모델의 조합이 웹 규모 SaaS에 가장 적합하다는 점입니다:
"사전 격리된 실행은 분명히 중요한 요소입니다… 하지만 외부 엔드포인트를 노출하고 접근 제어 로직이 잘못되면 사전 격리의 보안은 의미가 없습니다." – socketcluster
Cloudflare Dynamic Workers – 이미 준비된 스택
제레미 모렐은 2026년 기준으로 확장 가능한 웹 앱을 구축하기 위한 가장 완성도 높고 생산성 높은 프레임워크로 Cloudflare Dynamic Workers를 강조합니다.
요구사항을 충족하는 내장 원시 기능
- 관찰 가능성 – 런타임에 OpenTelemetry 추적 및 테일 로그가 내장되어 있습니다.
- 다중 테넌트 스토리지 – 사용자별 SQLite를 위한 Durable Objects, 블롭 스토리지용 R2 버킷.
- 지속적인 실행 – Dynamic Workflows를 통해 장시간, 재시도 가능한 작업을 지원합니다.
- 소스 제어 – 확장 기능의 버전 관리를 위한 통합 아티팩트 저장소.
- 호스팅된 LLM – Workers AI를 통해 확장 기능이 사용자별 토큰 예산으로 LLM을 호출할 수 있습니다.
- 자체 호스팅 도구 – JavaScript 도구는 동일한 워커 프로세스 내에서 실행 가능해 테스트를 간소화합니다.
샘플 능력 기반 확장
// 호스트 제공 능력
export const getApprovedEmail = () => fetchEmailById(123, env.EMAIL_API_KEY);
// 사용자 생성 스크립트 (LLM 생성)
export default async function process({ getApprovedEmail }: { getApprovedEmail: () => Promise<Email> }) {
const email = await getApprovedEmail();
// ...사용자 정의 로직...
}
이 스크립트는 getApprovedEmail만 호출할 수 있으며, 원시 API 키를 직접 보지 않아 자격 증명 유출을 방지합니다.
포스트에서 강조된 실제 사례
| 도메인 | LLM 기반 확장 예시 |
|---|---|
| AI 에이전트 | Pi에 특정 웹사이트를 분석하고 구조화된 데이터를 반환하는 커스텀 명령어 추가 |
| 기업 내부 플랫폼 | 직원들이 공유 데이터 레이크에 대해 실행되는 사용자 정의 분석 스크립트를 작성하며, 플랫폼이 사용자별 데이터 범위를 강제 |
| 지원 플랫폼 | 고객별 진단 정보로 티켓 뷰를 자동 채우고, LLM이 생성한 "쿼터 재설정" 버튼 제공 |
| 관찰 가능성 도구 | 사용자가 대시보드에 사용자 정의 로그 변환기, 알람 트리거 스크립트, 리소스별 하이퍼링크를 삽입 |
커뮤니티 반응 – 합의점과 의심
- 합의 – 장미형 수요와 LLM 생성 코드의 힘은 널리 인정받고 있습니다.
"충족되지 않은 기능의 장미형은 현실입니다… LLM 생성 확장 기능이 이 간극을 메울 수 있습니다." – harlan_pdx
- 배포 방식에 대한 의심 – 일부는 "하나를 위한 소프트웨어"가 왜 웹 기반일 필요가 있는지 의문을 제기합니다.
"왜 클라이언트/서버 모델이 필요할까요? 왜 배포 방식에 신경 써야 할까요?" – zahlman
- 플랫폼 종속성 우려 – 여러 댓글러들은 Cloudflare가 유일한 호스트가 되기 어렵다고 지적하며, Google이나 Microsoft가 유사한 패턴을 채택할 가능성을 언급합니다.
"Cloudflare가 기본값이 되는 것을 상상하기 어렵지만, Google이나 Microsoft가 이를 할 것이라면 더 자연스럽습니다." – bensyverson
- 보안 중심 시각 – 임의의 프록시보다 능력 기반 설계에 초점을 맞춥니다.
"코드는 전달된 참조를 통해만 동작할 수 있습니다." – ryanrasti
개발자들을 위한 실용적 통찰
- 신뢰할 수 있는 사전 격리 환경부터 시작하세요 – V8 Isolates 또는 WASM + WASI는 강력한 보안 경계를 제공합니다.
- 원시 API가 아닌 능력만 노출하세요 –
fetchApprovedEmail과 같은 함수를 사용자 코드에 전달하세요. 토큰은 절대 직접 전달하지 마세요. - 기존 플랫폼 원시 기능을 활용하세요 – Cloudflare Dynamic Workers의 스토리지, 워크플로우, AI 바인딩을 사용해 다시 만들지 마세요.
- 엄격한 리소스 할당량을 구현하세요 – CPU 시간, 메모리, 네트워크 호출 수를 호출당 제한하여 무한 루프와 DoS 공격을 방지하세요.
- 간단한 공유 모델 제공하기 – 사용자가 자신의 확장을 패키지로 게시하고 동료가 가져다 쓸 수 있도록 하여 "플러그인 마켓플레이스" 모델을 모방하세요.
결론
LLM 지원 코딩은 사용자 맞춤 기능의 장미형 문제를 개발의 고통에서 확장 가능한 서비스로 전환합니다. 능력 기반 사전 격리(V8 Isolates 또는 WASM)와 Cloudflare Dynamic Workers의 내장된 관찰 가능성, 스토리지, AI 통합을 결합하면 개발자는 오늘날 웹 중심의 확장 가능한 플랫폼을 출시할 수 있습니다. 커뮤니티는 그 가능성에 동의하지만, 보안, 비용, 플랫폼 종속성은 첫날부터 해결해야 할 과제라고 경고합니다.
Sources
관련
- Dispatch
- Dispatch
- 프로젝트
- Dispatch
- 프로젝트