40

실습: 프로덕션 수준 설비 조회 Tool

Day 4: 설비 조회 Agent

학습 목표
  • 재시도, 타임아웃, 캐싱이 포함된 프로덕션 Tool을 구현한다
  • 다양한 데이터 소스를 통합하는 Tool을 만든다
  • 데이터 정규화 파이프라인을 구현한다

미션: 프로덕션 수준의 설비 관리 Agent

시뮬레이션에서 프로덕션으로 업그레이드하세요.

요구사항

  1. MES 클라이언트: 재시도, 타임아웃, 에러 처리
  2. 캐싱: 동일 조회 5분 캐시
  3. 데이터 정규화: 다양한 포맷을 통일
  4. 통합 Agent: MES + 매뉴얼 + 재고를 하나로

프로덕션 기준

  • MES 호출은 call_with_retry를 거친다 (재시도 최대 3회, 회차마다 대기 2배)
  • 한 번 호출이 TIMEOUT_SEC를 넘기면 타임아웃으로 처리하고 재시도한다
  • 재시도까지 실패하면 원인별로 다른 안내 문구를 돌려준다 (타임아웃 / 연결 끊김 / 없는 설비)
  • 실패한 결과는 캐시에 넣지 않는다. 넣으면 MES가 복구돼도 TTL 동안 실패가 굳는다
  • 같은 설비를 다시 조회하면 API를 부르지 않는다 (로그의 [CACHE] 표시로 확인)
  • 라인 전체 조회도 캐시를 거친다
  • 모든 호출을 로깅한다

캐시 히트율은 테스트 스크립트가 같은 설비를 몇 번 묻느냐로 정해지는 값이라 실력을 재는 지표가 아닙니다. 숫자를 맞추려 하지 말고 캐시를 거치는지, 실패를 캐시하지 않는지를 확인하세요.

에디터 로딩 중...
힌트 보기
  • call_with_retry: 호출 전후 time.time() 차이가 timeout을 넘으면 TimeoutError를 내고 다음 시도로 넘어갑니다
  • 재시도 대기는 backoff * (2 ** (attempt - 1))로 늘립니다. 마지막 시도까지 실패하면 마지막 예외를 다시 raise 하세요
  • 성공한 결과만 cache.set 하세요. 타임아웃·연결 실패·없는 설비는 캐시에 넣지 않습니다
  • ToolCache.get에서 TTL 초과 시 캐시 항목을 삭제하세요
  • normalize_equipment_data에서 None 체크를 꼼꼼히 하세요
  • get_line_summary에서 "A" -> "A-LINE" 변환을 처리하고, 결과를 캐시에 넣으세요
  • 모든 Tool은 반드시 str을 반환해야 합니다. 예외를 그대로 던지면 Agent 루프가 끊깁니다
정답 보기
에디터 로딩 중...
AI로 학습하기 — 꿀팁
재시도·타임아웃·캐싱 조합 점검AI 학습 팁

세 장치가 겹칠 때 생기는 함정을 AI에게 짚어 보게 하고, 정답 코드가 실패를 캐시하지 않는 이유를 스스로 설명해 보세요.

설비 조회 Tool에 재시도(최대 3회, 지수 백오프), 타임아웃, TTL 5분 캐시를 함께 넣었다. (1) 실패 결과를 캐시에 넣으면 무슨 일이 벌어지는지, (2) 타임아웃과 재시도가 겹쳐 실제 대기 시간이 의도보다 길어지는 경우를 계산해 보여주고, (3) 캐시-재시도-타임아웃을 거는 순서를 어떻게 잡아야 하는지 설명해줘.
이 팁이 도움이 됐나요?
용어