Vercel로 구축하는 에이전틱 AI: 솔트박스 원 (Saltbox One)

VVercel
Computing/SoftwareInternet Technology

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모두 좋은 하루 보내세요.

Key Takeaway

Saltbox One은 Vercel AI SDK와 AI Gateway 기반의 모델 라우팅 기술, 그리고 격리된 Vercel 샌드박스 내부의 CLI 실행 구조를 결합하여 복잡한 Salesforce 인프라에 코드를 직접 배포할 수 있는 실질적인 에이전틱 AI 솔루션을 구현했습니다.

Highlights

  • Saltbox One은 Vercel AI SDK 버전 6과 AI Gateway를 도입하여 특정 LLM에 의존하지 않고 Claude Opus, Sonnet, GPT 계열, Groq 등 다양한 모델을 상황에 맞게 라우팅하는 아키텍처를 구축했습니다.

  • 사용자가 던진 질문의 난이도를 분석하기 위해 정규식 기반 분류기와 약 300밀리초가 소요되는 Haiku 기반 LLM 분류기를 조합하여 최적의 모델로 요청을 전달합니다.

  • 브라우저 스트리밍의 제한 시간 범위를 넘어서는 대규모 Salesforce 빌드 작업을 처리하기 위해 백그라운드 프로세스 실행 환경을 통합 설계했습니다.

  • Vercel의 격리된 샌드박스 환경 내부에서 Salesforce CLI를 실행하여 사용자가 인증한 계정 권한으로 소스 코드와 리소스를 안전하게 검증하고 배포합니다.

  • 보안과 엔터프라이즈 권한 제어를 위해 모든 API 호출 및 데이터 변경 작업은 시스템 공용 권한이 아닌 개별 사용자의 OAuth 기반 권한을 따르며 쓰기 작업 시 명시적인 사용자 승인을 요구합니다.

Timeline

Salesforce 사용자 및 빌더를 위한 AI 에이전트 도입 배경

  • 비즈니스 사용자는 자연스러운 대화 방식으로 Salesforce 생태계와 상호작용하기를 원합니다.
  • Salesforce의 복잡한 비즈니스 맥락을 파악하고 이를 모범 사례에 부합하는 안정적인 코드로 변환하는 작업은 매우 어렵습니다.
  • 인프라 관리 부담을 최소화하고 프로덕트 개발 자체에 집중하기 위해 Vercel 플랫폼을 선택했습니다.

Salesforce를 다루는 일반 사용자는 일상적인 언어로 질문하고 답을 빠르게 얻기를 원하며, 내부 시스템을 설계하는 빌더들은 구축 과정을 간소화하고자 합니다. 범용 LLM에 단순히 질문하는 것만으로는 실무에 즉시 투입할 수 있는 정교한 결과물을 얻을 수 없습니다. 소규모 제품 팀으로서 비즈니스 가치 창출에만 집중하기 위해 확장 가능하고 관리가 필요 없는 Vercel 인프라 기반 위에 플랫폼을 설계했습니다.

Next.js와 AI SDK 및 AI Gateway를 활용한 3계층 아키텍처

  • 상위 UI 계층은 실시간 스트리밍 UI 기능이 탑재된 Next.js 애플리케이션으로 작동합니다.
  • 중간 제어 계층은 Vercel AI SDK 버전 6을 기반으로 구현되어 에이전트 루프와 내부 툴링을 통제합니다.
  • 하위 모델 연결 계층은 AI Gateway를 통해 특정 모델에 종속되지 않고 유연하게 교체할 수 있는 구조를 취합니다.

Next.js 애플리케이션 하단에서 Vercel AI SDK 버전 6이 모델 독립적인 에이전트 루프 프레임워크를 제공하여 강력한 도구들을 제어합니다. 단일 치트키 모델은 없다는 전제 하에 아키텍처를 설계했으며, AI Gateway 한 줄의 선언만으로 Claude Opus, Sonnet, GPT, Groq 등의 모델을 필요에 따라 가볍게 갈아 끼울 수 있습니다. 질문의 본질과 연산 복잡도에 맞춰 유연하게 연동되는 백엔드 서비스를 함께 배치했습니다.

규칙 기반 분류와 LLM 라우팅 및 처리 다각화

  • 질문의 복잡도를 먼저 분석한 후 단어에 따라 정규식이나 규칙 기반 분류기로 1차 필터링을 수행합니다.
  • 텍스트 길이가 임계값을 초과하는 복잡한 질문은 약 300밀리초가 소요되는 Haiku 분류 모델을 거쳐 최적의 추론 모델로 라우팅됩니다.
  • 브라우저 스트리밍 범위를 넘어서는 대규모 비즈니스 흐름 설계 작업은 백그라운드 장기 실행 프로세스로 전환하여 조율합니다.

