CDECLOG

✔ Write down what comes to mind :: Bright size life

AI Agent 구현의 두 갈래: 일반 Tool Calling vs MCP 비교

AI 에이전트를 구축할 때, LLM이 외부 도구를 사용하게 만드는 과정은 필수적입니다. 하지만 최근 등장한 **MCP(Model Context Protocol)**와 기존의 Function/Tool Calling은 비슷해 보이면서도 구조적으로 큰 차이가 있습니다. 오늘은 이 두 방식의 특징과 실제 구현 관점에서의 차이를 상세히 비교해 보겠습니다. 1. 한눈에 보는 비교 요약 구분 일반 Tool Calling (기존 방식) MCP (Model Context Protocol) 핵심 개념 함수 정의와 실행 로직의 수동 연결 도구의 정의와 실행이 결합된 표준화된 서버 실행 주체 에이전트 애플리케이션 (Local, Tightly Coupled) 독립된 MCP 서버 (Remote/Isolated) 통신 규격 모델별 전용 API (OpenAI, Anthropic 등) JSON-RPC 2.0 표준 프로토콜 툴 목록 관리 코드에 하드코딩, 앱 재배포 필요 서버에서 동적으로 list_tools() 조회 확장성 새 툴 추가 시 앱 코드 수정 및 재배포 MCP 서버만 추가·재시작하면 즉시 연동 상호운용성 모델별 규격 변환 코드 직접 작성 필요 MCP 지원 클라이언트라면 어떤 모델이든 재사용 컨텍스트 제공 주로 ‘액션(함수 호출)‘에 집중 툴 + 리소스(파일, DB) + 프롬프트 템플릿 패키지 보안/격리 에이전트 프로세스 내에서 직접 실행 실행 로직이 서버에 캡슐화, 권한 경계 명확 2. 일반 Tool Calling: “직접 요리하기” 방식 일반적인 방식에서 에이전트는 요리사(LLM)가 준 레시피(JSON)를 보고 **직접 요리(함수 실행)**를 합니다. 실행 로직이 에이전트 코드 내부에 깊게 박혀 있는 구조(Tightly Coupled)입니다. ...

February 23, 2026 · Byung Kyu KIM

Claude Code 무료 플랜 활용 가이드 (Ollama, free-claude-code)

Claude Code를 쓰고 싶은데 유료 API 비용이 부담될 때, 실무에서는 보통 두 가지 경로를 사용합니다. Ollama 기반 로컬 모델 연결 free-claude-code 같은 호환 레이어를 통해 NVIDIA NIM, OpenRouter, LM Studio 백엔드 연결 이 글은 각 방식의 배경, 설치/설정 방법, 그리고 운영 시 주의점을 정리합니다. 왜 “무료 플랜” 구성이 필요한가 코드 에이전트는 반복 호출이 많아 토큰 비용이 빠르게 증가합니다. 개인 프로젝트나 학습 단계에서는 응답 품질보다 비용 상한이 더 중요할 수 있습니다. 팀 환경에서는 “무조건 최신 고가 모델"보다 “저비용 + 재현 가능한 워크플로"가 더 실용적입니다. 핵심은, Claude Code UX를 유지하면서 백엔드를 교체하는 것입니다. ...

February 23, 2026 · Byung Kyu KIM

Shell 환경변수 정리: export 유효 범위, 인라인 변수, .env 파일

셸에서 환경변수(Environment Variable)는 프로세스가 실행될 때 함께 전달되는 key=value 형태의 설정값입니다. CLI 도구 동작 제어, API 키 전달, 실행 경로(PATH) 설정 등 DevOps 작업의 기본 단위로 쓰입니다. 1. 환경변수 정의와 셸에서의 사용 방법 환경변수는 보통 다음 형태를 사용합니다. export APP_ENV=production export API_URL=https://api.example.com 확인 방법: echo "$APP_ENV" printenv APP_ENV env | rg '^APP_ENV=' 각 명령의 의미: echo "$APP_ENV": 현재 셸이 가진 변수 값을 확인 (셸 변수/환경변수 모두 확인 가능) printenv APP_ENV: 현재 프로세스의 환경변수만 확인 (export 안 된 셸 변수는 안 보임) env | rg '^APP_ENV=': 현재 프로세스의 환경변수 목록에서 패턴 필터링 예시: ...

