00:00:00여러분, 안녕하세요. 좋은 아침입니다.
00:00:02오늘 함께해주셔서 정말 감사합니다.
00:00:03우리가 공유할 내용이 정말 기대되는데요.
00:00:06지난 10년 동안, Vercel에서 실행되는 코드는
00:00:10주로 즉각적인 웹 요청을 위해 구축되었습니다.
00:00:14하지만 오늘날 우리 고객들이 만드는 가장 흥미로운 소프트웨어는
00:00:17더 이상 그 모델에 맞지 않습니다.
00:00:20그리고 이러한 새로운 프로젝트의 수는 폭발적으로 증가하고 있습니다.
00:00:23불과 지난 몇 달 사이에,
00:00:25Vercel의 주간 배포 건수가 두 배로 늘었습니다.
00:00:28그리고 그 새로운 배포의 1/3은 코딩 에이전트로부터 나오는데,
00:00:31그 수치는 단 6개월 만에
00:00:341,000%나 상승했습니다.
00:00:35하지만 저에게 가장 흥미로운 부분은
00:00:38얼마나 많이 배포하느냐가 아니라, 무엇을 배포하느냐입니다.
00:00:41그 에이전트들이 에이전트를 배포하고 있습니다.
00:00:44그리고 우리 고객들이 구축하는 에이전트들은
00:00:48단순히 한 번 응답하고 기다리기만 하지 않습니다.
00:00:50추론하고, 도구를 호출하고, 사람을 기다렸다가,
00:00:53그 과정을 다시 반복해야 합니다.
00:00:55이러한 각 워크플로우에는 이를 뒷받침할 백엔드가 필요합니다.
00:00:58제가 Vercel에서 본 바로는,
00:01:02현재 가장 빠르게 제품을 출시하는 팀들은
00:01:05인프라를 재구축하거나
00:01:07직접 큐를 코딩하지 않습니다.
00:01:08재시도 로직을 처음부터 작성하거나,
00:01:11관측성을 직접 연결하지도 않죠.
00:01:13그런 일들은 이미 해결되었습니다.
00:01:15그들은 우리의 인프라 프리미티브를 사용합니다.
00:01:17우리가 지난 10년 동안 구축해 온 것들 말이죠.
00:01:20그래서 그들은 오로지 제품에만 집중할 수 있습니다.
00:01:24이것이 바로 워크플로우를 만든 이유입니다.
00:01:276개월 전에 베타 버전을 출시했는데,
00:01:30반응이 정말 대단했습니다.
00:01:33그리고 1억 번의 실행을 거친 지금,
00:01:36오늘 워크플로우의 정식 출시(GA)를 발표하게 되어 매우 기쁩니다.
00:01:41어떻게 작동하는지 보여드리겠습니다.
00:01:43제가 보여드릴 앱은
00:01:44직접 만든 생일 카드 생성기입니다.
00:01:47무엇이든 될 수 있겠지만,
00:01:49이 앱은 우리가 방금 논의한 모든 내용을 담고 있습니다.
00:01:51단일 요청으로 끝나지 않고,
00:01:54사람을 기다리며, 실패 시 재시도하고,
00:01:57진행 상황을 사용자에게 실시간으로 스트리밍합니다.
00:02:00작동 방식은 이렇습니다.
00:02:02저 자신에게 카드를 보내볼 텐데,
00:02:04먼저 이메일 주소를 입력하겠습니다.
00:02:05다음으로 날짜를 선택하고,
00:02:094월 23일을 고르겠습니다.
00:02:11저는 생일에 모닥불 피우는 걸 좋아해서,
00:02:14오션 비치 모닥불 파티로 정하고,
00:02:17제 자신인 퍼넷에게 보냅니다.
00:02:21데모를 쉽게 하려고 여기에 제 이메일을 입력하겠습니다.
00:02:24그러면 제 생일 파티에 제가 직접 RSVP를 하게 되겠죠.
00:02:27좋아요, 이제 '생성 및 전송'을 누르면
00:02:30생일 카드가 생성되기 시작하는 것을 볼 수 있습니다.
00:02:34Vercel 대시보드로 이동하면
00:02:35방금 들어온 실행 기록을 확인할 수 있습니다.
00:02:37클릭해 보겠습니다.
00:02:39프롬프트를 생성하고, 메시지를 만들고,
00:02:42이미지까지 생성하는 과정을
00:02:43실시간으로 볼 수 있습니다.
00:02:45이것이 바로 제가 말한 관측성입니다.
00:02:48모든 단계가 여기서 보입니다.
00:02:50무엇이 실행 중이고, 무엇이 완료되었는지,
00:02:52그리고 무엇이 대기 중인지 정확히 알 수 있죠.
00:02:54사용자 측 화면에서는
00:02:57카드가 생성되었고,
00:02:58RSVP 이메일이 발송된 것을 볼 수 있습니다.
00:03:01이 시점에서 워크플로우는 일시 중단됩니다.
00:03:04실제로 컴퓨팅 자원이 소모되지 않습니다.
00:03:07사람의 응답을 기다리는 중이며,
00:03:09이메일로 가서 지금 바로 응답할 수도 있고,
00:03:12몇 시간이나 며칠 뒤에 응답해도 됩니다.
00:03:15시스템은 진행 상황을 계속 추적할 것입니다.
00:03:18이메일을 확인하기 전에,
00:03:20먼저 CLI를 보여드리고 싶습니다.
00:03:22워크플로우는 첫날부터 CLI를 함께 제공하여
00:03:25관측성 대시보드에서 볼 수 있는 모든 것을
00:03:27직접 확인할 수 있게 해줍니다.
00:03:29즉, 여러분과 여러분의 에이전트가
00:03:32문제가 생겨 디버깅을 할 때
00:03:35전체 상황을 파악할 수 있다는 뜻입니다.
00:03:37자, 이제 이메일로 가보겠습니다.
00:03:40이메일이 바로 도착했을 겁니다.
00:03:43여기 있네요.
00:03:44RSVP를 해달라고 요청하고 있습니다.
00:03:46'예'를 눌러 응답하겠습니다.
00:03:49대시보드로 돌아가면 훅이 재개된 것을 볼 수 있고,
00:03:53대기 상태로 넘어갈 것입니다.
00:03:55사용자 대시보드에서도 동일한 상황이 보입니다.
00:03:58더 이상 RSVP를 기다리지 않고,
00:04:00이제 생일 카드를 보낼 수 있도록
00:04:014월 23일까지 기다리는 중입니다.
00:04:03여러분께 2주나 기다리게 할 순 없으니,
00:04:05다시 대시보드로 가서
00:04:06여기서 대기 상태를 깨워보겠습니다.
00:04:09그러면 워크플로우가 즉시 재개되고,
00:04:12전체 과정이 완료되는 것을 볼 수 있습니다.
00:04:14사용자 대시보드로 돌아가 보죠.
00:04:17엽서가 전송되었습니다.
00:04:18제 이메일에서도 RSVP 결과가 포함된
00:04:22생일 카드를 받게 될 것입니다.
00:04:23좋습니다.
00:04:24이제 코드를 보여드리고 싶은데,
00:04:26아까 제가 했던 말을 기억해 보세요.
00:04:29현재 가장 빠르게 제품을 내놓는 팀들은 큐를 다루거나
00:04:32상태와 인프라를 직접 관리하지 않습니다.
00:04:34그건 예전 방식이죠.
00:04:35워크플로우에서 오늘 본 모든 것은
00:04:38하나의 함수입니다.
00:04:40그리고 'useWorkflow' 지시어로 시작하죠.
00:04:43이 지시어 하나가 함수를 며칠 동안 실행하고,
00:04:48단계 사이에 중단했다가 중단된 지점부터 다시 시작하게 합니다.
00:04:52그래서 워크플로우가 단계를 호출할 때,
00:04:53예를 들어 프롬프트나 이미지를 생성할 때,
00:04:56워크플로우는 함수를 일시 중단하고
00:04:58작업을 백그라운드 큐에 넣습니다.
00:05:00실패하면 재시도까지 해주고,
00:05:02완료되면 워크플로우를 재개합니다.
00:05:05그 과정 내내 Vercel 대시보드에서
00:05:07모든 단계의 완벽한 관측성을 확보할 수 있습니다.
00:05:11하나를 클릭해 들어가 볼 수도 있는데,
00:05:13Vercel의 기본 설정상 모든 데이터가 암호화되어 있지만,
00:05:16입력값을 보실 수 있도록 복호화해 보겠습니다.
00:05:19이 기능은 대시보드와 CLI 모두에서 사용 가능합니다.
00:05:22워크플로우에는 기본 스트리밍 기능도 포함됩니다.
00:05:24이것이 제가 클라이언트에 실시간 업데이트를 보내서
00:05:29진행 상황을 라이브로 추적한 방법입니다.
00:05:31이 기능을 구현하기 위해 별도의
00:05:33데이터베이스를 가져올 필요가 없었습니다.
00:05:34클라이언트가 연결을 끊었다가 다시 연결해도 잘 작동합니다.
00:05:37이것은 지속적인 스트림이니까요.
00:05:39좋아요, 이제 후킹 부분을 보시죠.
00:05:42모든 RSVP에 대해 임시 웹훅 URL을
00:05:46즉석에서 생성하고 이메일로 보낸 다음,
00:05:50여기 아래에서 단순히 기다리기만 하면 됩니다.
00:05:52워크플로우는 모든 사람이
00:05:56링크를 클릭할 때까지 여기서 멈춥니다.
00:05:59데이터베이스는 전혀 관여하지 않으며,
00:06:01결과값은 로컬 자바스크립트 변수에 그대로 저장됩니다.
00:06:05워크플로우가 자체적으로 모든 상태를 유지합니다.
00:06:08이것이 바로 제가 이제는 사라졌다고 말한
00:06:11분산 시스템 메커니즘입니다.
00:06:12이런 것들을 더 이상 고민할 필요가 없습니다.
00:06:14마지막으로 생일 카드를 보내기 위해
00:06:17끝부분에서 대기(sleep)합니다.
00:06:18바로 여기죠.
00:06:19이 대기 시간은 몇 초가 될 수도 있고,
00:06:21방금처럼 며칠이나 몇 주가 될 수도 있습니다.
00:06:24대기하는 동안 워크플로우는 중단된 상태로 유지되며
00:06:27실행 중인 컴퓨팅 자원은 0입니다.
00:06:29깨어나면 상태를 유지한 채로
00:06:33중단되었던 지점부터 정확히 다시 시작합니다.
00:06:34이것이 전부입니다.
00:06:37위에서 아래로 읽으면서 끝까지 파악할 수 있는
00:06:40하나의 함수일 뿐이죠.
00:06:43모든 단계는 큐로 뒷받침되고,
00:06:45자동으로 재시도되며,
00:06:47자체적인 서버리스 함수에서 실행됩니다.
00:06:49제한 시간(timeout)이 없어서
00:06:51워크플로우는 필요한 만큼 오래 실행될 수 있습니다.
00:06:54이것이 바로 Vercel이
00:06:56모든 밑바탕을 처리한다는 의미입니다.
00:06:59여러분은 로직만 작성하세요. 나머지는 저희가 맡겠습니다.
00:07:02이번 데모에서는 간단한 사례를 보여드렸지만,
00:07:07우리 고객들은 워크플로우를 사용해
00:07:09엄청난 규모로 에이전트를 운영하고 있습니다.
00:07:12Mux는 워크플로우를 통해 비디오 생성 파이프라인이
00:07:17매번 안정적으로 실행되도록 보장합니다.
00:07:19Flora는 50개의 이미지 생성 모델에 걸쳐
00:07:23병렬 크리에이티브 에이전트를 워크플로우로 조율하고 있습니다.
00:07:27Durable은 소규모 팀임에도 불구하고
00:07:30300만 개의 고객 웹사이트를 호스팅하며,
00:07:33워크플로우를 사용하여 매일 새로운 에이전트를
00:07:35사용자들에게 배포하고 있습니다.
00:07:38데모를 시작하면서,
00:07:40고객들이 만드는 가장 흥미로운 소프트웨어는
00:07:42더 이상 단일 요청에 맞지 않는다고 말씀드렸습니다.
00:07:46그리고 이러한 앱들이 매일
00:07:50점점 더 많이 배포되는 것을 보고 있습니다.
00:07:51에이전트가 에이전트를 배포하고 있고,
00:07:54그것을 만드는 팀들은 큐에 대해 고민하는 대신
00:07:58고객의 문제 해결에 집중하고 있습니다.
00:08:01이러한 변화는 Vercel 내부에서만 일어나는 일이 아닙니다.
00:08:05고객 배포 건수는 두 배로 늘고 있으며,
00:08:07인프라를 직접 구축하는 엔지니어는 그 어느 때보다 적습니다.
00:08:11여러분이 만들고 싶은 앱이나 에이전트가 무엇이든,
00:08:16워크플로우가 이를 안정적이고,
00:08:18오래 지속되며, 견고하고, 관측 가능하게 만들어 줄 것입니다.
00:08:22개인 노트북에서 수백만 명의 사용자까지,
00:08:25동일한 애플리케이션 코드로 가능합니다.
00:08:27워크플로우는 오늘부터 정식으로 사용 가능하니,
00:08:31제대로 작동하는 무언가를 지금 바로 배포해 보세요.
00:08:37[오디오 없음]