본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 31. 03:20

ShouldWeAutomate 구축하기: 워크플로우 자동화를 위한 의사결정 인텔리전스 (Decision Intelligence) 플랫폼

요약

비즈니스 프로세스의 AI 자동화 가능성을 체계적으로 평가하기 위한 오픈 소스 의사결정 인텔리전스 플랫폼 구축 사례를 소개합니다. 데이터 품질, 프로세스 안정성 등 7가지 차원을 기반으로 결정론적 점수를 산정하며, 게임화된 UX를 통해 직관적인 분석을 제공합니다.

핵심 포인트

  • 7가지 차원을 통한 체계적인 자동화 준비도 평가
  • Flask와 Vanilla JS 기반의 가벼운 아키텍처 설계
  • 게임화된 슬라이더와 실시간 시각화를 통한 사용자 경험 최적화
  • 빌드 단계 없는 구조로 오픈 소스 기여 장벽 완화

결정론적 점수 산정 (deterministic scoring), 게임화된 UX, 그리고 선택적 LLM 추론을 통해 비즈니스 프로세스가 AI 자동화 준비가 되었는지 알려주는 오픈 소스 플랫폼을 어떻게 구축했는지 소개합니다.

문제 (The Problem)

매주 누군가는 이렇게 묻습니다: "이 워크플로우를 자동화할 수 있을까요?" 그 대답은 결코 간단하지 않습니다. 데이터 품질 (data quality), 프로세스 안정성 (process stability), 규제 노출 (regulatory exposure), 예외 발생률 (exception rates), 통합 준비도 (integration readiness), 의사결정 복잡성 (decision complexity), 그리고 ROI 잠재력 (ROI potential) — 이 일곱 가지 차원이 명확하지 않은 방식으로 상호작용하기 때문입니다.

대부분의 자동화 결정은 직관에 의존하여 내려집니다. 팀들은 자동화를 구축하는 데 수개월을 소비하지만, 프로세스가 너무 자주 변경되거나, 데이터가 너무 지저분하거나, 혹은 컴플라이언스 (compliance) 팀의 차단으로 인해 자동화가 불가능하다는 사실을 뒤늦게 깨닫곤 합니다.

우리는 이러한 평가를 체계적이고, 데이터 중심적이며, 상호작용이 가능하도록 (systematic, data-driven, and interactive) 만드는 도구를 구축하고 싶었습니다. 팀원들이 브라우저에서 열어 자신의 워크플로우를 설명하면, 단 몇 초 만에 방어 가능한 답변을 얻을 수 있는 도구 말입니다.

아키텍처 (The Architecture)

프론트엔드 (Frontend)

Jinja2 템플릿을 사용하여 서버 사이드에서 렌더링되는 싱글 페이지 Flask 애플리케이션입니다. 프론트엔드는 바닐라 자바스크립트 (vanilla JavaScript)를 사용하며, 레이더 시각화 (radar visualization)를 위한 Chart.js와 전체 점수를 위한 커스텀 SVG 게이지 (gauge)를 포함합니다.

주요 설계 결정 사항:

  • 빌드 단계 없음 (No build step). webpack, React, npm을 사용하지 않습니다. 순수 HTML/CSS/JS로 구성되어 기여자(contributor)들의 진입 장벽을 없앴습니다.
  • 게임화된 슬라이더 (Gamified sliders). 35개의 개별 범위 입력창(5개 질문 × 7개 차원) 대신, 7개의 통합 차원 슬라이더와 티어 배지(tier badges)를 보여줍니다 — Critical → Bronze → Silver → Gold → Mythic 순입니다. "Fine-tune"을 클릭하면 5개의 세부 질문이 확장됩니다.
  • 실시간 미리보기 (Live preview). 슬라이더를 움직임에 따라 미니 게이지와 추천 배지가 실시간으로 업데이트됩니다. 사용자는 "Analyze"를 클릭하기 전에 점수가 변하는 것을 확인할 수 있습니다.