February 23, 2026 · Byung Kyu KIM

AI 에이전트(OpenClaw 등)의 LLM 인터페이스 구현 및 툴 콜링 기술 개요

OpenClaw, Claude 데스크톱 앱, 혹은 로컬 기반의 여러 AI 에이전트들은 내부적으로 LLM(대형 언어 모델)과 어떻게 소통하고, 로컬 환경의 도구(Tool)들을 사용할까요? 이 글에서는 에이전트가 LLM과 인터페이스를 맺는 기술적 구현 내용과 핵심 요소들을 살펴봅니다. 1. 지침 파일(agent.md 등) 적용 방법 AI 에이전트의 페르소나, 역할, 기본 규칙을 정의하기 위해 주로 .md 형태의 지침 파일을 사용합니다. (예: agent.md, system_prompt.txt, SOUL.md 등) 기술적 구현: 이러한 지침 파일은 LLM에 전달되는 **시스템 프롬프트(System Prompt)**로 로드됩니다. 에이전트 프로그램이 실행될 때 혹은 세션이 시작될 때 파일 시스템에서 문서를 읽어 LLM의 system 역할(role) 메시지에 주입합니다. ...

February 21, 2026 · Byung Kyu KIM

OpenClaw 용어집 및 운영 지침 가이드

OpenClaw(ClawdBot 기반)는 개인 AI 에이전트를 메시징 채널과 연결해 운영하는 게이트웨이 중심 프레임워크입니다. 이 문서는 용어를 사람 친화적으로 정리하고, 운영 시 바로 적용할 수 있는 체크리스트와 최신 변경 사항(공식 소스 기준)까지 함께 제공합니다. 개요 문서 목적: 용어 설명 + 운영 지침 통합 가이드 최신 정보 범위: 공식 문서와 공식 릴리스만 사용 최신 반영 기준: GitHub Release v2026.2.15 (게시일: 2026-02-16) docs.openclaw.ai의 공식 업데이트 문서 핵심 개념 (단순 설명) Gateway (게이트웨이) 모든 메신저(WhatsApp, Telegram, Discord 등)와 에이전트를 연결해 주는 중앙 서버/데몬. 기본 포트: 18789 (WebSocket). 한 개의 Gateway로 여러 채널과 여러 에이전트를 동시에 관리 가능. Agent (에이전트) AI 어시스턴트의 “뇌"에 해당. 개별 성격, 메모리, 행동 방식을 가짐. 각 Agent는 격리된 상태(workspace, auth, sessions)를 유지. 기본 에이전트 이름: main. Workspace (작업 폴더) Agent의 “개인 폴더"로, 기본 경로: ~/.openclaw/workspace. 주요 파일: AGENTS.md: 동작 지시, 규칙, 메모리. SOUL.md: 성격, 말투, 경계. USER.md: 사용자 정보와 호칭. TOOLS.md: 사용 가능한 도구/툴 설명. BOOTSTRAP.md: 최초 실행 설정(한 번 실행 후 삭제). memory/YYYY-MM-DD.md: 일일 메모리 로그. Agent Directory (agentDir) 에이전트의 기술 설정/인증 정보를 저장. 기본 경로: ~/.openclaw/agents/<agentId>/agent. 주요 파일: auth-profiles.json: 모델 제공자(Anthropic, OpenAI 등) 인증 정보. 에이전트별 모델 설정/구조 파일. 통신 구조 Channel (채널) 메신저 연결 단위. 예: WhatsApp, Telegram, Discord 각각 하나의 관(pipe). Account ID (accountId) 같은 채널 내 여러 계정을 구분. 예: 개인 WhatsApp, 업무용 WhatsApp. Session Key (sessionKey) 대화 스레드를 구분하는 고유 이름/주소. 예: agent:main:main (기본 1:1 대화) agent:main:telegram:group:123 (그룹 대화) Session ID (sessionId) 실제 대화 기록 파일 ID. 경로 예: ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl. 세션 재설정 시 값이 바뀜. Binding (바인딩) 라우팅 규칙. 어떤 채널/계정/연락처에서 온 메시지를 어떤 Agent로 보낼지 결정. 가장 구체적인 규칙이 우선 적용. 세션 관리 Main Session (기본 대화) 기본 1:1 대화 세션. 예: agent:<agentId>:main. 모든 개인 대화를 한 세션으로 모아 유지할 수 있음. DM Scope (dmScope) DM(1:1) 분리 수준 설정. main: 모든 DM 공유 per-peer: 사용자별 분리 per-channel-peer: 채널+사용자별 분리 per-account-channel-peer: 계정+채널+사용자별 최대 분리 Session Reset (초기화) 새 대화를 시작할 때 sessionId를 새로 생성. 방법: 수동: openclaw new, openclaw reset 자동: 지정 시각(예: 매일 04:00), 비활성 시간 기준 자동 리셋 Compaction (압축/요약) 긴 대화를 요약해 컨텍스트 한도 초과를 방지. 핵심 맥락은 남기고 오래된 상세를 정리. Memory Flush (메모리 저장) Compaction 전에 중요한 정보를 영구 메모리로 기록. memory/YYYY-MM-DD.md에 저장. NO_REPLY 내부 메시지로 사용자 노출 없이 처리 가능. 접근 제어 / 보안 Pairing (페어링) 새 노드(장치) 연결 시 승인 절차. 로컬(127.0.0.1)은 자동 승인 옵션 가능. 승인 후 토큰 발급으로 접근 허용. DM Policy (dmPolicy) DM 허용 범위 제어. open: 누구나 가능(위험) pairing: 승인 사용자만 allowlist: 허용 목록만 Allow From (allowFrom) 허용 번호/ID 목록. 예: +15555550123 Group Policy (groupPolicy) 그룹 참여 범위 제어. open: 모든 그룹(권장하지 않음) allowlist: 허용 그룹만 denylist: 차단 목록 제외 Require Mention 그룹에서 @멘션이 있을 때만 응답. 불필요 응답/스팸 방지에 유효. Gateway Token (OPENCLAW_GATEWAY_TOKEN) Gateway 접속용 공유 비밀. WebSocket 인증에 사용. Sandbox (샌드박스) 도구 실행 격리(도커 기반). 모드: off: 비격리(전체 시스템 접근) non-main: 메인 세션만 비격리 all: 모든 세션 격리 스코프: session, agent, shared 주의 ...

