메뉴
HN
Hacker News • 37일 전

LLM 시대의 확장 가능한 소프트웨어

IMP
6/10
핵심 요약

LLM이 코드 작성 비용을 획기적으로 낮추면서, 웹 소프트웨어도 사용자가 자연어로 원하는 기능을 직접 확장할 수 있는 '확장 가능한 소프트웨어(Extensible Software)' 패러다임이 가능해졌다는 주장입니다. 저자는 검증된 코어 위에 사용자가 LLM으로 안전하게 기능을 추가하고 공유할 수 있는 웹 앱이 새로운 기회라고 보며, Cloudflare Dynamic Workers 등이 이 모델에 적합한 실행 환경이라고 제안합니다.

번역된 본문

오늘날 우리가 사용하는 대부분의 웹 소프트웨어는 정적입니다. 개발자는 시간과 주의가 한정되어 있어 가장 많은 사용자층을 위한 기능을 만드는 데 집중합니다. 수요 곡선의 상위 부분은 기존 소프트웨어가 잘 충족하지만, 사용자마다 다른 충족되지 않은 니즈의 롱테일(long-tail)이 존재합니다. 개발자가 모든 기능을 넣으려고 해도, 사용자 인터페이스는 복잡해질수록 사용 불가능해지는 한계에 부딪힙니다. 추가되는 기능 하나하나가 다른 모든 사용자에게 제품을 복잡하게 만듭니다. 해당 기능의 시장이 작다면, 그 기능이 필요 없는 모든 사용자에게 오히려 제품을 나쁘게 만들 수도 있습니다.

이런 맥락에서 LLM 기반 코딩의 부상은 이 롱테일에 속한 무언가가 필요했던 사람들에게 진정으로 힘을 실어주었습니다.

소프트웨어가 말랑말랑해졌다

LLM이 '한 사람을 위한 소프트웨어(Software for One)'를 만드는 데 매우 탁월하다는 점은 이미 분명해졌습니다. 엔터프라이즈 소프트웨어의 모든 복잡성과 책임 문제를 피하고, 한 사람의 워크플로우에 맞춤 제작된 개인 앱입니다. 와이 콤비네이터(Y Combinator)의 Pete Koomen은 이것이 '스몰 소프트웨어(Small Software)'라 불릴 기회라고 생각합니다. 저도 그 생각이 옳다고 봅니다.

Pi는 제가 'LLM 네이티브 소프트웨어(LLM-native software)'라고 부르기 시작한 것의 좋은 예시입니다. 검증된 코어를 갖추고 있으면서도, 요청만으로 거의 무한히 확장 가능하고, 사용자가 자신의 커스터마이징을 다른 사람과 공유할 수 있습니다. 지난 1년간 사용자들은 갑자기 코드를 말로 만들어낼 수 있는 능력을 갖게 되었습니다. 기존 소프트웨어 대부분은 이것을 활용할 수 없습니다. Pi는 이를 적극적으로 활용합니다. 이런 자기 확장(self-extension) 패턴을 따르는 소프트웨어가 더 많아질 것이라고 예상합니다.

하지만 지금까지 플러그인 방식 소프트웨어의 예시는 대부분 로컬 소프트웨어입니다: AI 에이전트, 개발자 IDE, 게임 모드(mods), 블렌더 애드온, CAD 확장 기능 등입니다. 이들은 진입 장벽이 높은 전문 도구인 경향이 있습니다. 웹은 세계에서 가장 성공적인 소프트웨어 배포 시스템입니다. 웹이 뒤처져서는 안 됩니다.

저의 가설은 웹에서의 확장 가능한 소프트웨어(Extensible Software)에 새로운 기회가 있다는 것입니다. LLM은 확장 프로그램 작성 비용을 획기적으로 낮추고, 현대의 샌드박스 프리미티브는 배포 비용을 낮추며 좋은 보안 경계를 제공합니다. 우리는 앱을 견고하고 책임 있는 코어로 만들고, LLM이 빈 부분을 채워넣게 하여 사용자가 여러 방향으로 안전하게 확장할 수 있도록 할 수 있습니다. 사용자에게 초능력을 줄 수 있는 것입니다.

