낭비되는 클라우드 비용과 탄소 발자국을 찾아내는 AI 도구를 만들었습니다
요약
Google Cloud의 유휴 자원을 식별하여 비용 절감과 탄소 배출 감소를 동시에 달성하는 AI 에이전트 도구를 소개합니다. 4개의 특화된 AI 에이전트가 스캔, 분석, 실행, 보고 과정을 자동화하여 클라우드 운영 효율을 높입니다.
핵심 포인트
- 4개의 연속된 AI 에이전트를 활용한 클라우드 최적화 워크플로우
- 비용 절감과 탄소 발자국 추적을 동시에 수행하는 GreenOps 개념 적용
- Gemini 2.5 Pro와 Google Agent Development Kit 기반 구축
- Cloud Run 타임아웃 설정을 통한 실시간 SSE 스트리밍 문제 해결
어려움
만약 Google Cloud를 사용하고 있다면, 아마도 더 이상 필요하지 않은 것들에 비용을 지불하고 있을 것입니다. 누군가 끄는 것을 잊어버린 서버, 누군가 삭제하는 것을 잊어버린 스토리지 디스크,
또는 누군가 해제하는 것을 잊어버린 IP 주소 같은 것들 말이죠. "그 낭비가 우리에게 비용을 발생시키고 있습니다." 그것은 전기를 소비합니다. 탄소 배출을 생성합니다. 비용과 함께 이를 추적하는 사람은 거의 없습니다.
저는 제가 직접 생각하지 않아도 이 두 가지 문제를 동시에 찾아낼 수 있는 도구를 원했습니다. 그래서 직접 만들었습니다.
라이브 데모: https://greenops-dashboard-845589445410.us-central1.run.app/
코드: https://github.com/raghu-putta/greenops-agent
작동 방식: 연속된 4개의 AI 에이전트 (AI agents)
각 작업자가 단 하나의 업무만 수행하는 조립 라인을 상상해 보세요:
Carbon Scout는 귀하의 Google Cloud 프로젝트를 스캔하여 유휴 서버(idle servers), 연결되지 않은 스토리지 디스크(unattached storage disks), 사용되지 않는 예약된 IP 주소(unused reserved IP addresses) 등 사용되지 않거나 잊혀진 것으로 보이는 모든 것을 보고합니다.
GreenOps Analyzer는 해당 목록을 가져와 각 항목에 두 가지 수치를 추가합니다: 달러로 환산된 비용과 탄소 배출량으로 환산된 지구에 미치는 비용입니다.
Optimization Executor는 각 발견 사항을 실행 가능한 동작으로 만듭니다—이 서버를 중지하고, 이 디스크를 삭제하고, 이 주소를 해제하는 식입니다. 먼저 계획을 보여주며, 귀하가 승인할 때만 변경을 수행합니다.
Report Generator는 전체 실행 과정을 다운로드 가능한 보고서로 정리하여 귀하(또는 상사나 지속 가능성 팀)가 보기 좋게 만들어 줍니다.
사용된 기술: FastAPI (웹 프레임워크), Google의 Agent Development Kit (AI 에이전트 구축을 위한 라이브러리), Gemini 2.5 Pro (추론을 수행하는 AI 모델), 그리고 Google Cloud Run (모든 것이 실행되는 환경).
버그가 아니었던 "버그":
대시보드에는 Server-Sent Events (SSE, 기본적으로 서버가 브라우저를 새로고침하게 만드는 대신 업데이트를 하나씩 스트리밍하는 기술)라고 불리는 기술을 사용하여 각 에이전트가 실시간으로 무엇을 하고 있는지 보여주는 터미널 스타일의 라이브 창이 있습니다.
그러다 어느 시점에 그 창에 아무것도 표시되지 않기 시작했습니다. 아무것도요. 제 백엔드 로그(backend logs)는 업데이트가 여전히 전송되고 있다고 알려주었기에, 데이터는 서버에서 문제없이 나가고 있었습니다. 저는 제가 무언가 잘못 작성했다고 생각하며 프론트엔드(frontend) 코드를 살펴보고, 디버그 로그(debug logs)를 추가하고, 브라우저의 네트워크 탭(network tab)을 확인하며 시간을 보냈습니다.
실제 문제: Google Cloud Run에는 연결을 유지하는 시간에 대한 기본 타임아웃(timeout) 설정이 있으며, 제 에이전트 실행 시간이 이 타임아웃을 초과하고 있었습니다. 연결이 중간에 끊기고 있었던 것입니다. 코드 버그 때문이 아니라 플랫폼 설정 때문이었습니다. 해결 방법은 배포 명령에 단 한 줄을 추가하여, Cloud Run이 더 오래 지속되는 연결을 허용하고 최소 하나의 인스턴스를 웜 상태(warm)로 유지하여 콜드 스타트(cold-start) 지연이 발생하지 않도록 하는 것이었습니다:
gcloud run deploy greenops-dashboard \
--timeout 3600 \
--min-instances 1 \
--allow-unauthenticated
교훈: 만약 실시간 기능이 갑자기 작동을 멈추는데 서버 로그에는 모든 것이 정상이라고 나온다면, 코드가 잘못되었다고 가정하기 전에 호스팅 플랫폼의 연결 시간 제한(connection time limits)을 먼저 확인하세요.
Google Cloud 자격 증명(credentials)을 사용하는 방법
이 도구는 귀하의 Google Cloud 프로젝트를 스캔하기 위한 접근 권한이 필요하며 귀하의 자격 증명을 요구합니다. 저는 보안 모델로서 단순히 "로그인을 저희를 믿고 맡겨주세요"라고 말하는 식의 무언가를 만들고 싶지 않았습니다. 실제 흐름은 다음과 같습니다:
- 자격 증명은 브라우저에 입력되며 브라우저의 임시 메모리에만 저장되고, 귀하의 장치에 영구적으로 저장되지 않습니다.
- 자격 증명은 단 한 번의 스캔을 위해 보안(HTTPS) 연결을 통해 전송됩니다.
- 서버는 이를 메모리에만 유지하며, 파일로 기록하거나 데이터베이스에 저장하지 않습니다.
- 스캔이 완료되면 즉시 사라집니다. 잔여물은 남지 않으며, 시스템은 해당 자격 증명이 두 번째 실행에 사용되는 것을 허용하지 않습니다.
저는 이를 처리하는 세 가지 방법을 검토했고, 현재로서는 감사(audit)하기 쉬우면서도 가장 단순한 방법을 선택했습니다. 향후에는 아무도 원시 자격 증명(raw credentials)을 입력할 필요가 없도록 적절한 "Google로 로그인(Sign in with Google)" 흐름으로 교체할 계획입니다.
다음 단계는 무엇일까요?
AI가 답변하기 전에 참조할 수 있는 더 많은 배경 컨텍스트 (Background context) 제공하기 (정확도 향상이 추가적인 월간 비용만큼의 가치가 있는지 여전히 고민 중입니다)
“Google로 로그인(Sign in with Google)” 기능 추가하여 자격 증명(Credentials) 관리에 대해 걱정할 필요가 없도록 만들기
직접 시도해 보세요
대시보드: https://greenops-dashboard-845589445410.us-central1.run.app/
코드: https://github.com/raghu-putta/greenops-agent
클라우드 비용이나 지속 가능성(Sustainability)과 관련된 유사한 도구를 만들고 계신다면, 댓글을 통해 의견을 나누고 싶습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기