간단한 인사말과 고난도 비즈니스 아키텍처 설계 작업을 구분하여 비용을 절감하고 속도를 향상시킵니다. 분석 규칙에서 일치하는 항목을 찾지 못하면 하이쿠 기반의 빠르고 가벼운 분류기가 질문 유형을 식별하여 가장 정확한 응답을 줄 수 있는 Opus나 Sonnet 등으로 분기시킵니다. 또한 시간 단위가 소요되는 무거운 백그라운드 연산과 실시간 스트리밍 UI를 동일한 플랫폼 환경 내에서 영리하게 결합했습니다.

Vercel 격리 샌드박스와 Salesforce CLI의 통합

  • 에이전트가 격리된 가상 파일 구조 안에서 디렉토리 및 파일 트리 구조를 원활히 이해하도록 샌드박스를 활용합니다.
  • 인증을 거친 사용자 세션 마다 Vercel Sandbox 환경을 띄우고 그 안에서 Salesforce CLI 명령어를 실행합니다.
  • 이 구조를 통해 소스 코드를 생성하고 가상 파일 구조에 적재한 뒤 스크래치 조직이나 실제 조직으로 변경사항을 안전하게 배포합니다.

웹 브라우저의 휘발성 환경이나 단순 API 연결의 한계를 넘기 위해 에이전트에게 실제 실행 권한을 부여하는 격리된 샌드박스를 도입했습니다. 사용자 계정으로 인증을 통과하면 샌드박스 내부에서 Salesforce CLI를 직접 작동시킬 수 있습니다. 파일 시스템 접근을 통해 필요한 결과물 디렉토리 구조를 그대로 유지하면서 소스 코드를 밀어 넣기 때문에 에이전트 코딩 생태계가 신뢰도 높은 실행력을 갖추게 됩니다.

v0 연동을 통한 개발 경험 혁신과 핵심 교훈

  • V0 연동 파이프라인을 구축하여 확보된 프로젝트 컨텍스트 전체를 v0 측에 정교하게 전달합니다.
  • 풍부한 맥락을 기반으로 리액트 컴포넌트는 물론 Apex 클래스, Lightning Web Component(LWC)까지 생성합니다.
  • 에이전트 솔루션 성공의 핵심 축은 게이트웨이 활용, 장기 백그라운드 실행, 샌드박스 CLI 통제, Vercel 인프라 도입으로 요약됩니다.

Saltbox One 환경에서 수집한 데이터와 컨텍스트 정보를 v0 파이프라인에 밀어주어 단순 지식을 뛰어넘는 정교한 코드를 산출합니다. 개발팀을 위한 네 가지 핵심 교훈으로 어떤 모델이 최강인지 논쟁하기보다 게이트웨이를 통해 영리하게 스위칭할 것, 스트리밍에 만족하지 말고 백그라운드 장기 실행 기능을 갖출 것, 에이전트가 격리된 공간에서 CLI를 휘두르게 할 것, 인프라 부담이 없는 적합한 플랫폼을 선정할 것을 제시합니다.

Saltbox One 플랫폼의 핵심 기능 라이브 데모 및 질의응답

  • 프로젝트 컨텍스트에 회의록, 데이터 모델, 아키텍처 다이어그램 등을 드롭하여 풍부한 대화를 이끌어냅니다.
  • 보안과 감사 추적을 위해 모든 API 동작은 사용자의 개별 OAuth 또는 API 키 권한으로만 수행됩니다.
  • 대화마다 독립적으로 생성되는 작은 인메모리 샌드박스와 배포 시 SF CLI를 동작시키는 Vercel Sandbox를 이중으로 사용합니다.

실제 데모에서는 회의 녹음본을 기반으로 요구사항을 추출해 Mermaid 다이어그램으로 데이터 모델을 시각화하고 업무 스토리를 설계하는 과정을 보여주었습니다. 또한 엔터프라이즈 환경에서의 권한 통제를 위해 대화 시작 시 사용자 계정으로 직접 SSO 및 OAuth 인증을 거치게 설계했습니다. 쓰기 동작 시에는 항상 승인 카드가 화면에 먼저 나타나며, 사용자가 직접 수락 단계를 거쳐야만 안전하게 Salesforce 조직에 코드가 배포되고 로그에 행위 주체가 남습니다.

Community Posts

View all posts