주식 에이전트 카톡봇 3탄: 클로드 코드 괴롭히다 사례글 쓰는 agent만 만들고 끝난 후기

소개

안녕하세요. suri입니다. 지난 2탄에 이어서 3탄을 가져왔습니다.
네, 제목 보셔서 아시겠지만 완성 못했습니다. 하하.. 이번 주에는 다른 일들을 하느라 진도를 많이 못나갔습니다. 마지막 모각 전에는 일부 기능이라도 완성하는게 목표입니다. 사례글도 쓰려니까 어떤 것들을 했는지 기억이 안나서 대화 내용을 바탕으로 지피터스 사례글 쓰는 agent를 만들었습니다.

사례글 쓰는 agent 만드는 과정 소개하고 진행한 내용은 클로드 코드 agent가 써준 사례글로 설명을 드리겠습니다.

agent를 만들기 위해 /agents 커맨드를 실행합니다.

/agents

Create new agent 클릭

Project와 Personal 중 선택하라고 나오는데 현재 Project에 만 사용할 agent인지 global하게 사용할 agent인지 선택하는 과정입니다. 다른 곳에서도 쓸 예정이라 Personal 선택.

텍스트가있는 화면 새 에이전트 생성 위치 선택 프로젝트 선택 위치 선택

agent의 지침서를 만드는 방식입니다. 1번과 2번 중 어떤 것을 선택할 것이냐고 묻는데 1번이 편합니다.

새로운 에이전트 생성 방법을 만듭니다

일단 잘 만들어주는지 확인을 위해 간단하게 써봤습니다. 글 잘 쓰시는 분은 2번 가시면 되요.

대충 이런식으로 작성을 했습니다.

지피터스 사례글을 쓰는 agent를 만들고 싶어. 현재 대화 내용을 바탕으로 실패 경험, 해결 방안 등을 확인해서 사례글을 쓰고 파일로 제공해줘.

그러면 이런 창들이 나오는데 agent 설정하는 부분들입니다. 모델과 색깔을 지정하였습니다. 색깔은 지피터스 색깔로!

에이전트 도구를 만듭니다

그러면 이렇게 짠하고 지침서를 만들어줍니다.

e를 눌러서 조의 아니 만들어진 지침서를 확인해봅니다.

생각보다 잘 만들어줬는데 아무래도 한글 지침서가 토큰은 많이 쓰지만 더 좋을 것 같습니다. 죄송하지만 개발자F님의 프롬프트를 잠시 빌려가겠습니다...


잘 만들어줬는데 클로드 코드 agent 지침서 양식에 맞지 않네요. 조금 다듬어 줬습니다.

아래와 같이 잘만들어 줘서 에이전트 지침서에 넣어 주었습니다.

이렇게 에이전트를 만들고 아래와 같이 요청하였습니다.

네, 이렇게 써줬고 md 파일로 제공해줘서, 추가로 syntax만 수정해달라고 요청했습니다. 아래는 클로드 코드 agent가 써준 글입니다. 진행하면서 문제가 되었고 해결한 사례는 차례로 공유드리겠습니다.

클로드 코드 agent가 써준 사례글


🤖 Claude Code와 함께한 한국어 메신저봇 생태계 디버깅 여정

복잡한 멀티레이어 아키텍처에서의 체계적 문제 해결 사례


📋 프로젝트 개요

이 사례는 한국어 메신저봇 생태계에서 발생한 복잡한 기술적 문제들을 Claude Code와 함께 체계적으로 해결한 과정을 다룹니다.

🏗️ 기술 스택

  • Frontend: MessengerBotR API2 (ES5 JavaScript)

  • Backend: FastAPI (Python 3.9+)

  • Database: Supabase (PostgreSQL)

  • External APIs: Korea Investment Securities (KIS) API

  • 특수 환경: 한국 메신저 플랫폼 (KakaoTalk 등)

💼 비즈니스 컨텍스트

"무한매수 V2.2" 주식 거래 전략을 자동화하는 메신저봇으로, 사용자가 채팅으로 전략을 생성/관리할 수 있는 시스템입니다.

사용자 → KakaoTalk → MessengerBot (ES5) → FastAPI Server → KIS API
                                                ↓
                                        Supabase Database

🚨 문제 상황: 4단계 연쇄 오류

1단계: 컴파일 오류 🔴

ReferenceError: 'console' is not defined

2단계: HTTP 500 서버 오류 🟠

AttributeError: 'MockSupabaseClient' object has no attribute 'count_strategy_instances'

3단계: 무한 재시도 루프 🟡

리스크 관리 제한으로 인한 전략 생성 불가: 포지션 개설 불가

4단계: 리스크 관리 ValidationException 🔵

ValidationException은 재시도 대상이 아닌데 무한 재시도 발생

🔧 해결 과정: 체계적 접근법

Step 1: 환경 일관성 분석

  • 문제: stock-bot.js만 컴파일 오류 발생

  • 해결법: Working bot들과의 코드 비교 분석

if (typeof console === "undefined") {
    var console = {
        log: function(msg) { /* ... */ },
        error: function(msg) { /* ... */ }
    };
}