February 17, 2026 · Byung Kyu KIM

127.0.0.1 vs localhost: 차이와 함정

작성일: 2026-02-08 운영 환경에서 “localhost로 붙었는데 왜 안 되지?” 같은 문제는 자주 발생합니다. 결론부터 말하면 127.0.0.1과 localhost는 보통 같은 의미로 쓰이지만, 항상 동일하게 해석되진 않습니다. 이 미묘한 차이가 헬스체크 실패, 접근 불가, 보안 정책 충돌로 이어질 수 있습니다. 1. 루프백(Loopback) 정의 루프백은 자기 자신에게 되돌아오는 네트워크 경로입니다. 물리 NIC 없이도 TCP/IP 스택을 테스트하거나 로컬 프로세스 간 통신을 가능하게 합니다. IPv4 루프백 대역: 127.0.0.0/8 (대표 주소가 127.0.0.1) IPv6 루프백 주소: ::1 즉, 127.0.0.1은 항상 이 머신 자신을 의미합니다. DNS나 이름 해석 과정과는 무관합니다. ...

February 8, 2026 · Byung Kyu KIM

SSH 리버스 프록시(Reverse Proxy) 네트워크 구성: 설정, 주의 사항, 운영 팁

작성일: 2026-02-08 SSH 리버스 프록시는 외부에서 내부로 직접 접근할 수 없는 환경에서 유용한 연결 방식입니다. 내부 서버가 외부 서버로 역방향 터널을 먼저 열어두고, 외부 사용자가 그 터널을 통해 내부 서비스에 접근하는 구조입니다. DevOps 환경에서 운영할 때 필요한 구성, 주의 사항, 네트워크 프록시 관점을 정리합니다. 1. 개념 정리: SSH 리버스 프록시 일반 SSH 포워딩(로컬 포워딩): 로컬 -> 원격 리버스 포워딩(Reverse): 원격 -> 로컬(내부) 리버스 포워딩은 내부 서버가 먼저 외부(중계) 서버에 접속하고, 외부에서 그 연결을 통해 내부 서비스에 접근하는 방식입니다. ...

