AI 에이전트를 활용한 개발자가 알아야 할 최소 지식
요약
본 글은 AI 에이전트 활용을 넘어, 시스템 엔지니어가 LLM의 내부 작동 원리를 깊이 이해하는 것을 목표로 합니다. 토크나이징부터 트랜스포머 아키텍처(Attention 메커니즘)와 KV Cache 같은 핵심 기술적 배경까지 심층적으로 다룹니다.
핵심 포인트
- LLM은 텍스트를 벡터 공간에 매핑하고, RoPE 등을 사용해 위치 정보를 부여합니다.
- 트랜스포머의 핵심은 Q, K, V를 이용한 Scaled Dot-Product Attention입니다.
- KV Cache는 긴 문맥 처리 시 GPU 메모리(VRAM) 소모가 큰 병목 지점입니다.
- 최신 에이전트는 LLM이 JSON 형태로 도구 호출 구조화 데이터를 출력하는 능력을 활용합니다.
최근 개발팀에서 AI 에이전트를 활용한 소프트웨어 개발로의 전환을 본격적으로 추진하고 있습니다.
단순히 '프롬프트 엔지니어링'이나 'AI 사용법' 수준에 머무르지 않고, SE(시스템 엔지니어)들이 기술적인 이면(내부 구조, 프로토콜, 아키텍처)을 정확하게 이해하여 시스템 설계나 팀 개발 프로세스 업데이트에 활용하는 것을 목표로 본 글을 작성했습니다.
단순히 '확률에 의한 다음 단어 예측'의 배경에서 트랜스포머(Transformer) 아키텍처가 구체적으로 어떤 계산을 수행하는지 기술적으로 정리합니다. (기술적 메커니즘 심층 분석)
수학적인 부분이므로, 이런 방식으로 작동하고 있구나 정도만 이해하시면 됩니다.
입력 텍스트는 수치열로 변환되어 다차원 벡터 공간에 매핑됩니다.
-
Tokenization (BPE / WordPiece)
-
텍스트를 바이트 쌍 인코딩(Byte Pair Encoding, BPE) 등으로 서브워드(토큰)에 분할하고, 어휘 사전(예: 어휘 수 10만 개)의 인덱스 ID(정수)로 변환
-
Token Embedding & Positional Encoding
-
각 토큰 ID를 다차원 벡터(예: 4096차원 또는 12288차원)의 밀집 벡터(Embedding)로 변환
-
Positional Encoding (RoPE: Rotary Position Embedding 등): Transformer는 RNN과 달리 모든 토큰을 병렬 처리하기 때문에 단어 순서 정보를 가지고 있지 않습니다. 따라서, 복소수 평면상의 회전 행렬을 사용한 RoPE 등의 기법으로 토큰의 절대 위치 및 상대 위치 정보를 벡터에 직접 가산하거나 연산합니다.
[입력 텍스트: "AI 개발"]
↓ Tokenizer (BPE)
[토큰 ID: 1542, 8920, 301]
...
트랜스포머의 핵심인 Scaled Dot-Product Attention입니다.
$$ ext{Attention}(Q, K, V) = ext{softmax}igg(rac{QK^T}{\sqrt{d_k}}\bigg)V $$
- Query ($Q$): '무엇을 찾고 있는지'를 나타내는 벡터 ($Q = X ext{ } ullet W_Q$)
- Key ($K$): '어떤 정보를 가지고 있는지'를 나타내는 벡터 ($K = X ext{ } ullet W_K$)
- Value ($V$): '실제 정보 콘텐츠'를 나타내는 벡터 ($V = X ext{ } ullet W_V$)
LLM이 텍스트를 토큰 단위로 순차적으로 생성(Auto-regressive Generation)할 때, 과거 토큰의 $K$와 $V$ 계산 결과를 메모리에 유지하는 구조를 KV Cache라고 부릅니다.
- 과제: 긴 문맥이 될수록 KV Cache가 VRAM(GPU 메모리)을 대량으로 소비합니다 ($O(N)$ 메모리 증가)
- 장문 이해의 한계 (Needle in a Haystack): 컨텍스트 길이가 128k나 1M로 확장되어도, 입력의 '중앙 부근'에 있는 정보를 놓치기 쉬운 현상(Lost in the Middle)이 존재하기 때문에, 단순히 문맥 창을 넓히는 것뿐만 아니라 후술할 RAG 등의 구조화된 검색이 계속 중요합니다.
최종 레이어의 로짓(Logits: 어휘 수 분량의 비정규화 점수)에 Softmax를 적용하여 전체 어휘의 확률 분포를 내고, 다음 1개의 토큰을 샘플링합니다.
개발 지원 도구가 단순한 '코드 자동 완성(Autocomplete)'에서 '목적 달성을 위한 자율 실행(Agent)'으로 변화한 기술 배경과 설계 패턴입니다. (Agentic Workflow)
에이전트가 터미널 조작, 파일 검색, Git 조작 등을 할 수 있는 것은 LLM이 '도구를 호출하기 위한 구조화된 데이터(JSON)'를 출력하는 기능을 가지고 있기 때문입니다.
[User] ────> [Agent / Runner] ────(1. 프롬프트 + 도구 정의 JSON)────> [LLM]
│ │
│ <────(2. "read_file" 함수를 인수로 호출하라는 지시)─────┘
...
{
"name": "execute_command",
"description": "터미널에서 쉘 명령을 실행함",
...
Anthropic이 오픈소스 형태로 제안한 **MCP (Model Context Protocol)**는 LLM 애플리케이션(Host/Client)과 외부 데이터 소스 및 도구(Server)를 연결하는 공통 프로토콜(JSON-RPC 2.0 기반)입니다.
기존에는 도구나 서비스(GitHub, Jira, DB, Notion 등)마다 개별 구현(Custom Integration)이 필요했지만, MCP 덕분에 클라이언트와 서버가 느슨하게 결합(decoupled)되었습니다.
┌────────────────────────────────────────────────────────┐
│ Host App (Cursor, Claude Desktop, Roo Code, Custom) │
│ └─ MCP Client │
...
- Resources: 파일, DB 레코드, 로그 등의 '참조 전용 데이터'를 제공 -
- Prompts: 서버 측에서 정의된 재사용 가능한 프롬프트 템플릿 -
- Tools: 외부 작용(쓰기, API 호출, 명령어 실행)을 수반하는 실행 가능한 함수
에이전트는 한 번의 생성으로 끝나지 않고, **ReAct 패턴 (Reasoning + Acting)**과 같은 자율 루프를 반복합니다.
// 에이전트 루프 개념 구현 (TypeScript 예시)
async function runAgentLoop(userGoal: string, tools: Tool[]) {
const messages: Message[] = [{ role: 'user', content: userGoal }];
...
- Reflection (자기 복구/비평): 생성된 코드를 린터나 테스트(
npm test)를 거쳐 오류 결과를 다시 LLM에 읽히게 하여 자동 수정하게 합니다. - Multi-Agent Collaboration (다중 에이전트 협업): 역할 분리(예: Architect Agent, Coder Agent, Reviewer Agent)를 통해 에이전트 간 상호 리뷰 루프를 수행합니다. - Human-in-the-Loop (HITL): 파괴적인 변경(DB 마이그레이션, 외부 API 실행,git push등) 전에 인간의 명시적 승인 단계를 거치는 인터셉터 구조
이는 자체 제품이나 엔터프라이즈 시스템에 LLM/Agent 기능을 통합할 때, 상용 운영 가능한 기술 구성입니다. (상용 운영 아키텍처와 실전)
단순한 '벡터화 + 유사도 검색(Naive RAG)'으로는 사내 표기 오류나 복잡한 비즈니스 로직에 대응하기 어렵습니다. 상용 구축에서 채택되는 진보된 패턴을 비교합니다.
| RAG 패턴 | 개요/접근 방식 | 장점 | 단점/과제 |
|---|---|---|---|
| Naive RAG | 문서를 고정 길이로 분할(Chunking)하여 Vector DB에서 Cosine 유사도 검색 | 구성이 매우 간단하고 빠름 | 키워드 완전 일치나 구조화 데이터에 취약 |
| Hybrid Search + Rerank | Vector 검색 + BM25 (전체 텍스트 검색)를 통합하고, Cross-Encoder로 재점수 산정 | 모델명/고유 명사의 검색 누락을 막아 정확도 대폭 향상 | 검색 레이턴시가 약간 증가함 (Reranker 계산 비용) |
| Parent-Document RAG | 작은 청크로 검색을 수행하고, LLM에 전달할 때는 부모 문서(큰 문맥)를 전달 | 검색 정확도와 문맥 유지의 양립 가능 | DB 측 인덱스 설계가 복잡해짐 |
| GraphRAG | 지식 그래프(Entity-Relation)를 구축하고, 커뮤니티 탐색과 결합하여 검색 | 조직 전반의 전체 그림 파악이나 개념 관계 답변에 매우 강력함 | 그래프 구축 비용 (LLM 호출 비용)이 높음 |
[User Query]
│
▼
...
LLM을 통합한 시스템에서는 기존의 SQL 인젝션 등과는 다른 새로운 공격면(Attack Surface)에 대응해야 합니다.
- Prompt Injection / Jailbreak 방지: - System/User 프롬프트 분리: 입력 프롬프트의 엄격한 구분 (XML 태그
<user_input>
등의 활용) - 전처리 필터: 입력층에 검지 모델(Llama Guard나 NeMo Guardrails 등)을 끼워 넣어 부적절한 프롬프트나 명령 덮어쓰기(System Prompt Override)를 감지하고 차단
-
System/User 프롬프트 분리: 입력 프롬프트의 엄격한 구분 (XML 태그 등으로)
-
Output Validation & Structured Output:
LLM의 출력 형식을 보장하기 위해 Pydantic, Zod, TypeChat 등을 사용한 스키마 유효성 검사(Schema Validation)를 실시하고,
파싱 실패 시에는 에러 로그와 함께 재시도 루프(Retry Loop)를 실행 -
데이터 프라이버시 옵트아웃:- Enterprise API (Azure OpenAI, AWS Bedrock, Anthropic API 등)를 이용해 입력 데이터가 모델 학습에 재사용되지 않는 규약/구성을 확보
LLM 애플리케이션은 출력이 비결정론적(Non-deterministic)이므로, 기존의 모니터링(Datadog 등) 외에도 LLMOps 플랫폼(LangSmith, Phoenix, Langfuse 등)이 필요합니다.
[Client] ───> [API Gateway] ───> [LLM Application]
│
├── (Trace / Latency / Token) ──> [LLMOps (LangSmith/Langfuse)]
...
-
Prompt Caching: Claude API 등의 프롬프트 캐시 기능을 활용하여 고정된 시스템 프롬프트나 RAG의 컨텍스트 부분 로딩 비용을 최대 80% 절감하고, 레이턴시를 대폭 저감
-
Model Routing: 가벼운 처리(분류나 요약)는 소형 모델(Claude Haiku, GPT-4o-mini), 고도한 추론/코드 생성은 플래그십 모델(Claude Sonnet, O3)로 동적으로 라우팅
-
Speculative Decoding: 작은 모델로 빠르게 토큰을 사전 생성하고, 큰 모델로 검증 및 일괄 채택함으로써 생성 속도를 향상
-
Faithfulness (성실성): 생성된 답변이 주어진 컨텍스트에 근거하는지 (환각(Hallucination) 감지)
-
Answer Relevance (답변 관련성): 사용자의 질문에 정확하게 답하고 있는지
-
Context Precision / Recall (문맥의 정밀도/재현율): RAG로 가져온 검색 결과가 적절한지
프로그래밍의 단순 수작업 부분은 AI 에이전트에게 맡기는 시대가 오고 있지만, 전체 구조 설계, 보안 확보, 비즈니스 요구사항을 정확한 제약 조건으로 녹여내는 엔지니어링의 가치는 그 어느 때보다 높아지고 있다고 생각합니다.
이번 내용을 종합하여 아래 세 가지 포인트에서 팀 단위 AI 개발을 구상해 보고 싶습니다.
- 개발 프로세스 재설계로서, 'AI에게 코드를 쓰게 하는 것'뿐만 아니라, AI가 작동하기 쉽도록 리포지토리를 구조화하고 (README.md, ARCHITECTURE.md, 타입 정의의 엄격화 등), MCP 등의 인터페이스를 정비하는 것
- 안전성 확보로서, RAG 파이프라인, Guardrails, 비용(토큰 수/캐시), 레이턴시(SSE 스트리밍)의 트레이드오프를 구체적인 수치를 제시하며 설계하는 것
- 품질 관리 변혁으로서, 기존 방식의 테스트(Unit/Integration Test)와 LLM 애플리케이션 평가(LLM-as-a-Judge / CI 라인에서의 정밀도 감시)를 결합한 하이브리드 평가 체계를 구축하는 것
참고 (감사)
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기