LangGraph 프로덕션에서 AI 에이전트 코드 품질이 들쑥날쑥한 이유 — Act Operator로 팀 표준 잡기 (github.com)
한줄 요약
LangGraph 에이전트 팀 표준화를 원한다면, 프롬프트보다 개발 환경 설계가 핵심이다.
어떤 상황에서 필요한가?
LangGraph 기반 에이전트를 팀으로 개발하다 보면 반드시 마주치는 상황이 있다. 숙련 개발자가 Claude Code에 워크플로우 구현을 요청하면 꽤 괜찮은 코드가 나오는데, 신규 팀원이 똑같은 모델에 똑같은 요청을 하면 결과물이 제각각이다. 모델이 문제가 아니다.
더 골치 아픈 건 세션 단절 문제다. 어제 설계한 아키텍처를 오늘 새 세션에서 에이전트가 기억하지 못한다. 팀 컨벤션이 코드베이스가 아닌 특정 개발자의 머릿속에만 존재하는 한, 에이전트도 그 지식에 접근할 방법이 없다. AI 도구를 팀 단위로 프로덕션에 적용하려는 조직이라면 이 문제가 매우 친숙할 것이다.
핵심 구현 방법
Act Operator는 이 문제를 "하네스(Harness)" 개념으로 접근한다. 하네스란 통제되지 않은 대상을 올바른 방향으로 이끄는 외부 환경 설계를 뜻한다. 전선 묶음(Wiring Harness), 테스트 하네스, CI/CD 파이프라인이 모두 같은 원리다. Act Operator는 이 개념을 AI 에이전트 개발에 적용해 세 개 레이어로 구현한다.
레이어 1 — 스캐폴딩(Scaffolding)
uvx --from act-operator act new 명령 하나로 프로젝트 뼈대를 생성한다. 모듈 컨벤션과 베이스 클래스가 처음부터 구조에 내장된다. 프로젝트(Act)와 그래프 단위(Cast)의 개념을 분리해, 하나의 Act 안에 여러 Cast를 모노레포 형태로 관리할 수 있다. StateGraph 하나가 Cast 하나에 대응하는 구조다.
레이어 2 — 실행 가능한 단일 진실 공급원(Executable SSOT)
컨벤션을 문서가 아닌 살아있는 파일로 관리하는 게 핵심이다. 세 가지 형태로 구현된다.
- Act Template: CI 워크플로우, 베이스 클래스, 테스트 구조, 설정 파일 등 프로젝트 컨벤션 전체
- Agent Skills: 에이전트가 이 구조 안에서 올바르게 추론할 수 있도록 설계된 50개 이상의 패턴 모음.
.claude/skills/디렉토리에 위치하며, 스킬 이름을 언급하는 것만으로 활성화된다 - Drawkit: 팀이 아키텍처 다이어그램을 공통 시각 언어로 소통할 수 있는 도구
레이어 3 — 피드백 루프(Feedback Loop)
CLAUDE.md 파일이 세션 간 영속적 메모리 역할을 한다. 아키텍처 다이어그램, 노드 스펙, 개발 명령이 이 파일에 누적된다. 에이전트는 다음 세션에서 이 파일을 읽어 이전 설계를 이어받는다. 세션이 바뀌어도 아키텍처 지식이 증발하지 않는다.
실제 사용 흐름
# 프로젝트 생성 (Python 3.11+ 필요)
uvx --from act-operator act new
# 의존성 설치
uv sync
# Claude Code로 시작
claude
# 또는 OpenCode 사용 시
opencode .
Claude Code 외에 Cursor, Gemini CLI 등 스킬 디렉토리를 지원하는 다른 AI 도구도 사용 가능하다. 다만 이 경우 .claude 디렉토리를 해당 도구의 컨벤션에 맞게 이름을 바꿔줘야 한다.
실전에서 주의할 점
-
컨벤션은 코드베이스에 내재화되어야 한다. 팀 위키나 노션 문서에 컨벤션을 쌓아봐야 에이전트는 읽지 못한다. CLAUDE.md처럼 에이전트가 런타임에 직접 참조할 수 있는 형태여야 의미가 있다.
-
스킬 활성화는 명시적으로 해야 한다.
.claude/skills/의 스킬은 자동으로 적용되지 않는다.@architecting-act같이 스킬 이름을 직접 언급해야 활성화된다. 팀원들이 이 사실을 모르면 스킬 레이어가 있으나 마나가 된다. -
프로토타입 구조를 프로덕션에 그대로 쓰지 마라. Act Operator는 명시적으로 "프로토타입이 아닌 실제 제품을 위해 설계"되었다고 밝힌다. 기존에 빠르게 만든 LangGraph 프로젝트를 이 구조로 마이그레이션할 때는 Cast 단위 분리와 베이스 클래스 상속 구조를 처음부터 재검토해야 한다.
-
OpenCode 사용 시 환경변수 설정을 확인하라.
langgraph.json에서env: ".env"로 설정이 구성되며, 프로젝트 루트의.env파일을 읽는다. 이 경로가 어긋나면 에이전트 실행 시 환경변수 누락 오류로 디버깅 시간을 낭비하게 된다.
자주 묻는 질문
Q.Act Operator는 LangGraph 프레임워크 자체를 대체하는 건가, 아니면 그 위에서 동작하는 도구인가?
LangGraph를 대체하지 않는다. LangGraph 1.0+ 프로젝트를 올바르게 구조화하고 팀 간 일관성을 유지하기 위한 운영 표준화 도구다. LangGraph의 `StateGraph`가 핵심 그래프 엔진이고, Act Operator는 그 주변에 스캐폴딩, SSOT, 피드백 루프를 덧씌우는 하네스 레이어다. 기존 LangGraph 코드를 이 구조에 맞게 재조직하는 방식으로 도입한다.
Q.Claude Code 없이도 Act Operator를 사용할 수 있나?
사용 가능하다. `.claude` 디렉토리 네이밍은 Claude Code에 특화된 것이지만, Cursor, Gemini CLI, OpenCode 등 스킬 디렉토리 개념을 지원하는 AI 도구라면 디렉토리 이름을 해당 도구 컨벤션에 맞게 변경해서 쓸 수 있다. OpenCode는 별도 Quick Start 설명이 제공될 만큼 지원 범위 안에 있다.
Q.팀 규모가 작거나 혼자 개발할 때도 도입할 만한가?
혼자 개발할 때도 세션 단절 문제는 동일하게 발생한다. 어제 설계한 내용을 오늘 에이전트가 기억하지 못하는 문제는 팀 규모와 무관하다. CLAUDE.md 기반의 영속적 메모리 레이어만으로도 혼자 쓸 때 실질적인 이득이 있다. 다만 모노레포 구조나 다중 Cast 관리 같은 기능은 어느 정도 규모가 있는 프로젝트에서 효과가 더 크다. 📌 원문: [Act Operator GitHub](https://github.com/Proact0/act-operator) 🔗 구축이나 개발이 필요하다면 → [삼태연구소에 문의하기](/contact)