var Log = {
    i: function(msg) {
        var timestamp = new Date().toLocaleString();
        java.lang.System.out.println("[INFO] " + timestamp + " - " + msg);
    },
    e: function(msg) {
        var timestamp = new Date().toLocaleString();
        java.lang.System.out.println("[ERROR] " + timestamp + " - " + msg);
    }
};
  • 핵심 인사이트: useConsoleApi: true 설정으로 표준 console 객체를 지원하므로, 호환성 코드가 오히려 충돌을 일으킴.

Step 2: Git 히스토리 기반 복구

git log --oneline -- stock-bot/stock-bot.js
git show e8ee725:stock-bot/stock-bot.js > stock-bot/stock-bot.js

Step 3: Mock 시스템 완성

async def count_strategy_instances(self, filters=None):
    strategies = list(self._mock_strategies.values())
    if filters:
        for key, value in filters.items():
            if key == "symbol":
                strategies = [s for s in strategies if s.get(key, "").upper() == str(value).upper()]
            else:
                strategies = [s for s in strategies if s.get(key) == value]
    return len(strategies)

Step 4: 리스크 관리 시스템 개선

async def get_balance(self):
    return {
        "total_asset": 100000,
        "cash_balance": 50000,
        "positions": [],
        "summary": {
            "total_asset": 100000,
            "cash_balance": 50000,
            "unrealized_pnl": 0,
            "daily_pnl": 0.0
        }
    }
non_retryable_exceptions = (
    ValidationException,
    AuthenticationException,
    AuthorizationException,
    RiskManagementException
)

@retry_on_failure(
    max_retries=3,
    non_retryable_exceptions=non_retryable_exceptions
)
async def create_strategy(...):
    pass

🎯 Claude Code의 차별화된 접근법

🔍 맥락적 이해

  • 전체 아키텍처와 비즈니스 로직 기반의 진단

📊 비교 분석 방법론

Working Bots vs Problem Bot
├── summarize-bot.js ✅
├── srt-bot.js ✅
├── ktx-bot.js ✅
└── stock-bot.js ❌

🔄 연쇄적 문제 해결

  • 각 수정이 다음 오류 발견의 발판이 됨

🛡️ 예방적 사고

  • 향후 문제 예방을 위한 구조 개선 제안


💡 핵심 기술적 인사이트

MessengerBotR 특수성

var bot = BotManager.getCurrentBot();
bot.addListener(Event.MESSAGE, function(msg) {
    var content = msg.content;
    if (content.startsWith("!주식")) {
        handleStockCommand(msg, content);
    }
});

FastAPI + Mock 구현 전략

class MockSupabaseClient:
    def __init__(self):
        self._mock_strategies = {}

    async def get_strategy_instances(self, filters=None, **kwargs):
        strategies = list(self._mock_strategies.values())
        return strategies[offset:offset + limit]

리스크 관리 시나리오

async def _check_total_exposure(self, portfolio):
    total_exposure = sum(abs(pos.get('market_value', 0)) for pos in portfolio.get('positions', []))
    if total_exposure == 0.0 and portfolio.get('summary', {}).get('cash_balance', 0) > 0:
        pass
    return RiskLimit(current_value=total_exposure, ...)

📚 실무 적용 가치

1. 한국형 기술 스택 대응법

  • ES5 기반 환경 제약 대응

  • KIS API 특성 고려

  • 한국어 메시지 처리

2. Mock 설계 전략

class MockClient:
    def __getattribute__(self, name):
        try:
            return super().__getattribute__(name)
        except AttributeError:
            logger.warning(f"Method {name} not implemented in Mock")
            raise

3. 멀티레이어 디버깅 전략

1. Bot (ES5) → console 이슈
2. API → Mock 누락 메서드
3. Business Logic → 리스크 검증 실패
4. Error Handling → 재시도 구조 문제

4. 예외 처리 위계

Retryable Exceptions:
├── NetworkError
├── TimeoutError
└── DatabaseError

Non-Retryable Exceptions:
├── ValidationException
├── AuthenticationException
└── RiskManagementException

🚀 결론 및 교훈

핵심 성과

  1. 환경 차이 해결 → console 문제 해결

  2. 서버 안정화 → Mock 시스템 확장

  3. 재시도 로직 개선 → 예외 분리

  4. 신규 사용자 대응 → 구조 개선

방법론 요약

1. 코드 비교
2. Git 복구
3. Mock 확장
4. 로직 정비

Claude Code와의 협업 포인트

  • 맥락 기반 진단

  • 비교 분석 주도

  • 구조적 개선 유도


🤝 커뮤니티에 드리는 말씀

이 사례는 단순한 버그 수정이 아닌 시스템적 디버깅 방법론을 제시합니다.

  • MessengerBotR과 같은 국내 플랫폼 사용법

  • 금융 API 연동 시 고려사항

  • Mock 기반 테스트 환경 구성

  • 재시도 및 예외 처리 구조 설계

같은 고민을 하시는 분들께 도움이 되길 바라며, 유사한 경험이나 질문은 댓글로 자유롭게 나눠주세요! 🙌


1
1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요