Transcript
00:00:00이제 여기서 멈추고 바로 질문을 받아보겠습니다.
00:00:02더 다뤄볼 만한 내용이 아주 많거든요.
00:00:05워크플로 문서도 참고하시기 바랍니다.
00:00:08거기에 워크플로에 대한 더 자세한 내용과
00:00:11각 구성 요소가 어떻게 작동하는지 설명되어 있습니다.
00:00:14질문이 나오면 기쁜 마음으로 블로그 게시물도 함께 살펴보겠습니다.
00:00:19지금은 입문자를 위한 기초 가이드라고 생각하시면 됩니다.
00:00:23워크플로에서 고려해야 할 세 가지 기본 요소가 있는데,
00:00:25첫 번째는 단계(steps)입니다.
00:00:27워크플로와 단계는 일시 중지하고 재개할 수 있습니다.
00:00:30두 번째는 외부의 임의 이벤트를
00:00:31기다릴 수 있게 해주는 훅(hooks)입니다.
00:00:33그리고 마지막은 임의의 시간만큼 대기할 수 있는
00:00:36슬립(sleeps) 기능입니다.
00:00:38몇 초부터 며칠,
00:00:39심지어 몇 달까지도 가능하죠.
00:00:42이 세 가지를 활용하면
00:00:44수많은 백그라운드 파이프라인과 에이전트를
00:00:48자연스럽게 모델링할 수 있습니다.
00:00:51아직 자세히 설명하지는 않았지만,
00:00:53질문을 받기 전에 문서의 관련 내용을 먼저 안내해 드릴게요.
00:00:56에이전트는 기본적으로 장기 실행 작업의
00:01:01아주 자연스러운 표현 방식입니다. 반복적으로 동작하니까요.
00:01:05LLM 호출을 만들고, 하나 이상의 도구 호출을 실행하고,
00:01:08샌드박스를 사용해 메모리에 기록하거나
00:01:11파일 시스템을 이용하는 등, 무엇이든
00:01:13계속해서 반복하는 거죠.
00:01:15토큰을 스트리밍하고, 도구 호출을 수행하고,
00:01:17다시 토큰을 스트리밍하고 도구 호출을 수행하는 식입니다.
00:01:20워크플로로 이 과정을 구현하면 매우 강력하면서도
00:01:25직접 구현하려고 하면 매우 까다롭습니다.
00:01:27그래서
00:01:27Durable Agent라는 클래스를 제공하는데,
00:01:29이런 오케스트레이션 작업을 대신 처리해 주며
00:01:32워크플로 내부에서 아주 잘 작동합니다.
00:01:35일단 여기서 설명을 멈추고
00:01:39어떤 질문들이 있는지 들어보겠습니다.
00:01:45안녕하세요.
00:01:47저희는 이미 일부 도구에 워크플로를 사용하고 있습니다.
00:01:50커뮤니티 알림을 관리하는 도구들인데,
00:01:54알림이 들어오는 곳이 워낙 많거든요.
00:01:58에이전트 덕분에 알림 관리 업무가 훨씬 수월해졌고,
00:02:01워크플로도 관련 작업들을 처리하는 데
00:02:03매우 훌륭한 역할을 하고 있습니다.
00:02:05저희가 무언가를 빌드하는 방식에 있어서 정말 큰 변화였죠.
00:02:11첫 번째 질문을 드리고 싶은데,
00:02:13항상 새로운 오픈 소스가 나올 때마다
00:02:15회의적으로 묻는 분들이 많거든요.
00:02:18워크플로 SDK는 오픈 소스인데, Vercel 워크플로도 따로 있잖아요.
00:02:23과연 얼마나 개방적인 건가요?
00:02:26Vercel 워크플로가 있으면
00:02:28워크플로 SDK는 오직 Vercel에서만 작동하는 건가요?
00:02:31아니면 다른 곳에서도 쉽게 사용할 수 있는 건가요?
00:02:32네, 정말 좋은 질문입니다.
00:02:35워크플로와 관련해 항상 듣는 질문이죠.
00:02:39요약하자면
00:02:40워크플로 SDK가 오픈 소스 프레임워크입니다.
00:02:41처음부터 그런 의도로 이름 지었고요.
00:02:43첫날부터 '월드(Worlds)'라는 어댑터 개념을 도입했습니다.
00:02:49Next.js도 비슷한 시기에 어댑터를 출시했죠.
00:02:52워크플로 SDK는 단순히
00:02:54장기 실행 코드를 표현하는 방식일 뿐입니다.
00:02:57워크플로와 단계(steps)를 사용해
00:03:00슬립, 타이머, 대기, 훅 등 무엇이든 사용할 수 있습니다.
00:03:03가장 좋은 비유는 Docker인 것 같습니다.
00:03:06장기 실행 워크플로를 작성하는
00:03:08일종의 Dockerfile 문법 같은 것이죠.
00:03:11기본적으로 세 가지
00:03:12월드를 제공하고 유지 관리합니다. 첫째는 로컬 월드입니다.
00:03:15로컬에서 워크플로를 실행하면
00:03:18모든 것이 파일 시스템에 저장되어 직접 검사할 수 있죠.
00:03:22파일 시스템을 조회하여 로컬에서
00:03:24똑같은 관측 가능성을 얻을 수 있습니다.
00:03:26큐는 메모리에 저장되고요.
00:03:28처음부터 Vercel에서 하는 것과 거의 유사한
00:03:31훌륭한 로컬 개발 경험을 제공해 왔습니다.
00:03:33물론 Vercel 월드도 제공합니다.
00:03:36Vercel에 배포하면 기본적으로
00:03:38많은 기능을 바로 사용할 수 있습니다.
00:03:39모든 데이터를 종단간(End-to-End) 암호화하며,
00:03:42컴퓨트 계층에서도 빠르게 동작하고
00:03:44네트워킹을 비공개로 유지하도록 공을 들였습니다.
00:03:45또한 Postgres 어댑터도 출시했습니다.
00:03:47이미 실제 고객들이 프로덕션 환경에서 사용 중이고,
00:03:49똑같은 코드로 실행할 수 있죠.
00:03:50Vercel에서 Postgres 환경으로 쉽게 마이그레이션하거나
00:03:52그 반대로도 가능합니다.
00:03:54사용자가 직접 Postgres 백엔드를 운영할 수도 있고,
00:03:58워크플로 시작 시 해당 Postgres 인스턴스를
00:04:00가리키는 환경 변수를 설정하기만 하면 됩니다.
00:04:02그러면 월드 어댑터가 필요한 테이블을
00:04:03모두 자동으로 생성하고
00:04:05안정적인 지속성 계층으로 활용하게 됩니다.
00:04:07더 많은 월드들도 준비하고 있습니다.
00:04:10커뮤니티와도 협력하고 있고요.
00:04:12현재 Cloudflare 월드와
00:04:14AWS 월드도 작업 중에 있습니다.
00:04:17어디서든 실행할 수 있도록 설계했습니다.
00:04:19말씀드린 대로 세 가지는 저희가 직접 유지 관리하며
00:04:25앞으로 저희 팀과 커뮤니티 모두로부터
00:04:29더 많은 기능이 추가될 것입니다.
00:04:31댓글에서도 호응이 좋네요.
00:04:32지금 Vercel 워크플로를 사용 중이라는 분도 있고,
00:04:34Vercel의 훌륭한 추가 기능이라고 생각하시는 분도 계시네요.
00:04:36또 다른 질문은 이런 종류의 기술에서 흔히 나오는 것인데,
00:04:39문서에 코드 스니펫은 있지만,
00:04:43실제 업무에 바로 적용할 수 있는
00:04:44복잡한 앱이나 예제 시나리오는 따로 없을까요?
00:04:47기초적인 수준을 넘어선 실전용 예제 말이죠.
00:04:50네, 괜찮으시면 화면을 공유할게요.
00:04:54네, 공유해 주세요.
00:04:57크롬은 화면 공유할 때 버튼을 여러 번 눌러야 해서 좀 번거롭네요.
00:05:02네, 됐습니다.
00:05:08보여드리고 싶은 것은 두 가지입니다.
00:05:12하나는 워크플로 예제 저장소입니다.
00:05:15저희가 유지 관리하는 곳인데,
00:05:19방금 보여드린 생일 카드 생성기처럼
00:05:23많은 데모를 여기서 가져옵니다.
00:05:27Durable Agent를 사용하는 항공편 예약 앱도 있고,
00:05:31Postgres에서
00:05:32실행하는 방법도 보여줍니다.
00:05:34Vercel 외에 다른 환경에
00:05:37배포하는 방법을 알려주는 PR도 있고요.
00:05:40정말 많은 예제가 있습니다.
00:05:42또 하나 공을 들이고 있는 건 '쿡북'입니다.
00:05:44이 페이지에도 더 많은 내용을 추가 중인데,
00:05:46단순히 코드를 보여주는 것을 넘어
00:05:48워크플로의 일반적인 패턴들을 소개합니다.
00:05:50저희가 Vercel에서 워크플로를 활용하는 방식 중에는
00:05:54정말 흥미로운 사례들도 있습니다.
00:05:55말씀드렸던 것처럼 Durable Agent를 사용하는 앱이죠.
00:05:58사용법에 대한 가이드를 작성했죠.
00:06:00앞서 말한 훅, 슬립, 단계가 기초 요소라면,
00:06:03그 위에 빌드할 수 있는 재미있는 기능들이 많습니다.
00:06:08v0의 '중지(Stop)' 버튼이 작동하는 원리가
00:06:09바로 이 분산형 어보트 컨트롤러입니다.
00:06:12사용자가 v0 채팅에서 정지 버튼을 누르면
00:06:15워크플로와 어보트 컨트롤러를 결합하여
00:06:19백그라운드의 모든 프로세스를 중단시킵니다.
00:06:21앞으로 더 많은 내용을 쿡북에 추가할 예정입니다.
00:06:23단순한 예제를 넘어 그다음 단계로
00:06:24나아가고 싶은 분들이 참고하기에 아주 좋은 곳이죠.
00:06:27좋네요.
00:06:31실제 활용 사례들이라 더 좋군요.
00:06:32저희가 Vercel에서 직접 경험하고,
00:06:34고객들이 고민하는 지점들을 반영했으니까요.
00:06:37마음에 듭니다.
00:06:41다들 AI 코딩 에이전트를 정말 많이 사용하고 있잖아요.
00:06:44에이전트들이 이 새로운 워크플로 방식에
00:06:48얼마나 잘 적응할 수 있을지도 궁금합니다.
00:06:51아까 언급했듯이 두 가지 면에서 정말 놀라웠습니다.
00:06:53첫째, 에이전트들이 사람들이 오랫동안 해온
00:06:56코딩 방식을 이미 학습했다는 점입니다.
00:07:00모든 것이 우리가 선호하는 프로그래밍 방식에 기초하죠.
00:07:01그래서 DX(개발자 경험)를 어떻게 구성할지 고민하다가,
00:07:03SDK를 매우 가볍게 설계하는 방향을 택했습니다.
00:07:08대부분 JavaScript와 지시문(directives) 위주로 구성되어 있어서
00:07:13에이전트들이 매우 잘 이해합니다.
00:07:13병렬 작업을 대규모로 처리하는 방식도 잘 모델링하고요.
00:07:16단계를 실행하되 타임아웃을 걸고 싶다면,
00:07:18워크플로에서는 Promise.race로 슬립과 경쟁시키면 됩니다.
00:07:21JavaScript의 기초를 안다면 매우 직관적인 방식이죠.
00:07:23에이전트들이 이 패턴을
00:07:26정말 잘 습득하고 있습니다.
00:07:31에이전트들은 이미 어려운 문제들을 해결할 줄 아니까요.
00:07:36복잡한 프레임워크 코드를 작성하는 방법도 알고 있고요.
00:07:41우리는 Next.js에서도 그런 방식을 사용하죠.
00:07:45에이전트들은 프레임워크 코드에 대한 이해도가 높습니다.
00:07:47SDK에 많은 기능을 추가하지 않은 덕분에
00:07:51그 이해도가 워크플로에서도 아주 잘 작동하는 것이죠.
00:07:54반대로 SDK에 수많은 옵션과
00:07:58복잡성을 넣었다면 사람에게도 어렵겠지만,
00:08:01방대한 문서를 읽어야 하니 에이전트에게도 힘들었을 겁니다.
00:08:06워크플로를 시작하기 전 다른 솔루션들을 사용할 때
00:08:08바로 그런 점이 문제였습니다.
00:08:11이론적으로는 훌륭했지만,
00:08:13실제로 사용하기는 너무 어려웠죠.
00:08:14대부분 자바스크립트죠.
00:08:15대부분 지시어들로 이루어져 있고요.
00:08:17에이전트들이 잘 이해하는 부분입니다.
00:08:19에이전트가 모델링하기에 아주 쉽죠.
00:08:22대규모 병렬 처리를 수행하는 작업을요.
00:08:23모두에게 약속하듯이 말이죠.
00:08:24어떤 단계를 실행하되 시간을 제한하고 싶다면,
00:08:27워크플로우의 패턴은 기본적으로
00:08:29promise.race를 사용해 해당 단계와 sleep을 경쟁시키는 겁니다.
00:08:34자바스크립트의 기본 원리를 이미 알고 있다면
00:08:37코드를 생각하고 문제를 해결하는 아주 자연스러운 방식이죠.
00:08:40이 워크플로 방식은 아주 편안한 환경인 셈이죠.
00:08:43또한 우리는 개발자들이 무엇을 좋아하는지
00:08:47잘 알고 있고 그것을 워크플로에
00:08:50그대로 투영하려고 노력했습니다.
00:08:53개발 경험이라는 측면에서
00:08:56가장 중요한 것은 가독성이거든요.
00:08:59에이전트가 코드를 읽고 쓸 때
00:09:02마치 인간 개발자와 일하는 것과
00:09:05비슷한 느낌을 받게 하려고 했습니다.
00:09:08그게 우리가 지향하는 바입니다.
00:09:11그래서 에이전트와
00:09:13워크플로의 궁합은 매우 좋습니다.
00:09:15엄청나게 복잡한 옵션들과 함께 제공되죠.
00:09:18사람이 읽어야 할 문서도 너무 많아져서 더 복잡해질 뿐만 아니라
00:09:22이건 사실 제가
00:09:23워크플로우를 시작하기 전 경쟁 제품에서 겪었던 문제입니다.
00:09:26워크플로우 시스템을 사용할 때의 DX(개발자 경험)는
00:09:29이론상으로는 훌륭하지만 실제로는 적용하기가
00:09:32정말 어려운 경우가 많았습니다.
00:09:33아니면 거대한 사용 설명서를 다 읽어야 했죠.
00:09:36에이전트들도 이 부분에서 고전합니다. 왜냐하면
00:09:38모든 내용을 컨텍스트에 담고 있어야 하기 때문입니다.
00:09:40아니면 학습을 하더라도, 다른 예시들에서는
00:09:42볼 수 없었던 내용일 수도 있는데,
00:09:45나중에 SDK를 변경하는 것이
00:09:47정말 어려워지기 시작합니다.
00:09:49하지만 상황이 바뀌면,
00:09:50버전이 바뀔 때, 예전 모델들은
00:09:53자신들이 배운 방식대로만 행동하려 하죠.
00:09:57그래서 저희는 에이전트들이...
00:10:01답변이 너무 길었네요.
00:10:02에이전트가 워크플로우에 정말 뛰어나다는 걸 알게 되었습니다.
00:10:04물론 저희 워크플로우를 위한 스킬도 출시했습니다.
00:10:07이제 'npx skills@vercel workflow'를 실행하면 됩니다.
00:10:11방금 제가 한 말을 증명해 줄 재밌는 포인트인데,
00:10:14이 워크플로우 스킬은 기본적으로,
00:10:17지시하는 거죠.
00:10:20몇 가지 아주 기본적인 코드 예제를 보여주면서
00:10:23race 같은 기능을 어떻게 구현하는지 보여주고,
00:10:25문서를 읽으라고 안내합니다. 그리고
00:10:27이 문서는 NPM 패키지와 함께 제공됩니다.
00:10:30그래서 에이전트들이 본질적으로 소스 코드를 확인하고
00:10:34워크플로우 작성도 아주 잘하게 되는 겁니다.
00:10:37그 스킬과 문서 덕분에
00:10:38항상 최신 상태를 유지할 수 있어서 아주 좋습니다.
00:10:41맞아요, 정확합니다.
00:10:42항상 최신 상태를 유지하고 올바른 버전을 가리키게 되죠.
00:10:44패키지와 함께 문서를 제공하기 때문입니다.
00:10:47설령 SDK가 바뀌더라도
00:10:49이전 버전의 클라이언트를 사용하고 있다면,
00:10:51저희가 제공하는 몇 가지 옵션들은 LLM이
00:10:54로컬에서 접근할 수 있으니까요.
00:10:57좋네요.
00:10:58채팅창에 또 다른 질문이 하나 들어왔습니다.
00:11:00이 질문은, 워크플로우와 서브 워크플로우,
00:11:03그리고 단계들을 얼마나 많이
00:11:07한 번의 실행에 포함할 수 있는지에 대한 규모 수치가 있나요?
00:11:11아, 네.
00:11:13좋은 질문입니다.
00:11:16배포 시 워크플로우의 동시성(concurrency)은,
00:11:22Vercel을 사용한다고 가정했을 때,
00:11:24Vercel에 배포할 때, 단계와 워크플로우의 동시성은
00:11:26Vercel 함수의 동시성 제한을 따릅니다.
00:11:301만 건에서 10만 건 정도일 텐데,
00:11:33티어에 따라 다릅니다.
00:11:36기본적으로 워크플로우 자체가
00:11:39동시성에 제한을 두지는 않습니다.
00:11:41다만, 실행 환경이 작동하는 방식은,
00:11:44일시 중지와 재개가 워크플로우에서 작동하는 방식은
00:11:46모든 단계의 입력과 출력을 추적하는
00:11:50이벤트 로그가 있다는 것입니다.
00:11:53그래서 이벤트 로그가 매우 커지게 되면,
00:11:55예를 들어, 단계 1,000개가 연속으로 있거나,
00:11:59병렬로 1,000개가 있거나 하는 식으로,
00:12:01이벤트 로그가 계속 쌓이게 됩니다.
00:12:03그러면 워크플로우가 오래 실행될수록 리플레이를 위해
00:12:06전체 이벤트 로그를 계속 불러와야 합니다.
00:12:09Temporal 환경에서 오신 분들이라면,
00:12:10아마 제한이 5만 개의 이벤트나 50MB
00:12:14총 저장 용량이라는 걸 아실 텐데,
00:12:16저희도 워크플로우에 이를 공개했습니다.
00:12:18물론 저희만의 제한도 있습니다.
00:12:22제 생각엔,
00:12:26Vercel 문서에 있을 텐데, 나중에 링크를
00:12:30추가해 드릴 수 있습니다.
00:12:33찾아봐야겠네요.
00:12:34하지만 제한이 있기는 한데,
00:12:36제 생각에 저희 제한은,
00:12:40훨씬 더 많은 워크플로우를 병렬로 실행할 수 있습니다.
00:12:42많은 자식 워크플로우를 시작할 수 있고요.
00:12:44그런 것들은 이벤트 로그에 영향을 주지 않거든요.
00:12:45이벤트 로그에 영향을 주는 것은
00:12:47많은 단계들을 병렬로 실행하는 것입니다.
00:12:49따라서 1,000개에서 1만 개의 단계를 병렬로 처리하면,
00:12:52타임아웃 문제가 발생할 수 있습니다.
00:12:55워크플로우가 더 오래 실행될 수도 있죠.
00:12:59저희는 5,000개의 단계를 수행하는 에이전트들이
00:13:01잘 작동하는 것을 보았습니다.
00:13:04물론 마지막 단계들에서는
00:13:06단계 사이의 지연 시간이 15~20초 정도로 늘어날 수 있습니다.
00:13:11사용 사례에 따라 그건 너무 길게 느껴질 수도 있지만,
00:13:13일부 고객들에게는 5,000단계까지
00:13:15실행되어야 하는 백그라운드 작업이라면 괜찮을 수 있습니다.
00:13:19동시에, 이는 저희가 워크플로우 SDK 5에서
00:13:21집중하고 있는 중요한 부분입니다.
00:13:25현재 베타 버전인 SDK 5에서 하고 있는 많은 작업들은,
00:13:29DX를 제대로 구현했으니 이제는,
00:13:34리플레이 문제를 완전히 해결하려고 합니다.
00:13:37Temporal 같은 경우를 보면,
00:13:38결국 이런 제한에 부딪히게 되죠.
00:13:40그래서 지금까지의 해결책은 5,000개의 이벤트에 도달하면
00:13:44워크플로우를 종료하고,
00:13:46새로운 워크플로우로 계속 진행하는 것이었습니다.
00:13:48이미 오늘날에도 워크플로우로 그렇게 할 수 있습니다.
00:13:50원한다면 새 워크플로우를 시작할 수 있죠.
00:13:52하지만 올바른 해결책은,
00:13:54런타임을 개선하여 일시 중지와 재개를
00:13:56이벤트 로그 길이에 얽매이지 않고 O(1)로
00:13:59만드는 것이라고 생각합니다.
00:14:03현재 저희가 수행 중인 작업이 있는데,
00:14:04WASM 기반의 스냅샷 런타임을
00:14:06통해 리플레이를 완전히 없앨 수 있는지 탐색 중입니다.
00:14:09그렇게 되면 엄청나게 높은 동시성과
00:14:12임의로 긴 워크플로우 실행이 가능해질 것입니다.
00:14:19좋습니다, 시간이 거의 다 되어 가네요.
00:14:21시간을 엄수하고 싶네요.
00:14:22마지막으로 한 가지만 더 질문하겠습니다.
00:14:25방금 살짝 언급하셨는데,
00:14:27다음은 무엇인가요?
00:14:28사람들이 무엇을 기대해야 할까요?
00:14:31네.
00:14:33언급했듯이 워크플로우 4가 정식 출시되었고,
00:14:36워크플로우 5가 현재 베타 버전입니다.
00:14:39정식 출시 일정은 아직 정해지지 않았습니다.
00:14:42하지만 워크플로우 5의 주요 초점은
00:14:44성능, 즉 제한에 대한 것입니다.
00:14:47말씀드렸던 것처럼, 걱정 없이
00:14:50계속해서 새 작업을 이어갈 수 있도록
00:14:52만드는 것이 목표입니다.
00:14:55또한, 네이티브 동시성 제어 기능도 포함됩니다.
00:14:57워크플로우 출시 첫날부터 RFC로 다루었던,
00:15:00step, hook, time, wait, sleep 같은 기본 요소 외에도
00:15:05lock이라는 새로운 기본 요소를 추가하고 있습니다.
00:15:08이 요소는 워크플로우가 lock을 기다리거나,
00:15:11동시성 슬롯을 기다리게 해 줍니다.
00:15:15예를 들어 20개의 워크플로우를 병렬로 실행하더라도,
00:15:16분당 동시성 제한을 1로 둘 수 있습니다.
00:15:18나머지는 lock이 풀릴 때까지 기다렸다가 재개되는 방식이죠.
00:15:20규모에 맞춰 동시성을 구현할 수 있는 정말 좋은
00:15:23네이티브 방식입니다.
00:15:24그리고 에이전트 스트리밍 경험 개선도 포함됩니다.
00:15:28앞서 말했듯이 워크플로우의 큰 사용 사례 중 하나죠.
00:15:31간단한 스타일의 워크플로우로 사용하거나,
00:15:34AI 에이전트용으로 사용할 수 있는데,
00:15:36SDK에 대해 저희만의 확고한 의견이 있고,
00:15:39스트리밍과 샌드박스 환경에서 어떻게 작동해야 하는지에 대해
00:15:43그리고 스트리밍이나 샌드박스 환경에서 어떻게 작동하는지에 대해 저희는 그 SDK에 확고한 견해를 가지고 있습니다.
00:15:47성능을 개선하는 것과 관련해서는 앞으로 더 많은 발전이 있을 예정입니다.
00:15:49에이전트 사용 사례를 위한 DX 개선 등이 더 많이 있을 것입니다.
00:15:54멋지네요.
00:15:55앞으로가 기대되는군요.
00:15:56몇 가지 질문이 더 들어왔는데,
00:15:58채팅창을 통해 비동기적으로 답변해 드리겠습니다.
00:16:01Praneet, 오늘 나와서 이야기해 주셔서 감사합니다.
00:16:04감사합니다, Amy.
00:16:05정말 즐거운 시간이었습니다.
00:16:07시청해 주신 여러분 감사합니다.
00:16:09다음 주 목요일에 또 다른 세션이 준비되어 있습니다.
00:16:14그러니 목요일에 다시 오세요.
00:16:15그때 뵙겠습니다.
00:16:39[빈 오디오]
Community Posts
No posts yet. Be the first to write about this video!
Write about this video