참고: 저는 현재 Cloudflare에서 일하고 있으며, Kenton Varda의 글을 많이 접하면서 이 글의 사고에 큰 영향을 받았습니다. 마지막 부분에서 Dynamic Workers가 이 모델에 특히 잘 맞는다는 주장을 하겠지만, 그 전에 여러 대안을 먼저 다루겠습니다.

이것은 어떤 모습일까?

오늘날 많은 웹 시스템은 사용자가 앱의 변경 사항에 반응할 수 있도록 웹훅(webhook)에 의존합니다. 이것도 어느 정도는 작동하지만, 확장의 진입 장벽이 매우 높습니다. 완전히 별도의 서비스를 구축·운영하고 발생하는 전달 문제까지 처리해야 하니까요. 저는 레코드 업데이트에 훅을 걸어 나만의 로직을 끼워 넣고 싶습니다. "이 태그를 레코드에 붙이면 내 함수를 실행해줘." "이 작업을 매일 크론(cron)으로 실행해줘." 사실, 그런 건 전혀 생각하고 싶지 않습니다. 나의 '나중에 읽기' 앱에 이렇게 말하고 싶을 뿐입니다:

내가 좋아요를 누른 4000단어 이상의 모든 글을 <내가 선택한 전자책 리더기>로 보내줘 매주 arxiv에 <내 전문 분야>의 새 논문이 올라오면 찾아서, 내 연구와 어떻게 관련되는지 요약을 맨 위에 추가하고 <태그>를 붙여줘 기본 알고리즘이 <내가 자주 읽는 사이트>를 완전히 망쳐서 출력하고 있어. 몇 가지 예시를 가져와서 그 사이트 전용 파서를 만들어줘

그러면 로봇이 필요한 코드 조각을 뽑아내서 확장 지점에 연결하고, 그 일을 실제로 해낼 것입니다. 또한 내가 만든 것을 같은 기능을 원하는 다른 사람과 공유할 수 있어야 합니다.

LLM 네이티브 확장 방식이 적용되면 좋을 만한 영역이 더 있습니다.

AI 에이전트

네, 이건 가장 명백한 것입니다. pi, deepseek, opencode 등...

