에이전트 중심 제품 개발을 위한 황금 법칙
Contents
에이전트를 개발하는 회사들은 에이전트를 종종 부수적인 기능으로 여긴다. 그러나 이건 크나큰 실수이다.
오늘날 에이전트는 당신의 프로덕트와 유저 사이에서 상호작용하는 하나의 기능이다.

따라서 에이전트를 핵심 인터페이스로 염두에 두고 개발해야 한다.
이를 잘 활용할 수 있다면 업무 자동화와 비동기 흐름처럼 프로덕트의 무궁무진한 가능성을 열어준다. 그러나 반대로 엉성하게 활용한다면 유저의 신뢰를 잃게 만든다. 느리고 버그투성이에, 심지어 정확하지 않은 결과를 제공하기 때문이다.
우리 역시 이런 경험을 해왔기에 지난 1년 동안 AI 아키텍처를 두 번이나 전면 재설계할 수밖에 없었다. 그리고 지금 우리의 에이전트와 MCP는 일간 사용자 수 6,000명을 기록했다.
그 과정에서 우리가 배운 에이전트 중심 제품 개발을 위한 황금 법칙을 공유하려고 한다.
1. 인간이 하면 에이전트도 할 수 있어야 한다
인간이 프로덕트를 통해 할 수 있는 건 에이전트도 할 수 있어야 한다. 즉, 에이전트는 모든 기능에 접근할 수 있어야 한다.
예를 들어 에이전트에게 가격 책정을 위한 A/B 테스트 실행을 명령한다고 가정해보자. 에이전트는 PostHog MCP를 이용해서 피처 플래그와 실험을 생성하고, 둘을 연결한다. 그리고 인사이트와 지표를 설정한다.
그러나 우선순위에 밀려서 실험 생성 기능이 없다고 상상해보자. 에이전트는 플래그와 인사이트까지 만들고, 당신이 직접 PostHog에서 실험을 생성한 뒤 실험 ID를 복사해 붙여넣어 달라고 요청할 것이다. 이는 무척 번거롭고, 에이전트를 사용하는 의미를 없앤다.
에이전트의 장점은 업무를 수행할 때 필요한 시간, 집중, 그리고 전문 지식을 줄여주는 것이다. 만약 에이전트가 실제 유저가 사용하는 것과 동등한 기능에 접근할 수 없다면 결국 중간에 사람의 손을 다시 거쳐야 한다.
물론 인간의 개입이 유용한 순간도 있다. 민감한 정보를 다루는 일처럼 말이다. 그러나 이건 우리가 의도적으로 에이전트를 배제하는 업무이지, 에이전트가 기능상 한계 때문에 수행할 수 없는 업무가 돼서는 안 된다.
실제로는 이런 모습이다
사실상 에이전트는 API의 모든 요소에 접근할 수 있어야 한다.
그렇다고 해서 모든 엔드포인트를 MCP 툴로 바꾸라는 얘기는 아니다. 우리는 v1에서 이와 같은 실수를 했다. 다음 법칙을 설명하면서 이 실수에 대해서 자세하게 설명하겠다.
v2에서 우리는 아래와 같은 방식을 사용했다.
- 우리 파이프라인은 타입이 지정된 Django 엔드포인트에서 OpenAPI 스펙을 자동으로 생성한다.
- 그걸 TypeScript 유효성 검사 스키마인
Zod로 변환한다. - 동시에 각 제품 팀이 YAML 설정 파일을 통해 엔드포인트를 직접 허용해야 한다. 기본적으로는 아무것도 외부에 노출되지 않는다.
- 그다음 파이프라인이
Zod스키마와 YAML 설정을 합쳐서 최종 TypeScript 툴 핸들러를 생성한다.
그 결과 우리는 제품 영역별로 하나씩 파일이 나뉜 툴 핸들러 세트를 얻었다. 이는 MCP 서버에서 바로 쓸 수 있다.
에이전트는 엔드포인트를 100% 정확하게 매치시키지는 않더라도, PostHog API를 통해서 인간이 수행할 수 있는 모든 것들을 할 수 있어야 한다.1
Subscribe to our newsletter
Product for Engineers
Read by 100,000+ founders and builders
We'll share your email with Substack
2. 에이전트의 추상화 수준에 맞춰라
에이전트 중심의 경험을 구축하기 위해서는 에이전트가 가장 잘 이해하는 언어 수준을 찾고 그걸 활용해야 한다.
이 과정은 수많은 컨텍스트를 절약해준다. 그 장점은 유용한 수준을 넘어 근본적인 차이를 만든다. 프로덕트 에이전트의 인터페이스에 인간의 개입이 적을수록, 그곳엔 더 많은 잠재적 창의성이 존재한다.
생일 선물로 레고 세트를 받은 어린아이를 떠올려보라. 만약 이미 타이어가 조립된 레고라면 아이는 자동차, 트럭, 비행기 같은 상상 가능한 수준의 바퀴 달린 것만 만들 수 있다.
그러나 만약 모든 블록들이 전혀 조립되어 있지 않은 상태라면, 아이는 자유롭게 블록들을 믹스앤매치해서 오토바이, 타이어 그네, 눈썰매처럼 타이어를 자유자재로 활용해서 조립할 수 있다.2
실제로는 이런 모습이다
이전 버전의 MCP에서 "왜 지난주 신규 가입자 수가 떨어졌지?"라는 질문에 에이전트는 projects-get, insight-get, insight-query 두 번까지 총 네 번의 별도 호출을 해야 했다.
사람이 직접 PostHog UI를 탐색한다면 get-insight나 get-funnel 같은 명령어를 놓치지 않겠지만, 에이전트에게는 불필요한 번역 과정일 뿐이다.
그래서 MCP v2에서 우리는 에이전트가 가장 잘 활용할 수 있는 언어인 SQL을 이용해서 PostHog의 데이터를 바로 조회할 수 있게 했다.
프로덕트를 적절한 추상화 수준으로 노출시키자 데이터를 읽고 조회하는 엔드포인트들을 제거할 수 있었다. 그것들은 이미 executeSql.ts에 포함되어 있기 때문이다.
이제 "왜 지난주 신규 가입자 수가 떨어졌지?"에 대한 질문은 하나의 명쾌한 쿼리로 답할 수 있다.