// 핵심 렌더링 — 통합 + 세부 조정(fine-tune) 기능이 포함된 차원 카드
function createDimSection(key, dim, prefix) {
  const aggDefault = Math.round(
...

백엔드 (Backend)

Flask가 웹 서버와 의사결정 엔진 (decision engine) 역할을 모두 수행합니다. 아키텍처는 모듈형 설계 (modular design)를 따릅니다:

engine/
├── scorer.py          # 차원 점수 산정 로직 (Dimension scoring logic), 기본값, 권장 사항
├── analyzer.py        # 오케스트레이터 (Orchestrator) — 모든 모듈을 하나로 연결
...

점수 산정 엔진 (The Scoring Engine)

scorer.py에 포함된 핵심 점수 산정 로직은 7개의 차원 (dimensions)을 정의하며, 각 차원은 5개의 가중치가 부여된 하위 질문 (sub-questions)으로 구성됩니다:

SCORING_DEFAULTS = {
    "data_quality": {
        "label": "Data Quality",
...

전체 점수는 가중 평균 (weighted average)으로 계산됩니다. 권장 등급 (recommendation tier)은 역량 성숙도 모델 (Capability Maturity Model, CMM) 단계에서 영감을 얻은 임계값 (thresholds)에 의해 결정됩니다:

def get_recommendation(overall_score):
    if overall_score < 30:
        return {"level": "DO NOT AUTOMATE", ...}
...

AI 통합 (AI Integration)

engine/llm.py의 LLM 통합은 선택 사항이며 모듈식으로 설계되었습니다. 이는 OpenAI의 채팅 완성 (chat completions) 형식을 따르므로 LM Studio, Ollama, OpenAI, Anthropic 또는 기타 모든 제공업체와 호환됩니다.

AI가 활성화되면 다음 세 가지 작업을 수행합니다:

  1. 점수 추론 (Score inference) — 워크플로우 설명을 바탕으로 예비 차원 점수를 추론합니다.
  2. 문맥적 리스크 분석 (Contextual risk analysis) — 실제 워크플로우 문맥과 연결된 구체적인 실패 모드 (failure modes)를 생성합니다.
  3. 요약 보고서 (Executive summary) — 주요 결과와 권장 사항이 포함된 CTO 보고용 요약본을 생성합니다.
def infer_workflow(description, industry):
    user_prompt = f"Industry: {industry}\n\nWorkflow Description:\n{description}"
    result = _call_llm(SYSTEM_WORKFLOW_ANALYSIS, user_prompt)
...

시스템 프롬프트는 LLM이 회의적인 태도를 유지하도록 지시하며, 설명이 강력하게 암시하지 않는 한 기본적으로 중간 점수를 부여하도록 하여 AI의 과도하게 낙관적인 출력을 방지합니다.

벤치마크 데이터셋 (Benchmark Dataset)

data/benchmark_generator.py는 의도적으로 주입된 실패 모드 (failure modes)를 포함하여 10개 산업 분야에 걸쳐 600개 이상의 합성 워크플로우 (synthetic workflows)를 생성합니다:

FAILURE_PROFILES = {
    "contradictory_rules": "부서 간 비즈니스 규칙이 서로 모순됨",
    "broken_apis": "레거시 시스템에 안정적인 API 엔드포인트가 없음",
...

각 워크플로우(workflow)에는 무작위로 지정된 차원 점수(dimension scores), 메타데이터 프로필(metadata profile), 그리고 주입된 실패 모드(failure modes)가 부여됩니다. 그 결과 유사성 매칭(similarity matching)을 위한 현실적인 벤치마크(benchmark)가 생성됩니다. 사용자가 자신의 워크플로우를 분석할 때, 우리는 가장 유사한 5개의 합성 워크플로우(synthetic workflows)를 찾아냅니다.

게이미피케이션 레이어 (The Gamification Layer)

기존 UI에는 35개의 범위 슬라이더(range sliders)가 한꺼번에 노출되었습니다. 사용자들은 이를 매우 부담스럽게 느꼈습니다. 우리는 세 가지 원칙을 바탕으로 이를 재설계했습니다:

  1. 점진적 공개 (Progressive disclosure). 7개의 통합 슬라이더만 먼저 보여줍니다. "미세 조정 (Fine-tune)"를 클릭하면 전체 35개로 확장됩니다.
  2. 즉각적인 피드백 (Instant feedback). 슬라이더를 움직일 때마다 게이지(gauge), 티어 배지(tier badge), 그리고 추천 미리보기(recommendation preview)가 업데이트됩니다.
  3. 티어 배지 (Tier badges). 각 차원에는 재미있는 라벨이 붙습니다: 🥉 Bronze, 🥈 Silver, 🥇 Gold, 🏆 Mythic.
function getTier(score) {
  if (score >= 85) return { text: "Mythic", icon: "🏆", cls: "tier-excellent" };
  if (score >= 70) return { text: "Gold",   icon: "🥇", cls: "tier-good" };
...

이제 AI 자동 채우기(AI auto-fill)가 기본 경로입니다. 사용자가 텍스트 영역(textarea)에 자신의 워크플로우를 설명하고 "점수 자동 채우기 (Auto-fill Scores)"를 클릭하면, AI가 35개의 모든 세부 점수를 미리 채워줍니다. 사용자는 분석을 진행하기 전에 이를 미세 조정할 수 있습니다.

결과 대시보드 (The Results Dashboard)

분석이 완료되면 사용자는 7개의 탭으로 구성된 종합 대시보드를 받게 됩니다:

내용
개요 (Overview)게이지(Gauge), 레이더 차트(radar chart), 리스크(risks), 레드 플래그(red flags), 실패 모드 분석(failure mode analysis), ROI, 벤치마크 비교(benchmark comparison), 다음 단계(next steps)
...

우리가 배운 점 (What We Learned)

우리가 배운 점 (What We Learned)

  1. 결정론적 엔진 (Deterministic engines)은 과소평가되어 있습니다. LLM (Large Language Model)은 있으면 좋은 기능이지만, 결정론적 스코어링 엔진 (deterministic scoring engine)이 사용 사례의 90%를 처리합니다. 이는 빠르고 (~1초), 예측 가능하며, 사용자가 외부 서비스를 설정할 필요가 없습니다.

  2. 게이미피케이션 (Gamification)은 마찰을 줄여줍니다. 사용자는 정적인 양식보다 티어 배지 (tier badges)와 라이브 미리보기 (live preview)에 더 많이 참여했습니다. 즉각적인 피드백 루프 (feedback loop)는 평가를 설문조사가 아닌 게임처럼 느끼게 만듭니다.

  3. AI 사전 채우기 (AI prefill)는 신뢰의 절벽입니다. AI가 점수를 사전 채울 때, 사용자가 모든 값을 확인하고 미세 조정 (tweak)할 수 있다면 더 많이 신뢰합니다. 미세 조정 (fine-tune) 섹션은 신뢰를 구축하는 데 매우 중요합니다.

  4. 합성 벤치마크 (Synthetic benchmarks)는 놀라울 정도로 유용합니다. 비록 생성된 것이라 할지라도, 이는 참조 프레임 (reference frame)을 제공합니다. 사용자는 자신의 점수가 "유사한" 워크플로우와 비교했을 때 어떤지 알고 싶어 합니다.

시작하기 (Getting Started)

git clone https://github.com/harishkotra/ShouldWeAutomate.git
cd ShouldWeAutomate
pip install -r requirements.txt
...

How it works

코드 및 기타 정보: https://www.dailybuild.xyz/project/148-should-we-automate

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0