원문 보기
원문 보기 (영어)
Most of the web software we interact with today is static. The developers have a limited amount of time and attention, and focus on building the features that serve the largest group of users. The top of the demand curve is well-served by existing software, but there is a long-tail of unmet needs that’s different for every user. Even if the developers were incredibly motivated to shove in every feature, user interfaces can only become so complex before they become unusable. Every additional feature added complicates the product for every other user. If the market for that feature is small, it can actively make the product worse for every user who doesn’t need it. With this context the rise of LLM-assisted coding has been genuinely empowering for anyone who needed something that fell into this long tail. Software has gotten all… squishy # It’s become readily apparent that LLMs are really quite excellent at building Software for One . Personal apps that side-step all of the complexity and accountability of enterprise software and are custom fit for a single person’s workflow. Pete Koomen at Y Combinator thinks there is an opportunity for what they are calling Small Software . I think they are onto something. Pi is a good example of what I’m starting to think of as LLM-native software : a battle-tested core, but almost endlessly extensible just by asking, where users are able to share their customizations with others. In the past year your users have suddenly acquired the ability to speak code into existence. Most existing software can’t leverage this. Pi leans into it. I suspect we’re going to start seeing more software following this self-extension pattern. However most of our existing examples of pluggable software are local software: AI agents, developer IDEs, mods for video games, Blender add-ons, CAD extensions. These tend to be professional tools with a high barrier to entry. The web is the most successful software distribution system in the world. It shouldn’t be left behind. My hypothesis is that there is a new opportunity for Extensible Software on the web . LLMs radically lower the cost of authoring extensions, and modern sandbox primitives lower the deployment cost and provide good security boundaries. We can build our app as a solid, accountable core, and allow users to safely extend it in many directions by having LLMs fill in the missing pieces. We can give our users super powers. Disclosure: I currently work at Cloudflare, where high levels of exposure to Kenton Varda ’s writing have shaped much of my thinking here. Near the end, I’ll make the case that Dynamic Workers are a particularly good fit for this model, but I’ll cover several alternatives first. What would this look like? # A lot of web systems today rely on webhooks to allow the user to react to changes in the app. This ~kind of works, but it sets a really high bar for extension: building and operating a completely separate service plus dealing with whatever delivery issues arise. I want to be able to hook into record updates and slide in my own logic. “When I attach this tag to a record, run my function”. “Do this action for me on a daily cron”. Actually, I don’t want to have to think about that at all. I want to tell my read-it-later app: Please send every article I fave longer than 4000 words to my <ereader of choice> Look for new papers published on arxiv in <my specialty> each week, add your own summary of how it relates to my work at the top, and tag it with <tag> The default algorithm completely garbles <site I read frequently> . Pull a few examples and make a custom parser for it. And then a robot will extrude the silly bits of code, hook them into some extensions points, and make that happen. I should also be able to share what I’ve made with anyone else who might also want the same feature. 1 Here are some more areas where I’d love to see an LLM-native extension approach. AI Agents # Okay, this is the obvious one. pi , deepseek , and opencode , are all experimenting in this space. Rather than adding every new idea to its core, Pi provides stable hooks for tools, commands, events, and UI, so it can turn a request into a small TypeScript extension and reload it in place. Those extensions can then be bundled into packages that can be shared, letting the ecosystem absorb the long tail of ideas without bloating the harness itself. However the audience of these, at least as they exist now, is fairly small. You have to be comfortable running custom software on your local machine. In corporate environments the organization has to be comfortable with you running software that no one has ever, or will ever, look at. Unless you sandbox Pi yourself, Pi extensions run with the same permissions as Pi itself. Software engineers will find a way, but accountants, doctors, lawyers, and thousands of other professions deserve better tools too. They need agents that can be safely and easily tailored to their domain and their own workflows. If we’re going to get more people using agents, that doesn’t mean making them software developers. It means making the software fit their needs. Internal Corporate Platform # All companies end up with tons of data. Employees need to view it, query it, investigate it, correlate it with this other data in this other system, find customers experiencing <problem x> , find customers about to churn, and a million more things. A lot of companies are experimenting with allowing AI-enthusiast employees to vibe code their own tooling, maybe deploy it to a PaaS. This is directionally correct, but creates a bunch of downstream problems. Once you have hundreds or thousands of these apps, how do you maintain them? How do they get access to the data that they need? How do they get access to only the data that they need ? How can we audit what this software is doing? If we’re relying on access tokens, what are their scopes? Who rotates them? How do we make sure that we’re not logging out customer information to a third-party? How do we make sure we’re not violating GDPR? Or a million other compliance and security things that real businesses need to worry themselves about. What if we gave them a place to deploy code where there are no auth tokens that can leak? Where data access is handled by an internal platform team that can ensure all of the compliance boxes are checked? Give them the space to build their own automations or custom views, but safely. 2 Spoiler: This is basically Cloudflare OS . Support Platform # I’ve spent a lot of my career handling tricky support tickets. Inevitably I end up digging through dashboards, searching logs, pulling data from a million different places. Let me create extensions that surface data for the user that opened the ticket from my particular system into the support interface. Give me hooks so I can kick off agents to do the first round of investigation for me, before I even look at it. If there are common tasks that I need to do like “reset specific quota X” let me add a button to my view that can do that. Then also let me share these with my team so we can all help each other. Observability Platform # A lot of Observability tooling has converged towards the same feature set: a way to search your logs with the little bar graph on top. A trace waterfall view for viewing individual traces. Customizable metrics dashboards. Maybe a service map. A few are experimenting with new visualizations , especially with the rise of agents . The venerable trace waterfall diagram is very useful for systems that are shaped as request / response, where you mainly care about latency and success rate. A lot of us are finding ourselves with systems that are a bit more… stateful… or dynamic. Modern apps are running non-deterministic agents or durable workflow engines where a single action might take hours or days. Trace spans are a great source-of-truth to build upon, but let me experiment with my own visualizations (or install someone else’s). 3 Beyo