Transcript
00:00:00[빈 오디오]
00:00:30.
00:00:53>> 안녕하세요, 또 다른 Vercel 커뮤니티 세션에 오신 것을 환영합니다.
00:00:57제 이름은 제이콥 패리스이며, 오늘 진행을 맡았습니다.
00:01:00이 세션은 커뮤니티나 고객분들,
00:01:03그리고 Vercel에서 멋진 프로젝트를 만드시는 분들을 소개해 드리는 자리입니다.
00:01:08하지만 채팅에 참여하고 싶으시다면 [community.com/live](https://community.com/live) 로 오세요.
00:01:10채팅에 참여하고 싶으시다면 [community.com/live](https://community.com/live) 로 접속해 주세요.
00:01:15페이지 최상단에서 현재 세션을 보실 수 있습니다.
00:01:18마지막에는 질의응답 시간도 가질 예정이니,
00:01:21진행 중에 궁금한 점이 있다면 언제든 라이브 채팅창에 남겨 주세요.
00:01:25그럼 오늘 모신 게스트를 소개해 드리겠습니다.
00:01:27Saltbox Management의 셰인 스미스 님을 모셨습니다.
00:01:30>> 안녕하세요.
00:01:32>> 안녕하세요, 셰인 님. 오늘 기분은 어떠신가요?
00:01:35>> 아주 좋습니다. 제이콥 님은 어떠신가요?
00:01:37>> 저도 아주 좋습니다.
00:01:38네, 오늘 저희를 위해 데모를 준비해 주셨다고요?
00:01:42>> 맞습니다. 간단히 짚어볼 내용과
00:01:46배경 설명을 해 드린 후에 마지막에 라이브 데모를 보여드리려고 합니다.
00:01:48>> 좋습니다. 시작하실 수 있도록 화면 공유를 도와드릴게요.
00:01:53>> 완벽하네요.
00:01:57화면이 준비되는 동안 짧게 제 소개부터 시작해 보겠습니다.
00:02:04제 이름은 앞서 소개받았듯이 셰인 스미스이며, Saltbox Management의 CTO를 맡고 있습니다.
00:02:09Saltbox는 IT 전문 서비스 기업입니다.
00:02:12저희는 주로 고객들을 위해
00:02:16Salesforce 기술을 구축하고 도입하는 일을 합니다.
00:02:18그리고 지난 몇 년간 자체적인 프로덕트도 개발해 왔습니다.
00:02:24그 과정에서 어느덧 준비가 되어
00:02:28저희 고객들과 세상에 이 프로덕트를 본격적으로 출시하려는 시점에 도달했습니다.
00:02:31그래서 오늘은 우리가 Vercel을 활용해 이를 어떻게 개발했는지,
00:02:37특히 Vercel이 제공하는 다양한 기술들을 어떻게 활용했는지 이야기해 보려 합니다.
00:02:41화면에서 보시는 것처럼,
00:02:42AI Gateway에 대해서도 다룰 예정입니다.
00:02:44우선 저희가 해결하려던 문제 정의부터 살펴보겠습니다.
00:02:49저희에게는 Salesforce를 사용하는 고객들이 있습니다.
00:02:54특히 요즘 같은 AI 에이전트 시대에 사용자들은
00:02:58Salesforce를 더 자연스러운 대화 방식으로 사용하고 싶어 합니다.
00:03:02따라서 첫 번째 사용 사례로 해결하려 했던 문제는
00:03:06일반 비즈니스 사용자들을 위한 것이었습니다.
00:03:07그들은 일상적인 언어로 자사의 Salesforce 생태계와 상호작용하고
00:03:10궁금한 질문의 답을 더 빠르게 얻기를 원합니다.
00:03:16그리고 두 번째는, Salesforce 내부의 커스텀 기능을 직접
00:03:20구성하고 설계하는 빌더들을 위한 문제를 해결하고자 했습니다.
00:03:23사실 이 빌더들은 주로 저희 자신입니다.
00:03:25저희가 이 여정을 시작한 계기도 바로 이것이었습니다.
00:03:28에이전트를 통해 Salesforce 구축 과정을 더 쉽게 만들고 싶었기 때문이죠.
00:03:31이것이 바로 저희가 우리 자신과
00:03:34사용자들을 위해 해결하고자 했던 두 가지 문제입니다.
00:03:35그리고 배경을 덧붙이자면, 이를 구현하는 것은 사실 꽤 까다롭습니다.
00:03:41사람들이 저희 같은 전문 서비스 기업을 찾는 이유이기도 합니다.
00:03:45Salesforce의 맥락을 완벽히 이해하고, 고객사가 처한 상황과
00:03:49그들이 수행하려는 프로젝트의 맥락을 파악하여,
00:03:54이를 모범 사례에 부합하는 안정적이고 확장 가능한 프로덕션 코드로 변환하는 것은 정말 어렵습니다.
00:03:58아무 LLM에나 들어가서
00:04:01Salesforce에 대한 질문을 냅다 던진다면 대답은 나오겠지만,
00:04:05바로 실무에 투입할 수 있는 수준의 결과물은 나오지 않을 것입니다.
00:04:07그래서 그것이 바로 저희가 달성하고자 했던 목표였습니다.
00:04:12저희는 비교적 규모가 작은 프로덕트 팀이었지만,
00:04:16매우 도전적이고 야심 찬 프로덕트를 만들어야 했습니다.
00:04:19그렇기에 인프라 관리보다는 프로덕트 자체에만 집중하고 싶었습니다.
00:04:24인프라는 알아서 척척 돌아가며 필요한 기능을 제공해 주길 바랐죠.
00:04:28그것이 우리의 과제였고, Vercel 인프라 위에서라면
00:04:33확장 가능한 플랫폼을 구축하고 성공해낼 수 있으리라는 확신이 있었습니다.
00:04:40이제 저희가 그것을 실제로 어떻게 구현했는지 조금 설명해 드리겠습니다.
00:04:44저희의 상위 수준 아키텍처는 크게 세 가지 계층으로 나뉩니다.
00:04:48가장 상위 계층에는 사용자가 마주하는
00:04:53UI 기능을 담당하는 Next.js 애플리케이션이 있습니다.
00:04:56그리고 거기에는 요즘 에이전트 서비스에
00:05:02기본적으로 기대하는 실시간 스트리밍 UI 기능이 탑재되어 있습니다.
00:05:04그 아래 두 번째 계층에는 에지와 서버 기능이 위치합니다.
00:05:09저희는 특히 AI SDK 버전 6을 사용하여 에이전트를 제어하고,
00:05:16에이전트 루프와 그 안에 내장된 모든 툴링을 관리하고 있습니다.
00:05:21이 SDK를 아직 잘 모르시거나 이제 막 에이전트 분야에 발을 들이셨다면,
00:05:25꼭 한번 사용해 보시길 강력히 추천합니다.
00:05:28어떤 LLM이든 전반적으로 유연하게 사용할 수 있게 해주며
00:05:34모델에 구애받지 않고, 에이전트 루프를 구현하는 데 필요한
00:05:37기본 프레임워크와 뼈대를 완벽히 제공해 줍니다.
00:05:40이를 통해 에이전트에게 강력한 도구들을 쥐여줄 수 있습니다.
00:05:43그리고 세 번째 계층은 실제 AI 모델을 연결하는 부분입니다.
00:05:51처음 개발을 시작할 때 가장 많이 고민했던 것이
00:05:56바로 어떠한 모델을 사용하는 것이 적절한가였습니다.
00:06:00우리가 내린 결론은, 모든 상황에 항상 들어맞는
00:06:04단 하나의 '치트키' 같은 모델은 없다는 점이었습니다.
00:06:06따라서 특정 모델에 의존하지 않는 독립적인 방식으로 아키텍처를 설계하여,
00:06:10새로운 모델이 출시될 때마다 상황에 맞는 최적의 모델을 적재적소에 갈아 끼울 수 있도록 하고 싶었습니다.
00:06:14뒷단 인프라의 큰 변화 없이도 가볍게 플러그인할 수 있게 말이죠.
00:06:20그래서 저희는 AI Gateway를 선택했고,
00:06:23이에 대해서는 잠시 후에 자세히 말씀드리겠습니다.
00:06:25그리고 화면 하단에 보이듯이,
00:06:30나머지 인프라를 든든하게 받쳐주는 백엔드 서비스들이 존재합니다.
00:06:35그럼 AI Gateway에 대해 조금 더 자세히 살펴보겠습니다.
00:06:38왼쪽에 보이는 것은 대략적인 구현을 보여주는 의사 코드입니다.
00:06:43기본적으로 이렇게 단 한 줄만으로
00:06:46"게이트웨이에 연결하겠다"라고 선언할 수 있습니다.
00:06:49한 번 연결을 마치고 나면 게이트웨이를 통해
00:06:51원하는 어떤 모델이든 자유롭게 사용할 수 있게 됩니다.
00:06:55보통은 Claude Opus를 많이 쓰지만, 경우에 따라 Sonnet이나
00:07:00GPT 계열, 혹은 아주 빠른 추론이 필요할 때는 Groq 등을 상황에 맞게 섞어 씁니다.
00:07:04이처럼 특정 모델에 귀속되지 않고
00:07:08극도의 유연성을 챙길 수 있다는 점이 AI Gateway의 강력한 장점 중 하나입니다.
00:07:10덕분에 저희는 질문의 성격과 난이도에 따라
00:07:12꽤 직관적인 조건 기반 라우팅을 구현할 수 있었습니다.
00:07:18사용자가 던지는 질문이 얼마나 복잡한지 판별하는
00:07:22분류기를 내부에 탑재해 두었는데요.
00:07:27예를 들어 단순히 "안녕하세요" 같은 인사말에 답하는 간단한 작업인지,
00:07:29아니면 사용자를 위해 Salesforce의 복잡한 전체 비즈니스 흐름을 설계해야 하는
00:07:32고난도 작업인지 파악하는 식입니다.
00:07:37그 판단에 따라 요청을 서로 다른 모델로 넘깁니다.
00:07:38이 구조 덕분에 불필요한 비용을 아끼고 속도를 높이면서,
00:07:40답변 수준에 걸맞은 최적의 연산 복잡도를 가진 모델을 골라
00:07:44사용자에게 가장 정확하고 정교한 응답을 건넬 수 있게 됩니다.
00:07:49그리고 요즘 에이전트 사용 경험 측면에서 보면,
00:07:50대부분의 사용자가 기대하는 핵심 기능이 크게 두 가지 있습니다.
00:07:59하나는 실시간으로 작업이 어떻게 진행되는지
00:08:04눈으로 바로 확인할 수 있게 해주는 실시간 답변 스트리밍입니다.
00:08:07하지만 이와 동시에, 처리하는 데 몇 분 혹은
00:08:09수십 분, 길게는 몇 시간이 걸리는 아주 무겁고 복잡한 요청의 경우
00:08:14어떻게 대응해야 할까요?
00:08:20프로덕트 초기 단계에서는 먼저 화면의 스트리밍 쪽에 초점을 맞추었습니다.
00:08:23거기가 AI SDK가 가장 진가를 발휘하는 부분이니까요.
00:08:28왼쪽 화면을 보시면 미팅 노트를 바탕으로
00:08:31개발자용 사용자 스토리(User Story)를 생성해내는 예시를 볼 수 있습니다.
00:08:33미팅 맥락을 전부 집어넣고 개발용 태스크를 뽑아내는 일은
00:08:37저희가 이 툴을 만들며 시도한 초기 사용처 중 하나였습니다.
00:08:41그러나 Salesforce 내에 대규모 B2B 쇼핑몰을 구축하거나
00:08:45다양한 커스텀 페이지가 포함된 Experience Cloud 사이트를 설계하는 등의 복잡한 요구사항으로 넘어가면,
00:08:51단순 브라우저 스트리밍으로 감당할 수 있는 몇 분 수준의 시간을 훌쩍 넘어섭니다.
00:08:56그래서 Vercel 플랫폼을 더 깊이 연구하면서,
00:08:59사용자가 마주하는 화면 UI는 일관되게 유지하되,
00:09:05작업의 성격에 따라 실시간 스트리밍과 백그라운드 프로세스 실행을
00:09:09유연하게 조율하여 돌릴 수 있는 통합 환경을 설계하기 시작했습니다.
00:09:11그리고 이 모든 과정은 Vercel 인프라에서 완벽히 지원됩니다.
00:09:14플랫폼 자체 기능뿐만 아니라 잠시 후 설명해 드릴
00:09:19샌드박스 등 여러 연계 기술 덕분에 유기적으로 잘 맞물려 돌아갑니다.
00:09:24도구 관점에서 봤을 때, AI SDK 같은 솔루션을 도입하는 것의
00:09:28가장 큰 장점은 바로 유연하게 조립 가능한 뼈대(Framework)를 제공한다는 점입니다.
00:09:34처음에는 손에 꼽을 만큼 적은 도구로 시작했지만, 시간이 흐르며
00:09:39에이전트가 사용자와 Salesforce 환경 사이에서 강력하게 일할 수 있도록 도울
00:09:44다양한 세부 기능 도구들을 지속해서 추가해 왔습니다.
00:09:48여기 보시는 것처럼 문서 생성, 검색 기능,
00:09:52스토리 작성, 각종 연동 장치, 그리고 핵심인 Salesforce 전용 도구들이 탑재되어 있습니다.
00:09:57이 도구들은 실제 인프라 환경을 완벽히 이해하고 검증하고 쿼리하며,
00:10:01최종적으로 해당 환경에 직접 배포(Deploy)까지 해내는 역할을 합니다.
00:10:05단순히 API만 두드리는 범용 LLM의 한계를 넘어서 에이전트에 실제 실행력을 불어넣는 셈입니다.
00:10:10그렇다면 "에이전트가 손을 갖게 되었다"라는 말이
00:10:16구체적으로 어떻게 작동한다는 뜻일까요?
00:10:18Vercel 생태계에서 최근 대대적으로 밀고 있는
00:10:22새로운 무기가 바로 이 '샌드박스' 기능입니다.
00:10:27Salesforce 생태계에 익숙한 분이라면 잘 아시겠지만,
00:10:30개발자들이 뒷단에서 이 시스템과 상호작용할 때는
00:10:34주로 Salesforce 전용 CLI(커맨드 라인 인터페이스)를 사용합니다.
00:10:39이를 통해 터미널 환경에서 명령어 몇 줄로 시스템과 긴밀히 상호작용하고,
00:10:43임시 샌드박스를 띄우거나 쇼핑몰 스토어를 구축하고 직접 코드를 배포합니다.
00:10:49이 CLI 덕분에 개발 주기가 대단히 쾌적해지죠.
00:10:51하지만 매 세션이 휘발되는 일반 브라우저 환경에서는 이를 그대로 흉내 내기 어렵습니다.
00:10:55매번 웹사이트에 수동으로 로그인해야 하고
00:10:59인증 정보가 유지되지 않아 부드러운 연동 흐름을 만들기 힘듭니다.
00:11:01그래서 저희는 Vercel의 샌드박스 격리 환경을 활용하여
00:11:06사용자가 본인의 계정으로 먼저 인증을 통과하게 만들었습니다.
00:11:10그다음 격리된 샌드박스를 띄워 파일 시스템에 직접 접근할 수 있게 하고,
00:11:16수정하려는 소스 코드나 생성된 리소스 파일들을
00:11:20해당 가상 파일 구조 안에 온전히 적재할 수 있도록 지원합니다. 그 뒤 Salesforce CLI를
00:11:26격리 환경 내부에서 실행해 변경된 코드 파일을 Salesforce 조직으로 깔끔하게 밀어 넣는 방식입니다.
00:11:30이것이 Salesforce 생태계 특유의 '스크래치 조직(Scratch Org)'이나
00:11:35'샌드박스'라는 개념에 특화된 유스케이스처럼 들릴 수도 있겠지만,
00:11:40사실 에이전트 기반의 자동화 코딩 생태계가 성숙해질수록
00:11:43이 격리된 실행 샌드박스 기술은 필수 불가결한 핵심이 될 것입니다.
00:11:49에이전트나 대형 언어 모델들이 가장 잘 다루고 이해하는
00:11:55전통적인 '디렉토리 및 파일 트리 구조'를 고스란히 보존하고 제공해 주기 때문입니다.
00:11:58덕분에 개발팀이 상상하는 시나리오를
00:12:01제약 없이 자유롭게 펼칠 수 있는 탄탄한 밑바탕이 되어 줍니다.
00:12:06자, 그럼 지금까지 저희가 Vercel 위에서 빌드하며 얻은
00:12:10핵심 기술적 축들을 간단히 정리해 볼까요?
00:12:17특히 V0는 저희 개발 프로세스의 패러다임을 바꾼 강력한 지원군이었습니다.
00:12:18저희는 이를 두 가지 방향에서 요긴하게 활용하고 있습니다.
00:12:23하나는 자사 주력 솔루션인 Saltbox One(S1) 자체를 고도화하는 제품 개발 관점이고,
00:12:27다른 하나는 실제 고객들의 Salesforce 프로젝트를 밀착 지원하는 SI 서비스 관점입니다.
00:12:31그래서 저희는 이 둘을 한데 묶어 강력한 시너지를 내는 통합 고리를 만들었습니다.
00:12:35만약 여러분이 S1 환경에서 구현하고자 하는 비즈니스 목표의 컨텍스트를 확실히 잡고,
00:12:41필요한 모든 데이터를 확보해 놓았다면, 저희가 촘촘히 엮어둔
00:12:45V0 연동 파이프라인을 통해 해당 컨텍스트 정보 전체를 V0 측에 고스란히 밀어줄 수 있습니다.
00:12:51그 덕분에 V0가 단순한 지식 기반 답변을 넘어 맥락에 부합하는 정교한 코드를 짤 수 있게 됩니다.
00:12:54리액트 컴포넌트뿐만 아니라 정확한 컨텍스트와 메타 정보만 주어진다면
00:12:58Apex 클래스, Lightning Web Component(LWC), 시스템 자동화 플로우까지 무리 없이 짜냅니다.
00:13:01이렇듯 두 제품을 조화롭게 엮음으로써
00:13:05기대 이상으로 아주 매끄럽고 일관된 개발 경험을 완성할 수 있었습니다.
00:13:09여기서 잠깐 멈추고, 다른 도전적인 개발팀들에
00:13:14조언을 건넨다면 어떤 것들이 있을까요? 크게 네 가지 배움으로 나뉩니다.
00:13:17첫째, 무조건 게이트웨이를 쓰세요. "어떤 모델이 최강인가"로 싸우는 무의미한 논쟁은 접어두고,
00:13:21작업의 본질과 쓰임새에 맞게 그때그때 최적의 모델을 영리하게 스위칭해 가며 대응하세요.
00:13:25그 유연함이 주는 해방감과 비즈니스 확장성이 어마어마할 것입니다.
00:13:28둘째, 실시간 스트리밍은 여정의 출발점일 뿐입니다.
00:13:31초기 에이전트 앱들은 대부분 이 스트리밍 연출을 보여주는 것에서
00:13:35만족하고 멈춰 서곤 합니다.
00:13:38하지만 진정한 가치를 만들려면 백그라운드에서 오랫동안 신뢰성 있게 지속 구동되는 장기 실행 능력이 수반되어야 합니다.
00:13:42이 격차를 좁혀나가는 것이야말로 에이전트 제품의 한계를 깨부수는 핵심 열쇠입니다.
00:13:45셋째, 조금 전 열렬히 설명해 드린 샌드박스의 힘입니다.
00:13:48에이전트가 단지 제안만 하는 단계를 넘어 격리 공간 안에서 CLI 도구를 마음껏 쥐고 휘두를 수 있게 해주세요.
00:13:52이 구조를 갖추는 순간 에이전트의 생산성에 날개가 달릴 것입니다.
00:13:55그리고 마지막 단계는 적합한 플랫폼을 찾는 것입니다.
00:13:57저희의 경우 Vercel을 기반으로 개발을 진행했고
00:14:01덕분에 인프라에 신경 쓰지 않고
00:14:04저희가 출시하고자 하는 기능과
00:14:07Saltbox One의 대규모 역량에만 집중할 수 있었습니다.
00:14:12그럼 이제 데모로 넘어가서
00:14:19대화형 Salesforce 환경을 살펴보겠습니다.
00:14:24스토리 생성에 대해 이야기하고
00:14:26에이전트가 작동하는 모습을 확인해 보시죠.
00:14:29화면을 전환할 테니 잠시만 기다려 주세요.
00:14:34네, 좋습니다.
00:14:38Saltbox One 화면입니다. 저희 데모 조직 중 하나인데요.
00:14:44왼쪽을 보시면 저희가 '프로젝트'라고 부르는 메뉴가 있고
00:14:48이 프로젝트들이 다양한 컨텍스트를 제공합니다.
00:14:51그리고 중앙에는 새로운 대화창이 있습니다.
00:14:56여기에 초점을 맞춰서 살펴볼 수 있죠.
00:14:58아래로 스크롤하면서 모든 다양한 프로젝트를 확인할 수 있습니다.
00:15:01이를 통해 대화에 적절한 컨텍스트를 로드할 수 있습니다.
00:15:05하단에는 도구들이 나열되어 있으며,
00:15:08여기를 통해 모든 통합 기능이 전달됩니다.
00:15:12그리고 그 아래에서는 컨텍스트를 직접 추가할 수 있습니다.
00:15:16회의록, 사용자 스토리, 산출물,
00:15:20Salesforce 조직이나 해당 조직의 특정 요소를 여기에 끌어다 놓을 수 있죠.
00:15:23덕분에 매우 풍부한 맥락의 대화가 가능해집니다.
00:15:27우선 조금 더 복잡한 작업부터 시작해 보겠습니다.
00:15:33이 작업이 백그라운드에서 실행되는 동안 다른 화면으로 전환해서,
00:15:37제가 미리 실행해 둔 작업을 토대로 설명해 드리겠습니다.
00:15:40이번 예시에서는 Salesforce에 스크린 플로우를 생성하여
00:15:45사례 댓글을 입력하고 확인 화면까지 보여주려고 합니다.
00:15:51아주 복잡한 요구사항은 아니지만, 플로우를 잘 알아야 하고
00:15:56그것을 어떻게 구성하고 어디로 가야 하는지, 그리고
00:15:58어떻게 디버깅해야 하는지 알아야 합니다.
00:16:00저희 에이전트가 이 작업을 처리하도록 두고
00:16:03그동안 다른 대화들에 대해 이야기해 보겠습니다.
00:16:06넘어가기 전에 에이전트가 컨텍스트 파일을 검색하는 것을 볼 수 있습니다.
00:16:09이게 바로 Saltbox One의 핵심 비결 중 하나인데요, 저희는
00:16:13Salesforce 활용법에 대한 수많은 정보와
00:16:16실제 빌드를 성공적으로 수행할 수 있는 플레이북을 갖고 있습니다.
00:16:19보시다시피 굉장히 빠르게 결과를 가져와서
00:16:23"좋은 소식입니다, 인스턴스를 확인해 보니
00:16:25현재 사례 댓글에 설정된 자동화가 없어 바로 진행할 수 있습니다"라고 합니다.
00:16:29그리고 저에게 몇 가지 추가 질문을 던집니다.
00:16:32기본 조직을 사용하라고 답변하고
00:16:37그대로 두면 에이전트가 계획을 수립하기 시작할 것입니다.
00:16:41그동안 저는 다른 대화로
00:16:44넘어가 보도록 하겠습니다.
00:16:47이 기능은 저희 고객들이 프로젝트를 진행할 때
00:16:52가장 자주 사용하는 기능 중 하나인 '회의 활용하기'입니다.
00:16:56여기 'Halston'이라는 데모 브랜드가 있습니다.
00:17:00Salesforce 기능 구축에 관한 새로운 요구사항을
00:17:03논의했던 회의 녹음본이 있습니다.
00:17:07그리고 저는 현재 구축되어 있는 환경과
00:17:11Salesforce의 기본 기능을 기반으로
00:17:16에이전트에게 저희 조직에 대해 질문하고 있습니다.
00:17:18겉보기에는 꽤 단순한 요청 같지만
00:17:21실제로는 환경의 세부 정보를 파악해야 하고,
00:17:26기본 제공 기능과 커스텀 기능을 구별하여
00:17:30올바른 결정을 내려야 하므로 꽤 복잡합니다.
00:17:33이 질문에 대해 에이전트가 분석해 낸
00:17:37회의 요구사항들을 여기서 확인하실 수 있습니다.
00:17:41그리고 현재 갖춰진 요소들도 보여줍니다.
00:17:43현재 데이터 모델을 Mermaid 다이어그램으로 깔끔하게 그려주어
00:17:46현재 상태를 직관적으로 확인할 수 있게 해줍니다.
00:17:48그런 다음 추천 사항을 제시하기 시작합니다.
00:17:52S1이라면 이 문제를 여러 단계로 나누어 접근할 것이라며,
00:17:571단계는 데이터 모델 설계 및 구독 가시성 확보로 시작해
00:18:02몇 가지 제안 사항과 핵심 질문들을 던집니다.
00:18:06그리고 저는 이 에이전트와 의견을 주고받을 수 있습니다.
00:18:07질문들에 대한 답변을 이런 식으로 입력하면
00:18:12결과적으로 요구사항들을 각 단계별로 아주 상세하게
00:18:16분류해 놓은 멋진 문서를 생성해 줍니다.
00:18:19저는 이 문서를 바탕으로 코드를 작성하거나
00:18:22사용자 스토리나 기타 요구사항 문서로 전환할 수 있습니다.
00:18:27이것이 바로 Saltbox One의 막강한 강점 중 하나인데, 저희는
00:18:31실제 서비스 구축 관점에서 이 도구를 만들었습니다.
00:18:33따라서 저희는 Salesforce를 어떻게 구현해야 하는지 잘 알고 있습니다.
00:18:35최선의 실무 방식을 알고 있고, 어떻게 접근해야 하는지도 압니다.
00:18:37그리고 이 모든 전문성이 Saltbox One이 보유한
00:18:38에이전트 컨텍스트에 녹아들어 있습니다.
00:18:43다시 아까 하던 대화로 돌아가서
00:18:44설명을 이어가겠습니다.
00:18:49기본 조직을 사용하겠다고 동의하자
00:18:52에이전트가 앞서 언급한 모든 컨텍스트를 분석하여
00:18:55가장 최선의 구현 방법을 찾아냈습니다.
00:18:57그리고 검토해 볼 수 있도록 깔끔한 요약 카드를 생성해 주었습니다.
00:19:02이 카드는 에이전트의 동작을 제어할 수 있는 수단이 됩니다.
00:19:07에이전트가 계획은 스스로 세우되,
00:19:11자기 마음대로 실행해 버리는 것은 원치 않을 것입니다.
00:19:13여전히 인간의 개입과 승인이 필요하니까요.
00:19:15그래서 저희는 무엇이 어떻게 배포될 예정인지
00:19:19정확히 보여주는 컴포넌트를 구성해 두었습니다.
00:19:22여기서 '승인 및 실행' 버튼을 클릭하기만 하면 됩니다.
00:19:25데모 중이라 지금 당장 실행하진 않겠지만
00:19:29클릭 한 번으로 배포를 진행할 수 있습니다.
00:19:33에이전트와 의견을 주고받으며 문제를 해결한 뒤
00:19:37'재시도'를 누를 수도 있습니다.
00:19:38그리고 배포가 완료된 후 버전이 마음에 들지 않으면
00:19:43이전 버전으로 되돌릴 수도 있습니다.
00:19:44실시간 데모를 하나 더 보여드리기 전에,
00:19:50조직의 아키텍처를 빠르게 검토하는 활용 사례를 하나 더 보여드리겠습니다.
00:19:55이것은 고객분들께서 저희에게 정말 많이
00:20:00물어보시는 단골 질문 중 하나입니다.
00:20:03현재 시스템의 아키텍처나 기술 부채를 파악할 수 있게 도와달라거나,
00:20:04Salesforce 환경에서 에이전트 기반의 워크플로우를
00:20:09본격적으로 도입하려면 어떻게 준비해야 하는지 묻곤 하십니다.
00:20:10간단해 보여도 실제로는 굉장히 깊이 있는 질문들입니다.
00:20:15이런 질문을 던지면 에이전트가
00:20:18라이선스 환경과 주요 결과물들을 파악하고,
00:20:22영업 기회(Opportunities) 전반의 오브젝트 모델이 어떻게 생겼는지 정리해 줍니다.
00:20:27그리고 답변 과정에서 검토가 필요한 부분들을
00:20:30항상 표시해 줍니다.
00:20:34이 예시의 경우, 문서화되지 않은
00:20:38모든 오브젝트의 필드들을 찾아냈습니다.
00:20:40많은 커스텀 필드가 감지되었고, 이에 대한 접근 방식 제안과
00:20:45구체적인 다음 단계까지 제시해 줍니다.
00:20:48여기서 제가 그 제안대로 진행하겠다고 지시하면,
00:20:53에이전트는 B2B 커머스 흐름과 모든 요소가
00:20:57상호작용하는 방식에 초점을 좁히기 시작합니다.
00:21:02에이전트가 해당 환경에 쿼리를 날리고
00:21:05주변 에코시스템을 면밀히 파악한 뒤
00:21:07종합적인 분석 답변을 내놓으면
00:21:10그것을 토대로 계속 대화를 이어나갈 수 있습니다.
00:21:12자, 백그라운드에서 에이전트가 실행되는 동안,
00:21:16마지막으로 한 가지 활용 사례를 더 보여드리겠습니다.
00:21:21새로운 대화창을 열고 제가 가지고 있는
00:21:27컨플루언스 페이지를 가져와 보겠습니다.
00:21:32이것은 이전 대화의 산출물이었던 페이지입니다.
00:21:35여기에는 해당 솔루션이 어떻게 생겼는지 아주 길고 상세하게 나와 있습니다.
00:21:39저는 여기에 대고 이 문서의 1단계를 바탕으로
00:21:43사용자 스토리를 만들어 달라고 빠르게 지시할 수 있습니다.
00:21:46이게 특별한 이유는 단순히 이 문서의 컨텍스트만 활용하는 것이 아니라,
00:21:50프로젝트 맥락, Salesforce 환경, 저희의 베스트 프랙티스, Salesforce 에코시스템까지
00:21:55모두 끌어와 분석하기 때문입니다.
00:21:59그리고 이 1단계를 관리하기 편한 사용자 스토리로
00:22:03어떻게 쪼개는 것이 최선일지 판단하고, 구체적인 인수 기준을 담은
00:22:08"사용자로서 나는 ~을 하고 싶다" 형태의 초안을 작성해 줍니다.
00:22:14사용자 스토리 작성을 시작할 때 훌륭한 디딤돌이 되어주죠.
00:22:18일단 사용자 스토리가 생성되고 나면,
00:22:22에이전트와 대화를 주고받으면서
00:22:24세부 사항을 더 정교하게 다듬어갈 수 있습니다.
00:22:28이 작업이 돌아가는 동안,
00:22:32아까 감사를 마쳤던 이전 대화 화면으로 돌아가 보겠습니다.
00:22:36몇 번의 쿼리를 실행해 B2B 감사 플로우 분석을 끝마쳤습니다.
00:22:40상당히 고도화된 감사 평가서가 작성되었고
00:22:45우리가 무엇을 우선적으로 해결해야 하는지,
00:22:48어떤 기술 부채가 있는지 추천해 줍니다.
00:22:51이 모든 요소가 어떻게 하나로 맞물려 돌아가는지 보이실 겁니다.
00:22:55다시 제 예시 화면으로 돌아가 보죠.
00:23:00화면이 잠시 멈춘 것 같네요. 잠시만요.
00:23:11아, 되었네요.
00:23:14마지막 예시에서 완성된 사용자 스토리들을 보실 수 있습니다.
00:23:18왼쪽에는 사용자 스토리 목록이, 오른쪽에는 세부 내용이 표시됩니다.
00:23:22이를 통해 Asana나 Jira와 직접 연동하여
00:23:24개발 라이프사이클 전체를 통합 관리할 수 있게 됩니다.
00:23:27이상이 Saltbox One의 대략적인 개요입니다. 저희가 Vercel 에코시스템과
00:23:32샌드박스 및 게이트웨이 기능, 그리고
00:23:39v0를 활용해 이 같은 애플리케이션을 어떻게 구축하고,
00:23:44인프라 뒷단에 신경 쓰는 대신
00:23:49오직 고객을 위한 기능과 가치에만 집중했는지 설명해 드렸습니다.
00:23:53자, 제이콥, 혹시 다루고 싶은 질문이 있으신가요?
00:23:56>> 네, 멋진 데모 정말 감사드립니다.
00:24:02몇 가지 궁금한 점이 생겼는데요.
00:24:06우선 에이전트 권한은 어떻게 작동하나요?
00:24:08S1 자체적으로 권한을 갖는 방식인가요?
00:24:12예를 들어 앱을 설정할 때 Salesforce나 Confluence에 특정 권한을 부여받는 식인지,
00:24:16아니면 질문을 하는 사용자의 권한을 따르는지 궁금합니다.
00:24:20엔터프라이즈 SSO 통합 환경에서는
00:24:23이 권한 처리가 꽤 까다로운 문제잖아요.
00:24:26어떤 방식을 채택하셨는지 궁금하네요.
00:24:29>> 저희도 같은 고민을 하며 치열하게 의견을 나누었는데요,
00:24:32결론은 '사용자 기반 권한'이었습니다.
00:24:36사용자가 접속하면 본인 계정으로 인증을 진행합니다.
00:24:40따라서 Salesforce나 기타 애플리케이션에서 수행하는 모든 동작은
00:24:45해당 플랫폼에서 지원하는 OAuth나 API 키를 통한
00:24:50그 특정 사용자의 권한으로만 이루어집니다.
00:24:53덕분에 특정 행위를 한 주체가
00:24:57해당 유저라는 것을 명확히 통제하고 감사할 수 있죠.
00:25:03게다가 Salesforce 같은 몇몇 플랫폼에는
00:25:06또 하나의 안전장치를 심어두었습니다.
00:25:09새로운 Salesforce 인스턴스를 연결할 때마다
00:25:12항상 처음에는 읽기 전용(Read-only)으로 시작하며,
00:25:15사용자가 직접 쓰기 권한(Write permission)으로 전환해 주어야 합니다.
00:25:19그렇게 설정하더라도, Salesforce 환경에 어떠한 변경사항을 반영하기 전에는
00:25:23항상 승인 화면이 먼저 팝업되도록 설계했습니다.
00:25:26>> 그렇다면 Salesforce 상의 이력 관리를 위해서라도
00:25:31수행된 모든 동작은 결국 사용자가
00:25:37직접 클릭해서 승인한 결과라는 거군요.
00:25:39쓰기 동작이 있을 때 승인 창이 뜨고,
00:25:44사용자가 명시적으로 수락 및 진행을 해야만 에이전트가 작동하니까요.
00:25:44>> 정확합니다.
00:25:49>> Salesforce 로그에도 해당 사용자가 작업한 것으로 남게 되고요.
00:25:50>> 맞습니다.
00:25:51>> 좋습니다, 완벽하네요.
00:25:57또 한 가지 궁금한 점은, 에이전트가 샌드박스를 어떻게 활용하나요?
00:26:02도구 호출(tool call) 시에 내부적인 구현 방식으로
00:26:06샌드박스를 조용히 호출해서 사용하는 것인지,
00:26:11아니면 에이전트 자체에 샌드박스 도구가 내장되어 있어서
00:26:16CLI나 API 실행 등 반드시 샌드박스 안에서 처리해야 할 일을 스스로 인지하고 수행하는지 궁금합니다.
00:26:19>> 네, 저희는 공식 Vercel Sandbox를 활용하는
00:26:25두 가지 주요 도구를 갖고 있습니다. 별도의 샌드박스에 대해서는 잠시 후에 말씀드릴게요.
00:26:28첫 번째는 스크래치 조직을 생성할 때인데요,
00:26:33저희는 항상 Vercel Sandbox를 띄우고 SF CLI를 사용해 스크래치 조직을 생성합니다.
00:26:37두 번째 사용 사례는 Salesforce와 상호작용하여
00:26:43새로운 항목을 환경에 검증하거나 배포할 때입니다.
00:26:48이 작업은 항상 Salesforce CLI가 설치된 Vercel Sandbox에서 처리됩니다.
00:26:51저희 생각에는 CLI를 사용하는 것이 배포 및
00:26:54기타 작업을 수행하는 가장 쉬운 방법이며, Vercel Sandbox 덕분에
00:26:58이를 손쉽게 설치하고 기존 샌드박스들과 함께 계속해서 사용할 수 있습니다.
00:27:04이렇게 공식 Vercel Sandbox를 사용하는 두 가지 도구가 있고,
00:27:08추가로 모든 대화마다 개별적으로 생성되는
00:27:14작은 인메모리(in-memory) 샌드박스가 있습니다.
00:27:20에이전트가 턴을 진행할 때마다 파일을 모으고,
00:27:25인메모리 샌드박스에 무엇이 있는지 에이전트가 이해하도록 돕는 역할을 하죠.
00:27:26이렇게 두 가지 버전의 샌드박스를 사용하고 있습니다.
00:27:32>> 그렇군요. 혹시 샌드박스가 접근할 수 있는 범위를 제한하기 위해
00:27:36네트워크 제한 같은 조치를 취하고 계신가요? 보안 프로필은 어떻게 구성되어 있나요?
00:27:40>> Vercel Sandbox 측면 말씀이신가요?
00:27:42>> 네, 맞습니다.
00:27:43>> Vercel Sandbox는 기본적으로 아주 깨끗한 상태로 생성됩니다.
00:27:47그래서 필요한 파일만 로드하여 해당 파일에만 접근할 수 있도록 합니다.
00:27:52코드베이스 전체를 올리는 것이 아니라, 에이전트가 분석을 거쳐
00:27:56수립한 계획에 맞는 결과물만 가져가는 방식입니다.
00:28:02예를 들어 아까 보여드린 플로우 예시를 기준으로 설명하면, 관련 파일들을 가져와
00:28:05Salesforce 배포 시 요구하는
00:28:10디렉터리 구조를 생성한 뒤, 그 디렉터리에 파일을 넣습니다.
00:28:13그리고 해당 위치에서 배포를 진행하게 됩니다.
00:28:14따라서 샌드박스가 가진 권한은 매우 제한적이며, 적절한 시점에 제공하는 데이터만 다루게 됩니다.
00:28:20>> 유튜브에서 질문이 들어왔습니다. 요금제 모델은 어떻게 구성되어 있나요?
00:28:25과금을 어떻게 처리하시는지 궁금합니다.
00:28:28사용량 기준인가요, 사용자 수(Seat) 기준인가요, 아니면 Soapbox 방식인가요?
00:28:32>> 아주 좋은 질문이네요.
00:28:33현재 고객들에게 서비스를 출시하면서 이 부분을 조율하고 있고,
00:28:38가장 적절한 방식을 찾기 위해 최종화하는 과정에 있습니다.
00:28:41현재는 사용자 수(Seat) 기반 요금제를 적용하고 있으며,
00:28:48각 요금제 등급 안에서 대화 횟수,
00:28:53데이터 사용량, 상호작용 횟수 등에 제한을 두는 방식을 취하고 있습니다.
00:28:55일단은 그렇게 시작하고 있습니다.
00:28:59하지만 이 생태계에 계신 모든 분이 경험하셨다시피,
00:29:02토큰 기반 도구를 다룰 때는 상황이 아주 빈번하고 빠르게 변합니다.
00:29:07그래서 일단은 사용자 수 기반 요금제를 기준선으로 설정하여 시작하고 있습니다.
00:29:11>> 그렇군요. 고객의 사용량과 비즈니스 규모에 맞추면서도
00:29:16자체 운영 비용까지 감당할 수 있는 완벽한 모델을 찾는 것은 정말 어려운 일인 것 같습니다.
00:29:20충분히 공감합니다.
00:29:23다음 질문을 한번 보겠습니다.
00:29:24각 모델로 어떤 질문을 라우팅할지 어떻게 결정하시나요?
00:29:29보니까 어떤 작업은 Opus로 라우팅하고,
00:29:31어떤 작업은 Sonnet으로 라우팅하시던데요.
00:29:33그 기준을 어떻게 정하시는지 궁금합니다.
00:29:35평가(Eval) 시스템을 통해 데이터 기반으로 결정하시나요, 아니면 수동으로 테스트해 보면서
00:29:41"이런 유형의 작업에는 Sonnet으로도 충분하네" 하고 판단하시나요?
00:29:45어떤 접근 방식을 사용하셨나요?
00:29:46>> 네, 그 부분은 계속해서 발전하고 있는 영역입니다.
00:29:52현재 저희는 사용자가 처음에 던진 질문에 대해
00:29:57질문의 복잡도를 파악하는 규칙 기반(Deterministic) 분류기를 사용하고 있습니다.
00:30:03사용자가 "계획(plan)"이라는 단어를 썼는지,
00:30:04혹은 "조사(investigate)" 같은 표현을 썼는지 등을 분석합니다.
00:30:07이런 분석은 빠르고 비용이 들지 않기 때문에,
00:30:12아주 신속하게 단어들을 잡아낼 수 있습니다.
00:30:15그래서 처음에는 정규식(Regex)이나 규칙 기반 방식으로 시작합니다.
00:30:20여기서 일치하는 항목을 찾지 못하면 LLM 기반 분류기를 사용하게 되는데,
00:30:27입력된 텍스트가 특정 글자 수 임계값을 넘는 등의 조건이 만족되면
00:30:32LLM으로 넘겨서 질문의 실제 복잡도를 분류하도록 합니다.
00:30:38이 분류 모델은 매우 빨라서 질문 유형을 분류하는 데 약 300밀리초 정도 걸립니다.
00:30:42그렇게 분석한 결과를 바탕으로 Opus, Sonnet 또는 다른 알맞은 모델로 라우팅합니다.
00:30:47그리고 예외 상황에 대비한 대체(Fallback) 전략도 마련해 두었습니다.
00:30:49질문이 너무 복잡해지거나 사용자가 동일한 질문을 다시 던지는 경우,
00:30:54혹은 미리 설정해 둔 특정 규칙이 발동하면, 사용자가 올바른 답변을 얻을 수 있도록
00:30:59일정 임계값 동안 가장 강력한 모델로 전환하여 처리하게 됩니다.
00:31:06>> 그렇군요. 그럼 라우팅을 결정하는 분류기 모델로는 현재 Haiku를 사용하고 계신가요?
00:31:11>> 네, 첫 단계 분류에는 그렇습니다.
00:31:13>> 아주 좋네요.
00:31:15그리고 현재 v0 앰배서더 프로그램에도 참여하고 계시죠.
00:31:20그 활동이 제품 개발에 어떻게 도움이 되었나요? 다른 분들께도 추천하시나요?
00:31:23지금까지 이 프로그램을 통해 서비스를 개발하는 데 실질적인 도움을 받으셨나요?
00:31:28>> 네, 아주 큰 도움이 되었습니다.
00:31:30만약 듣고 계신 분들 중에 관련 커뮤니티와 더 밀접하게 소통하고 싶으신 분이 있다면 강력히 추천합니다.
00:31:36저도 이미 여러 지역에서 오프라인 행사를 몇 번 진행했습니다.
00:31:41한 달 전쯤에는 멕시코로 직접 가서 현지 세션을 열고,
00:31:48거기에 모인 많은 분과 함께 v0를 꼼꼼히 살펴보는 시간을 가졌습니다.
00:31:51개인적으로 v0 앰배서더 프로그램이 정말 유용하다고 느끼는 이유는
00:31:56실제 제품 팀 개발자분들과 직접 소통할 수 있을 뿐만 아니라,
00:31:59이 분야에 저만큼이나 열정을 가진 다른 개발자들과도 만날 수 있기 때문입니다.
00:32:03서로의 기발한 아이디어를 공유하고 토론하는 과정 자체가 엄청난 가치가 있었습니다.
00:32:08>> 멋지네요. 제품 팀 개발자분들과 직접 소통할 수 있다면
00:32:13많은 피드백을 전달하셨을 것 같은데요.
00:32:16이참에 공개적인 자리에서 피드백을 던져서
00:32:22그분들을 살짝 긴장하게 만들어 볼 만한 요청 사항이 있으신가요?
00:32:25>> 부드럽게 말씀드릴게요. 역시 가장 중요한 부분이고 이전에도 나눈 이야기인데,
00:32:30개발자가 로컬 IDE 환경에서 익숙하게 사용하던 기능들을
00:32:34v0 안으로 더 많이 가져오는 것입니다.
00:32:41지난 몇 달 동안 v0 내부에 샌드박스 기능이 추가되었고,
00:32:45직접 환경을 구동하여 실제 개발 환경처럼 다룰 수 있게 되었는데
00:32:49이것만으로도 올바른 방향으로 나아가는 엄청난 한 걸음이었습니다.
00:32:51앞으로도 이 방향을 계속 고수한다면 도구가 더욱 훌륭해질 것이라 생각합니다.
00:32:55그래서 지금 가고 있는 그 길을 계속 잘 가달라고 말씀드리고 싶습니다.
00:33:00>> 멋지네요. 정말 꾸준히 발전해 왔죠.
00:33:02예전에는 브라우저에서 아주 최소한의 기능만 작동하던 작은 에디터였는데,
00:33:06이제는 완전한 VS Code 수준의 Monaco 에디터 통합까지 이루어졌으니까요.
00:33:10매달 눈에 띄게 좋아지고 있는 것 같습니다.
00:33:14>> 맞습니다.
00:33:15>> 좋습니다. 이제 준비된 질문은 모두 다룬 것 같네요.
00:33:18오늘 이곳에 나와서 멋진 데모를 보여주신 것에 대해 정말 감사드립니다.
00:33:24더 궁금한 점이 있거나 Stopbox에 대해 자세히 알고 싶은 분들은 어디서 연락을 드리면 될까요?
00:33:32>> 저는 링크드인(LinkedIn)에서 가장 활발히 활동하고 있습니다.
00:33:34그러니 편하게 일촌 신청을 보내주시고 메시지도 남겨주세요.
00:33:37이 세션을 보고 연락했다고 말씀해주시면
00:33:39누구인지 바로 알아보고 기쁜 마음으로 소통하며 질문에 답변해 드리겠습니다.
00:33:44달력을 한번 확인해 볼게요.
00:33:48아무쪼록 오늘 자리해 주셔서 정말 감사드립니다.
00:33:52>> 아닙니다, 감사합니다.
00:33:55>> 네, 시청해 주신 다른 분들께도 감사 인사를 전합니다.
00:33:59조만간 또 다른 커뮤니티 세션이 진행될 예정인데요...
00:34:05일정을 한번 확인해 보겠습니다.
00:34:10미리 확인해 뒀어야 했는데 말이죠.
00:34:15아, 다가오는 목요일에 예정되어 있는데 아직 캘린더에는 등록되지 않았네요.
00:34:20그러니 며칠 뒤에 다시 방문해 주세요.
00:34:22새로운 세션이 준비되어 있을 겁니다.
00:34:24그럼 그때까지 커뮤니티에서 계속 뵙겠습니다.
00:34:27모두 좋은 하루 보내세요.