February 8, 2026 · Byung Kyu KIM

Async/Await의 본질: 우리는 왜 '기다림'을 '멈춤'으로 착각하는가?

Async/Await의 본질: 우리는 왜 ‘기다림’을 ‘멈춤’으로 착각하는가? 많은 개발자가 await를 보면 “코드가 여기서 멈춘다"라고 직관적으로 이해합니다. 하지만 이는 논리적 흐름의 멈춤일 뿐, 물리적인 스레드가 멈추는 블로킹은 아닙니다. async/await는 동기 코드처럼 보이게 만들면서, 실제로는 실행 흐름을 나눠 코루틴처럼 동작합니다. 이 글은 JavaScript, Python, C#을 비교해 async/await가 어떻게 “동기처럼 보이는 비동기"를 만드는지 설명합니다. 1. 가장 큰 오해: 멈춤이 아니라 양보 await는 실행 흐름을 잠시 중단시키지만, 스레드 전체를 멈추지는 않습니다. 핵심은 다음입니다. await는 현재 함수의 실행 컨텍스트를 일시 중단한다. 제어권은 즉시 호출자나 이벤트 루프로 돌아간다. 작업이 끝나면 중단 지점부터 다시 이어서 실행된다. 비유로 말하면, 식당에서 진동벨을 받고 자리에 앉는 것과 같습니다. 나는 기다리지만, 카운터 앞을 막고 서 있지는 않습니다. ...

February 6, 2026 · Byung Kyu KIM

Lazygit 가이드: 설치부터 패널별 치트시트

Git은 강력하지만 명령어 입력 방식은 때로 직관성이 떨어집니다. 특히 수많은 파일을 개별적으로 스테이징하거나 복잡한 인터랙티브 리베이스를 수행할 때 터미널 UI(TUI) 도구의 진가가 드러납니다. 그중에서도 가장 완성도 높은 도구인 Lazygit을 파헤쳐 봅니다. 1. Lazygit 설치 (Installation) 환경에 맞는 패키지 매니저를 사용하여 간단히 설치할 수 있습니다. macOS brew install lazygit Windows # Scoop 사용 시 scoop bucket add extras scoop install lazygit # Winget 사용 시 winget install jesseduffield.lazygit Linux (Ubuntu/Debian 등) # 바이너리 직접 설치 예시 LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" tar xf lazygit.tar.gz lazygit sudo install lazygit /usr/local/bin 2. TUI 구성 및 레이아웃 (Layout) Lazygit는 한 화면에서 Git의 모든 상태를 조망할 수 있는 대시보드형 레이아웃을 가지고 있습니다. ...

February 4, 2026 · Byung Kyu KIM

[AI 엔지니어링] 에이전트의 'Skills' 환상과 56%의 실패율: 왜 우리는 다시 시스템 프롬프트로 돌아가는가?

최근 AI 개발자 커뮤니티, 특히 Vercel AI SDK와 Cursor 사용자들 사이에서 매우 흥미로운 화두가 던져졌습니다. Vercel의 소프트웨어 엔지니어 Jude Gao가 발표한 **"AGENTS.md outperforms skills in our agent evals"**라는 벤치마크 결과입니다. 많은 개발자가 프로젝트를 진행하며 직감적으로 느끼던 현상—“도구(Skills)를 쥐여주는 것보다, 그냥 문서를 통째로 읽게 시키는 게 훨씬 낫다”—가 실제 데이터로 증명되었습니다. 오늘은 이 벤치마크 데이터와 이를 둘러싼 ‘Skills vs Context vs Subagents’ 아키텍처의 변화를 심도 있게 분석해 봅니다. 1. 충격적인 데이터: 56%의 무시율 (Ignore Rate) 우리는 흔히 “LLM에게 도구(Tool/Skill/Function Calling)를 주면, 필요할 때마다 똑똑하게 꺼내 쓸 것"이라고 기대합니다. 하지만 Next.js 16 API(당시 미학습 데이터)를 대상으로 한 벤치마크 결과는 이 믿음을 배신했습니다. ...

January 30, 2026 · Byung Kyu KIM