잉여 전력이 발생할 때마다 판매·저장·수소 전환·탄소 감축 중 무엇이 가장 가치 있는지를 AI가 숫자 기준으로 자동 결정하는 잉여 전력 의사결정 시스템입니다.
- 기간
- 2025.12 ~ 2026.01 (2개월)
- 팀 구성
- 2인
- 담당 역할
- 잉여 전력 의사결정 AI 시스템 백엔드 전체
프로젝트 소개
잉여 전력이 생길 때마다 사람이 반복하던 "무엇이 가장 가치 있는가" 판단을 AI가 숫자 기준으로 대신하는 것이 목표였습니다.
재생에너지 확대로 잉여 전력이 발생하면 판매·저장·수소 전환·탄소 감축 중 무엇이 가장 가치 있는지 사람이 매번 판단해야 합니다. RE:SEED는 경제성과 탄소 감축·제거 효과를 함께 고려해 전력 활용 방식을 AI가 자동 결정하고, 그 근거를 MRV(측정·보고·검증) 가능한 형태로 기록합니다. RE100·그린수소·바이오차 3개 시장 도메인의 실시간 데이터를 통합합니다.
자동 의사결정
4개 액션을 경제성·탄소 효과 통합 Score Function 으로 자동 선택
MRV 투명성
모든 판단 근거를 측정·보고·검증 가능한 형태로 기록해 역추적 보장
실시간 시장 통합
KEPCO · 기상청 · SMP API 와 수소·탄소 시세를 하나의 판단 기준으로
성능 최적화
TTL 차등 캐싱·비동기 병렬로 외부 API 호출 최대 99% 절감
주요 기능
플랫폼은 4개의 핵심 플로우로 구성됩니다. 각 도메인은 orchestrator-agent-service-repository 4레이어로 격리했습니다.
잉여 전력 자동 의사결정
잉여 전력이 발생하면 "즉시 판매 · 저장 · 그린수소 생산 · 바이오차 생산" 4개 액션을 경제성과 탄소 감축·제거 효과 기준으로 평가해 최적안을 선택합니다. 경제성·탄소 효과를 통합한 Score Function으로 판단을 단일 척도의 숫자로 만들어 근거를 남기도록 설계했습니다.

LangGraph 의사결정 오케스트레이션
policy_based / rule_based 조건부 워크플로우로 실행 모드를 자동 분기합니다. RE100·그린수소·바이오차·AI 4개 도메인 전부를 LangGraph StateGraph 오케스트레이터로 전환해 처리 흐름을 그래프 노드와 조건부 엣지로 명시화했습니다. (상태 유지용 MemorySaver 체크포인트와 정책 기반 Agent는 확장 설계 단계)
실시간 시장 데이터 연동
KEPCO 전력 수급 · 기상청 기상 · SMP 시장가격 API를 통합해 정확한 잉여 전력을 산정하고, RE100(출력 제한) · 그린수소 · 바이오차 3개 시장 도메인의 데이터를 수집·분석합니다. BeautifulSoup 크롤러가 수소·탄소 시세를 보강하고 APScheduler가 10분 주기로 자동 수집합니다.

MRV 리포팅
모든 의사결정의 근거를 설명·기록해 탄소 감축 검증(MRV: 측정·보고·검증)이 가능한 형태로 저장합니다. 어떤 데이터로 왜 그 액션을 선택했는지 역추적할 수 있어, 보고서 작성과 감사 대응의 기반이 됩니다.

시스템 아키텍처
도메인별 orchestrator-agent-service-repository 4레이어로 모듈화했습니다.
FastAPI 백엔드가 4개 도메인(RE100 · 그린수소 · 바이오차 · AI 의사결정)을 orchestrator → agent → service → repository 레이어로 분리해 담고, LangGraph StateGraph가 의사결정 워크플로우를 오케스트레이션합니다(상태 유지용 체크포인트는 확장 설계). 저장소는 PostgreSQL(NeonDB)과 Redis(Upstash) 도메인별 TTL 차등 캐시로 구성했고, KEPCO·기상청·SMP 등 외부 API는 httpx 비동기 병렬로 호출합니다. 프로덕션은 AWS EC2 + systemd 환경에 GitHub Actions CI/CD로 배포하고, APScheduler 10분 주기 자동 수집을 구성해 운영했습니다.
기술 스택
기술적 도전 & 해결
개발 과정에서 부딪힌 문제와 해결 방법입니다.
KEPCO · 기상청 · SMP 등 외부 API를 매 요청마다 호출해 응답이 3~10초로 느리고 일일 호출량이 1,000건을 초과
데이터 갱신 주기에 맞춘 도메인별 TTL 차등 Redis 캐싱 + httpx 비동기 병렬 호출로 순차 대기 제거 — 캐시 히트 시 1~5ms, 호출량 71~99% 감소
경제성(원)과 탄소 감축·제거 효과(tCO₂)는 단위가 달라 4개 액션을 하나의 기준으로 비교할 수 없음
경제성·탄소 효과를 통합하는 Score Function을 설계해 액션을 동일 척도로 정량 비교하고, 가중 기준은 정책·규칙 모드로 분리해 조정 가능하게 구성
도메인마다 제각각인 절차적 처리 흐름은 분기·재시도가 코드에 뒤엉켜 워크플로우 파악이 어려움
RE100 · 그린수소 · 바이오차 · AI 4개 도메인 전부를 LangGraph StateGraph 오케스트레이터로 전환해 흐름을 그래프 노드·조건부 엣지로 명시화 (상태 유지용 MemorySaver 체크포인트는 확장 설계)
RE100 · 수소 · 바이오차 도메인이 늘며 서비스 로직과 의사결정 로직이 뒤섞여 유지보수가 어려워짐
도메인 패키지를 orchestrator / agent / service / repository 레이어로 분리 재설계하고 공통 데이터 조회 로직을 추출해 중복 제거
시계열 데이터가 누적되며 조회 쿼리가 느려지고 응답 페이로드가 커져 대시보드 응답이 지연
자주 조회되는 컬럼에 DB 인덱스 8종을 설계·추가하고 GZip 응답 압축을 적용해 쿼리·전송 병목을 함께 해소
성과
- RE100(출력 제한) · 그린수소 · 바이오차 3개 시장 도메인의 수집·분석 통합, 4개 도메인 전부 LangGraph 오케스트레이터 적용
- KEPCO 전력 수급 · 기상청 · SMP 공공 API + BeautifulSoup 시세 크롤링, APScheduler 10분 주기 자동 수집
- DB 인덱스 8종 · GZip 압축 · 비동기 병렬 호출 — AWS EC2 + GitHub Actions CI/CD · systemd 운영 구성