전화상담서비스 성공하지 못한 자동화 시스템 개발: Claude Code와 Gemini의 비교

소개

시도하고자 했던 것과 그 이유

매일 반복되는 어르신 상담 업무의 효율을 높이기 위해 '전화상담서비스 자동화 시스템' 개발을 시작했습니다. 기존 방식은 Gem으로 리포트를 작성하고, 관리자시스템에 복사해서 붙이는 반자동 방식이었습니다.

  • 목표: 상담 녹취록(STT) 입력 시 AI가 리포트를 생성하고, 관리자 사이트에 자동 입력까지 완료하는 시스템 구축.

  • 이유: 단순 반복 업무를 줄여 상담의 질에 더 집중하기 위함.

  • 현황: Claude Code로 초기 구현을 시도했으나, 관리자 페이지의 보안 및 동적 요소 제어 문제로 인해 Gemini의 방식을 검토해봤습니다.

  • Claude Code로 개발된 사이트

    한국어 웹사이트 스크린샷


진행 방법

도구 및 기술 스택

  • Claude Code: CLI 기반 에이전트. 터미널에서 직접 코드를 수정하고 실행하는 데 활용.

  • Gemini 2.5 Flash: 리포트 생성 엔진 및 시스템 아키텍처 가이드.

  • 핵심 라이브러리: Flask(백엔드), Selenium/Playwright(자동화), google-genai.

핵심 프롬프트 (리포트 생성 엔진)

Plaintext

- 역할: 시니어 케어 전문 리포트 작성 매니저
- 지침: 녹취록을 분석하여 아래 두 항목을 작성할 것.
  1. 어르신 한스푼: 직접 인용구를 사용하되 따옴표 제거, 따뜻한 어조.
  2. 매니저 한스푼: 관찰 중심의 전문적이고 따뜻한 리포트.
- 제약: 각 800자 이내, 특수기호(", •) 사용 금지.

결과와 배운 점

1. Claude Code vs Gemini: 개발 방식 및 실패 사례 비교

비교 항목

Claude Code (에이전트 구현)

Gemini (구조적 설계)

핵심 도구

claude CLI (터미널 중심)

Gemini API & Blueprint 설계

자동화 도구

Selenium (주로 생성)

Playwright (비동기 처리 권장)

실패 증상

Agentic Loop: 에러 발생 시 유사한 코드를 무한 수정 시도

Implementation Gap: 논리는 완벽하나 코드 이식 필요

로그 메시지

ElementNotInteractableException 발생

세션 유지(Cookie/Session) 전략 부재 경고

접근 철학

Bottom-Up: 즉시 실행하며 오류 수정

Top-Down: 모듈별 역할 분리 및 설계

2. Claude Code의 주요 실패 사례 및 에러 로그

개발 과정에서 Claude Code가 생성한 Selenium 코드는 다음과 같은 기술적 한계에 부딪혔습니다.

  • 에러 1: ElementNotInteractableException

    • 원인: 관리자 페이지의 입력창(textarea)이 레이어 팝업이나 로딩 애니메이션에 가려져 있을 때 발생.

    • Claude의 대응: 단순히 time.sleep(3)을 추가하거나 셀렉터를 미세하게 조정하는 데 그쳐, 네트워크 상황에 따라 성공과 실패가 반복됨.

  • 에러 2: TimeoutException 및 세션 만료

    • 원인: 보안이 강화된 사이트에서 드라이버를 새로 띄울 때마다 로그인을 요구함.

    • 에이전트 루프 현상: Claude Code가 "로그인을 시도합니다" → "실패" → "코드 수정" → "다시 로그인 시도" 과정을 반복하며 API 토큰만 낭비하고 실제 문제(세션 유지)를 해결하지 못함.

3. 시행착오를 통해 얻은 기술적 피드백

  • Selenium의 한계: 전통적인 Selenium 방식은 동적 웹 요소 대기 로직(Explicit Wait)을 일일이 수동으로 짜야 하므로 에이전트가 코드를 관리하기에 복잡도가 높습니다.

  • Playwright의 대안: Gemini가 제안한 Playwright는 'Auto-wait' 기능을 제공하여 요소가 상호작용 가능할 때까지 자동으로 기다리므로, 에이전트가 짤 코드가 단순해지고 안정성이 높아집니다.

  • 세션 지속성: 단순히 코드를 짜는 것보다, 브라우저의 쿠키나 컨텍스트를 저장하여 재사용하는 아키텍처 설계가 자동화의 핵심임을 배웠습니다.


앞으로의 계획

  1. Playwright 전환: Gemini의 권고대로 비동기 처리에 강하고 세션 관리가 용이한 Playwright로 전송 로직을 전면 재작성할 예정입니다.

  2. MCP(Model Context Protocol) 도입: Claude Code에 MCP 서버를 연결하여 에이전트가 실제 브라우저 렌더링 화면을 '보고' 디버깅하도록 업그레이드할 계획입니다.

  3. 데이터베이스 전환: 현재 텍스트 파일 기반의 데이터 관리를 SQLite로 전환하여 동명이인 처리 및 리포트 이력 관리의 안정성을 높일 예정입니다.

지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 오후,
읽고 바로 써먹을 AI 소식만