synctest를 이용한 Go 동시성 코드 테스트
동시 Go 테스트에서 잠들지 마세요.
Go의 동시성 코드를 테스트하는 일은 항상 약간의 규율을 필요로 했습니다. 고루틴(Goroutine)은 가볍고, 채널(Channel)은 단순하며, 컨텍스트(Context) 취소는 관례적인(idiomatic) 방식입니다. 실제 Go 서비스에서는 백그라운드 워커와 타이머가 어디에나 존재합니다.
동시 Go 테스트에서 잠들지 마세요.
Go의 동시성 코드를 테스트하는 일은 항상 약간의 규율을 필요로 했습니다. 고루틴(Goroutine)은 가볍고, 채널(Channel)은 단순하며, 컨텍스트(Context) 취소는 관례적인(idiomatic) 방식입니다. 실제 Go 서비스에서는 백그라운드 워커와 타이머가 어디에나 존재합니다.
A2A는 사라진 것이 아닙니다. 다만 범용적으로 쓰이지 않을 뿐입니다.
구글의 에이전트 투 에이전트(Agent2Agent) 프로토콜, 즉 A2A는 첫해를 다소 혼란스럽게 보냈습니다.
AI 에이전트를 위한 신뢰할 수 있는 폴링 패턴
폴링 에이전트(Polling Agent)는 AI 어시스턴트 아키텍처에서 가장 화려하지는 않지만, 동시에 가장 유용한 구성 요소 중 하나입니다.
MCP는 에이전트에 도구를 제공하며, A2A는 에이전트에게 동료(피어)를 제공합니다.
AI 에이전트 아키텍처는 이제 두 가지 레이어로 분화되기 시작하고 있습니다.
A2A는 에이전트를 네트워크 피어(network peers)로 전환합니다.
A2A 프로토콜(에이전트 투 에이전트 프로토콜)은 독립적인 AI 에이전트 시스템 간의 통신을 위한 개방형 표준입니다.
불필요한 형식주의 없이 Go로 CQRS 구축하기
CQRS는 과대평가되고, 지나치게 복잡해지며, 때로는 평범한 CRUD의 지루함을 해결할 만병통치약으로 오해받는 패턴 중 하나입니다.
모델이 아닌 리스크를 통제하십시오.
대형 언어 모델(LLM)은 예측 불가능합니다. 환각(hallucination) 현상이 발생하거나, 데이터가 유출되거나, 유해한 콘텐츠를 생성하거나, 합법적인 요청을 거부하기도 합니다. 가드레일(Guardrails)은 모델의 성능을 희생하지 않으면서도 모델의 행동을 제한합니다.
에이전트의 작업 기억, 구조화 기억 및 검색 기억
메모리는 어시스턴트를 반응형에서 지속형으로 전환시키지만, 동시에 많은 시스템이 조용히 부패하는 곳이기도 합니다. 설문 조사들은 단기적 대 장기적 이분법이 현대 에이전트 메모리에는 더 이상 충분하지 않다고 주장하며, OpenAI와 LangGraph SDK들은 작동 메모리(working memory), 내구 상태(durable state), 검색(retrieval)이라는 더 단순한 스택을 지향합니다.
실제 심각한 수준의 어시스턴트는 어떻게 구축되는가
생산 환경용 AI 어시스턴트는 단순히 “프롬프트가 붙은 LLM"이 아닙니다. 이는 의도(Intent)를 받아들이고, 상태를 유지하며, 언제 검색하거나 행동할지 결정하고, 실패를 디버깅할 수 있는 충분한 런타임 세부 정보를 제공하는 시스템입니다.
검색은 지식 구조가 아닙니다
대부분의 현대 지식 시스템은 검색(Retrieval) 최적화에 집중하며, 이는 이해할 수 있는 접근입니다. 검색은 가시적이며 데모하기 쉽고, 작동할 때 마법처럼 느껴집니다. 질문을 입력하면 답변이 돌아옵니다.
AI 시스템을 위한 컴파일된 지식
전제는 간단합니다. 컴파일된 지식은 검색된 단편보다 재사용성이 높습니다. RAG는 직관적인 질문—LLM에게 외부 지식을 어떻게 접근하게 할 것인가?—에 대한 기본 답변이 되었습니다.
현대 지식 시스템의 지도
PKM, RAG, 위키, AI 메모리 시스템, 그리고 최근 실용적인 AI 지원 워크플로우가 종종 동일한 문제를 해결하는 것처럼 논의됩니다. 하지만 그렇지 않습니다. 이들은 모두 지식과 관련되어 있지만, 서로 다른 계층에서 작동합니다:
느낌에 의존한 해석을 중단하고, 계약서를 검증하십시오.
대부분의 대규모 언어 모델(LLM) ‘구조화된 출력(structured output)’ 튜토리얼은 진지하지 않습니다. 이들은 사용자에게 정중하게 JSON을 요청한 후 모델이 잘 작동하기를 바라고 만듭니다. 그것은 검증(validation)이 아닙니다. 그것은 중괄호를 사용한 낙관주의에 불과합니다.
지속적인 에이전트 메모리를 위한 8개의 플러그인 가능한 백엔드
탭을 닫으면 컨텍스트 창을 벗어나는 정보가 없다면 현대적인 어시스턴트는 여전히 모든 내용을 잊어버립니다. **에이전트 메모리 제공자(Agent memory providers)**는 세션 간에 사실과 요약을 유지하는 서비스 또는 라이브러리로, 프레임워크는 가볍게 유지하면서 메모리가 확장되도록 플러그인으로 연결되는 경우가 많습니다.
기억이야말로 도구와 파트너를 구분하는 차이입니다.
알다시피, AI 에이전트와 채팅을 열면 프로젝트를 설명하고 선호 사항을 공유하며 작업을 진행한 뒤 탭을 닫습니다. 다음 주에 다시 돌아와 보면 낯선 이와 대화하는 듯한 기분이 듭니다. 모든 컨텍스트가 사라지고, 모든 선호 사항은 잊혀졌으며, 프로젝트는 처음부터 다시 설명해야 합니다.
실제 OpenClaw 시스템이 어떻게 구성되어 있는지
데모에서는 OpenClaw가 단순해 보입니다. 하지만 프로덕션 환경에서는 하나의 시스템으로 진화합니다.