AI Agent 개발 정의서
백엔드 개발자를 위한 AI Agent 개념 정리
1. AI Agent란?
정의
"LLM을 두뇌로 사용하는 자율 실행 프로세스"
단순히 질문에 답하는 LLM과 달리, Agent는 목표(Goal) 를 주면 스스로 계획을 세우고, 필요한 도구를 선택해 실행하며, 결과를 보고 다음 행동을 결정하는 루프를 반복해 목표를 달성한다.
기존 LLM과의 차이
| 구분 | 기존 LLM (ChatGPT 등) | AI Agent |
|---|---|---|
| 동작 방식 | 질문 → 답변 (단발성) | 목표 → 계획 → 반복 실행 → 완료 |
| 상태 | Stateless | Stateful (메모리, 컨텍스트 유지) |
| 외부 연동 | 없음 | Tool 호출 (API, DB, 파일 시스템 등) |
| 루프 | 없음 | 결과를 보고 다음 행동 결정 (ReAct Loop) |
| 자율성 | 없음 | 목표 달성까지 스스로 판단 및 실행 |
2. 백엔드 관점으로 이해하기
백엔드의 일반적인 요청 처리 흐름:
Request → Controller → Service → Repository → External API → ResponseAgent의 실행 흐름:
Goal → LLM (판단) → Tool 선택 → Tool 실행 → 결과 관찰 → LLM (재판단) → ... → 완료| 백엔드 개념 | Agent 개념 |
|---|---|
| Service Layer (비즈니스 로직) | LLM (자연어로 로직을 판단하는 레이어) |
| Repository / External API 호출 | Tool (실제 실행 단위) |
| Workflow / Saga Pattern | Planning (태스크 오케스트레이션) |
| Session / Cache | Memory (상태 유지) |
| Event Loop | ReAct Loop (Think → Act → Observe 반복) |
핵심은 기존에 개발자가 if/else로 하드코딩했던 로직을, LLM이 런타임에 동적으로 판단한다는 것이다.
3. 핵심 구성요소
3-1. Tool
LLM이 호출할 수 있는 함수 단위. Agent의 "손발" 역할.
// Tool 정의 예시 (백엔드 함수와 동일한 구조)
const tools = [
{
name: "search_stock_price",
description: "특정 종목의 현재 주가를 조회한다",
parameters: {
ticker: { type: "string", description: "종목 코드 (e.g. AAPL)" }
},
execute: async ({ ticker }) => stockApiClient.getPrice(ticker)
},
{
name: "run_sql",
description: "데이터베이스에서 데이터를 조회한다",
parameters: {
query: { type: "string", description: "실행할 SQL 쿼리" }
},
execute: async ({ query }) => db.query(query)
},
{
name: "send_slack",
description: "슬랙 채널에 메시지를 발송한다",
parameters: {
channel: { type: "string" },
message: { type: "string" }
},
execute: async ({ channel, message }) => slackClient.send(channel, message)
}
];
LLM은 Tool의 name과 description을 보고 어떤 Tool을 언제 쓸지 판단한다. 즉, Tool 설명을 잘 쓰는 것 = Agent 품질에 직결.
3-2. Memory
Agent가 상태를 유지하는 방식. 크게 두 가지로 나뉜다.
| 유형 | 설명 | 백엔드 비유 |
|---|---|---|
| Short-term Memory | 현재 대화/작업의 컨텍스트 | Request-scoped 변수, 세션 |
| Long-term Memory | 과거 경험, 사용자 정보 등 영구 저장 | Vector DB, Redis, RDB |
Long-term Memory는 보통 Vector DB(Pinecone, pgvector 등)를 사용해 의미 기반 검색으로 필요한 과거 정보를 꺼내온다.
3-3. Planning
복잡한 목표를 서브태스크로 분해하고 실행 순서를 결정하는 단계.
Goal: "이번 달 실적 부진 종목 분석 후 리포트 발송"
Plan:
1. DB에서 이번 달 종목별 수익률 조회
2. 하위 10% 종목 필터링
3. 각 종목의 최근 뉴스 수집
4. 분석 리포트 작성
5. 슬랙 발송Saga Pattern이나 Workflow Orchestration과 개념이 유사하지만, 실행 계획 자체를 LLM이 동적으로 생성한다는 점이 다르다.
3-4. ReAct Loop
Agent의 실행 사이클. Reasoning + Acting의 합성어.
[Thought] 목표를 달성하려면 먼저 DB에서 데이터를 조회해야 한다.
[Action] run_sql("SELECT * FROM stocks WHERE month = '2026-03'")
[Observe] 결과: [{ticker: 'AAPL', return: -12%}, ...]
[Thought] AAPL이 부진하다. 관련 뉴스를 찾아봐야 한다.
[Action] search_news("AAPL 2026년 3월")
[Observe] 결과: "실적 발표 미스로 주가 하락..."
[Thought] 분석이 충분하다. 리포트를 작성하고 발송한다.
[Action] send_slack("#trading", "3월 부진 종목 분석: ...")
[Observe] 발송 완료
[Done]4. Agent 아키텍처 패턴
Single Agent
하나의 LLM이 모든 Tool을 직접 사용해 목표를 달성.
단순한 태스크에 적합.
User → Agent (LLM) → [Tool A, Tool B, Tool C]Multi-Agent
복잡한 태스크를 여러 Agent가 역할 분담해 처리. 마이크로서비스 아키텍처와 유사.
User → Orchestrator Agent
├── Research Agent → [Web Search Tool, News Tool]
├── Analysis Agent → [SQL Tool, Code Execution Tool]
└── Reporter Agent → [Slack Tool, Email Tool]| 패턴 | 설명 | 적합한 상황 |
|---|---|---|
| Single Agent | LLM 1개 + 여러 Tool | 간단한 자동화, 빠른 프로토타이핑 |
| Multi-Agent | 역할별 LLM 분리 | 복잡한 워크플로우, 병렬 처리 필요 시 |
| Human-in-the-loop | 중간에 사람 승인 | 고위험 작업 (결제, 배포 등) |
5. "Agent 개발"이 실제로 의미하는 것
요즘 언급되는 "AI Agent 개발"은 크게 두 가지 맥락이 있다.
(1) Agent 플랫폼/런타임 개발
Anthropic, OpenAI, Google 등이 하는 일. LLM 자체 + Tool 실행 엔진 + Memory 시스템을 직접 구축.
(2) Agent 기반 애플리케이션 개발 ← 대부분의 개발자
기존 LLM API + Agent 프레임워크를 활용해 서비스를 만드는 것.
백엔드 개발자 입장에서의 실제 작업:
- Tool 설계 및 구현 (기존 서비스 API를 Tool로 래핑)
- Memory 저장소 설계 (Vector DB 도입, 스키마 설계)
- 시스템 프롬프트 작성 (Agent의 역할, 제약 조건 정의)
- 에러 처리 및 fallback 로직
- 비용 최적화 (LLM API 호출 횟수, 토큰 관리)
주요 프레임워크
| 프레임워크 | 언어 | 특징 |
|---|---|---|
| LangChain | Python / JS | 가장 범용적, 생태계 풍부 |
| LangGraph | Python / JS | 그래프 기반 복잡한 워크플로우 |
| CrewAI | Python | Multi-Agent 특화 |
| Claude Agent SDK | Python | Anthropic 공식, 이 도구가 사용하는 것 |
| Vercel AI SDK | TypeScript | Next.js 친화적 |
6. 패러다임 전환 요약
기존 백엔드
개발자가 모든 분기를 코드로 정의
→ if (condition) doA() else doB()
AI Agent
LLM이 런타임에 분기를 판단
→ "이 상황에선 A가 맞겠다" (자연어 추론)결론:
Agent 개발은 새로운 언어나 프레임워크를 배우는 것이 아니라,
"코드로 제어하던 로직의 일부를 LLM의 판단에 위임하는 설계 방식" 을 익히는 것이다.
백엔드 개발자가 API 설계하듯, Agent 개발자는 Tool 설계와 프롬프트 설계를 한다.