n8n이 오케스트레이션 하는 Data Pipeline (수집부터 시각화, AI 에이전트까지)

1. 들어가는 글: 자동화 도구를 넘어 '오케스트레이터'로

단순한 업무 자동화(Automation)를 넘어, 복잡한 데이터 흐름을 제어하는 오케스트레이션(Orchestration) 도구로서 n8n의 가능성을 실험해보고 싶었습니다.

이를 검증하기 위해 "경제 뉴스 분석 시스템"이라는 시나리오를 설정하고, 비정형 텍스트 수집부터 AI 가공, DB 적재, 시각화, 그리고 대화형 인터페이스까지 이어지는 End-to-End 데이터 파이프라인을 구축해 보았습니다.

이 글은 특정 금융 서비스를 만든 이야기가 아니라, 서로 다른 성격의 도구들을 n8n이 어떻게 하나로 묶어내는지에 대한 기록입니다.



2. 인프라 아키텍처 (The Infrastructure)

이 파이프라인은 클라우드 의존도를 최소화하고, 데이터 주권과 확장성을 확보하기 위해 Docker 기반의 Self-Hosted 환경에서 구동됩니다.

🏗️ The Stack

하나의 서버 안에 Docker Compose를 이용해 다음 서비스들을 사설 네트워크로 묶었습니다.

  • n8n (The Orchestrator): 모든 워크플로우의 중추. 데이터 흐름을 제어하고 각 서비스를 연결합니다.

  • PostgreSQL (The Storage): 수집된 원본 데이터와 가공된 분석 데이터를 저장하는 메인 데이터 웨어하우스입니다.

  • Apache Superset (The Visualizer): DB 데이터를 전문적인 차트로 시각화하는 오픈소스 BI 툴입니다.

🛠️ 왜 Google Sheets나 Aitable이 아닌가?

데모라 할지라도 확장성을 고려했습니다. 보통 자동화 입문용으로 많이 쓰는 구글 시트나 Airtable은 다음과 같은 한계가 명확하기 때문입니다.

  1. 퍼포먼스: 수만 건 이상의 뉴스 데이터를 처리하거나 쌓기에 적합하지 않습니다.

  2. 고급 분석: SQL의 윈도우 함수(LAG, OVER) 같은 시계열 분석을 스프레드시트 수식으로 구현하기 어렵습니다.

  3. AI 호환성(Text-to-SQL): AI가 정형화된 DB 구조를 이해하고 쿼리를 짤 수 있도록 하려면 RDBMS(PostgreSQL)가 필수적입니다.



3. 파이프라인 해부 (Pipeline Breakdown)

전체 시스템은 n8n이 관리하는 3개의 핵심 흐름으로 나뉩니다.

Phase 1. ETL & AI Processing (데이터 수집 및 가공)

Goal: 비정형 데이터(뉴스)를 정형 데이터(지표)로 변환하여 저장

시스템의 프로세스를 보여주는 다이어그램


가장 먼저 n8n은 ETL(Extract, Transform, Load) 작업을 수행합니다.

  1. Extract: RSS Reader 노드로 매일경제의 다양한 섹션(증권, 경제, 기업)에서 데이터를 주기적(1시간)으로 가져옵니다.

  2. Transform (w/ AI): 단순 텍스트 처리가 아닙니다. Ai Agent 노드를 통해 GPT-4o-mini에게 데이터를 전달합니다. AI는 기사를 읽고 Sector(산업군), Sentiment Score(감성 점수), Summary(요약)를 JSON 포맷으로 구조화하여 리턴합니다.
    *System Prompt

    너는 한국 금융시장을 분석하는 전문 뉴스 애널리스트이자 퀀트 리서처다.  
    입력으로 개별 뉴스 기사의 제목(title)과 본문(content)이 주어지면, 해당 뉴스가 주식시장에 미치는 영향을 투자 관점에서 분석한다.
    
    다음 규칙을 반드시 따른다.
    
    ────────────────────────────
    
    [1] 섹터(산업군) 분류
    
    뉴스가 주로 해당되는 주식시장 섹터를 아래 목록 중 하나로 반드시 선택한다.  
    여러 분야가 섞여 있어도 “주가에 가장 직접적인 영향을 줄 가능성이 높은 섹터 하나만” 고른다.
    
    선택 가능한 섹터:
    
    - "반도체"
    - "AI/빅데이터"
    - "2차전지/전기차"
    - "자동차/모빌리티"
    - "바이오/제약"
    - "헬스케어/의료기기"
    - "IT/인터넷/플랫폼"
    - "게임/엔터/콘텐츠"
    - "통신"
    - "금융(은행/증권/보험/자산운용)"
    - "에너지/정유/가스"
    - "신재생에너지/수소"
    - "방산/우주"
    - "조선/중공업"
    - "기계/산업재"
    - "화학"
    - "철강/비철금속"
    - "유통/소비재"
    - "식품/프랜차이즈"
    - "뷰티/패션"
    - "부동산/건설/리츠"
    - "정책/매크로/금리/환율"
    - "기타"
    
    특정 기업 관련 뉴스라면, 그 기업의 핵심 사업이 속한 섹터로 분류한다.
    
    ────────────────────────────
    
    [2] 투자 심리 기반 감정 분석
    
    이 뉴스가 해당 섹터의 주가 및 투자심리에 미치는 영향을 평가한다.
    
    sentiment는 반드시 아래 중 하나:
    - "positive"  : 실적 개선, 수주, 신규 사업, 정책 수혜, 기대감 상승 등 호재
    - "negative"  : 실적 악화, 사고, 규제 강화, 제재, 비용 증가 등 악재
    - "neutral"   : 방향성이 불명확하거나 정보성 위주의 기사
    
    판단 기준은 "도덕성"이 아니라  
    "해당 섹터의 주가와 수급에 미칠 가능성"이다.
    
    ────────────────────────────
    
    [3] 감정 강도 수치화
    
    sentiment_score는 -1.0 ~ 1.0 범위의 실수로 표현한다.
    
    기준 예시:
    - 0.6 ~ 1.0  : 매우 긍정적, 강한 호재
    - 0.2 ~ 0.6  : 긍정적
    - -0.2 ~ 0.2 : 중립
    - -0.6 ~ -0.2: 부정적
    - -1.0 ~ -0.6: 매우 부정적
    
    반드시 sentiment와 부호를 일치시킨다:
    - positive → 0 이상
    - negative → 0 이하
    - neutral → -0.2 ~ 0.2
    
    ────────────────────────────
    
    [4] 시장 영향도 등급
    
    impact는 아래 3단계 중 하나:
    - "strong" : 대형 이벤트, 정책 변화, 구조적 영향
    - "medium" : 의미 있는 재료지만 제한적 파급
    - "weak" : 단기적이거나 영향이 미미함
    
    ────────────────────────────
    
    [5] 요약
    
    summary에는  
    “어떤 이슈가 발생했고 왜 투자심리에 영향을 줄 수 있는지”를  
    한국어 1~2문장으로 간결하게 정리한다.
    
    ────────────────────────────
    
    [6] 출력 형식
    
    반드시 아래 JSON 형식의 객체 하나만 출력한다.  
    설명, 마크다운, 불필요한 문장은 절대 포함하지 않는다.
    
    {
      "link": "입력된 link"
      "sector": "반도체",
      "sentiment": "positive",
      "sentiment_score": 0.72,
      "impact": "strong",
      "summary": "AI 투자 확대 및 실적 기대감 확산으로 반도체 섹터 전반의 투자심리가 개선될 가능성이 높다."
    }

    Load: 가공된 데이터는 Postgres 노드를 통해 DB에 Upsert (중복 시 업데이트, 없으면 삽입) 됩니다.

👉 Key Point: n8n이 RSS데이터 수집과 DB 트랜잭션(Postgres) 사이를 매끄럽게 연결합니다.



Phase 2. Automated Reporting (시각화 및 배포)

Goal: 저장된 데이터를 시각화하고 사용자에게 전달 (Push)

프로세스의 다양한 단계를 보여주는 다이어그램

데이터가 쌓이면 n8n은 리포팅 에이전트로 변신합니다. 여기서 기술적으로 주목할 점은 UI 레벨의 통합입니다.

  1. SQL Query: n8n이 DB에서 일일 집계 데이터를 뽑아 LLM에게 넘겨 "오늘의 시장 코멘트"를 생성합니다.

    한국어 코드 편집기의 스크린샷
    너는 시장 트렌드 분석 AI다.
    
    다음 데이터는 섹터별 weighted_score의 변화 추이이며,
    이는 뉴스 및 관심도를 기반으로 한 시장 심리 흐름을 의미한다.
    
    목표는 단순한 수치 나열이 아니라
    “섹터별 흐름과 방향성”을 직관적으로 해석하는 것이다.
    
    아래 데이터를 바탕으로 다음 항목을 서술형 보고서로 작성하라:
    
    1. 상승 지속 섹터  
    - 최근 며칠간 관심도가 점진적으로 강화되며
      시장 내 모멘텀이 형성되고 있는 섹터
    
    2. 급락 섹터  
    - 관심도 둔화 또는 매력도 약화 흐름이 감지되는 섹터
    
    3. 변동성 확대 구간  
    - 단기간 내 관심도가 급격히 흔들리며
      트레이딩 리스크가 커진 섹터
    
    4. 투자 유의 섹터  
    - 방향성이 불명확하거나 피로감이 누적된 영역
    
    작성 가이드:
    - 숫자는 반드시 필요할 때만 최소한으로 사용한다.
    - 수치보다 “흐름, 분위기, 모멘텀, 심리” 중심으로 설명한다.
    - 각 섹터는 해설 문장 중심으로 서술한다.
    - 투자 판단이 아닌 시장 해석 관점에서 작성한다.
    
    리포트 스타일:
    - 경제 뉴스 해설가처럼 차분하고 논리적인 톤
    - 과도한 단정이나 예측은 피할 것
    - 독자가 빠르게 읽고 이해할 수 있도록 간결하게 구성
    - 마크다운 양식처럼 보이지만, 최종 출력은 그냥 줄바꿈된 일반 텍스트
    
    데이터:
    {{ JSON.stringify($json.trend_data) }}
  2. Headless Browser (Puppeteer): Superset은 차트 이미지를 제공하는 API가 없습니다. 이를 해결하기 위해 n8n 커뮤니티 노드인 n8n-nodes-puppeteer를 사용했습니다.

    • n8n이 크롬 브라우저를 띄워 Superset에 로그인하고, 차트 렌더링을 기다린 후(Wait), 고해상도 스크린샷을 찍어옵니다.

      다양한 데이터 포인트를 보여주는 대시보드 스크린샷
      • Superset에서의 시각화는 PostgresDB로 부터 데이터를 가져와 자유롭게 가능

  3. Telegram Output: 텍스트 분석 결과와 캡처한 차트 이미지를 결합해 메신저로 전송합니다.

    태블릿의 채팅 페이지 스크린샷

👉 Key Point: API가 없는 레거시/UI 기반 시스템(Superset 화면)도 Puppeteer 노드를 통해 파이프라인의 일부로 편입시켰습니다.



Phase 3. Interactive AI Agent (상호작용)

Goal: 사용자의 요청에 따라 데이터를 능동적으로 조회 (Pull)

마지막으로 지난 시간까지 만든 n8n AI Agent 텔레그램 챗봇을 활용해 사용자가 자연어로 데이터를 조회하는 기능을 추가로 구축했습니다.

  • Routing: 사용자의 질문 의도에 따라 검색(SerpApi), 유튜브 요약, 차트 분석 등 적절한 Tool을 호출합니다.

  • Text-to-SQL (The Core): 특히 PostgresDB 툴 연결이 핵심입니다.

    • User: "요즘 반도체 섹터 분위기 어때?"

    • n8n (AI): 자연어 질문을 SQL 쿼리(SELECT avg(score) FROM news...)로 변환 → DB 조회 → 결과를 요약하여 답변.

기계의 과정을 보여주는 다이어그램
너는 PostgreSQL 데이터베이스 전문가야. 사용자의 자연어 질문을 SQL 쿼리로 변환하고, Postgres Tool를 사용해 실행한 뒤 결과를 요약해줘.

[제약 사항]
1. 오직 SELECT 쿼리만 실행할 것. (INSERT, UPDATE, DELETE 금지)
2. 날짜 관련 쿼리를 짤 때는 현재 날짜가 {{ $now }} 임을 고려해.
3. 쿼리 결과가 비어있으면 "해당하는 데이터가 없습니다"라고 답해.
4. 답변은 한국어로 자연스럽게 요약해줘.
5. 기본적으로는 title,link,summary를 추출해서 전달 할 수 있어야
6. 섹터나 타이틀 등 조건절 검색 적용시 like 문법등을 활용해서 유사한 내용도 쿼리 결과에 나올 수 있도록 반영해.

위와 같이 Postgres Tool을 써서 쿼리를 날릴 수 있는 Ai Agent를 서브워크플로우로 구성하고, 텔레그램봇의 메인agent에 다시 툴로서 추가 합니다.

머신러닝 시스템의 프로세스를 보여주는 다이어그램
한국어 문자 메시지 스크린샷
모바일 장치의 텍스트 편집기 스크린샷

  • 기존 Ai Agent에 연결된 툴 소개:
    SerpApi : 실시간 검색을 통한 정보 요약 전달

    한국어 문자 메시지 스크린샷


    Youtube Transcript : 유튜브 링크 전달 시 내용 요약

    한국어 문자 메시지 스크린샷


    Technical Analyst : 미국주식관련 분석 요청시 주가 정보 및 차트 분석 결과 전달

    WhatsApp의 거래 화면 스크린샷

👉 Key Point: n8n은 단순한 '단방향 자동화'뿐만 아니라, 사용자와 상호작용하는 '챗봇 백엔드' 역할까지 완벽하게 수행합니다.


4. 구성해 보며 느낀 점 (Why n8n?)

이 거창해 보이는 파이프라인을 구축하면서 느낀 n8n의 매력은 '복잡한 걸 쉽게 연결해준다'는 점이었습니다. n8n을 처음 접하시는 분들을 위해 3가지 포인트로 요약해 봅니다.

1. 코딩 없이도 '개발자처럼' 생각할 수 있습니다

보통 이런 시스템을 만들려면 파이썬으로 웹 크롤러 짜고, DB 연결 코드 작성하고, API 연동하고... 준비 과정만 한세월입니다. 요즘은 바이브 코딩으로 만들어 줄 거 같기도 합니다.^^
하지만 n8n에서는 "RSS에서 가져와서 → AI에게 요약시키고 → DB에 넣어라"라는 내 생각의 흐름 GUI로 구현할 수 있습니다. 복잡한 코딩 문법 대신 '로직' 그 자체에만 집중할 수 있게 해줍니다.

2. 서로 다른 도구들이 '통역' 없이 대화합니다

이 프로젝트에는 성격이 완전히 다른 도구들이 섞여 있습니다.

  • n8n: 자동화 툴

  • Postgres: 데이터를 저장함

  • Superset: 데이터를 시각화함

  • Telegram: 메시지를 보냄

원래라면 이들을 연결하기 위해 복잡한 설정이 필요하지만, n8n은 중간에서 만능 통역사(Orchestrator) 역할을 해줍니다. 뉴스가 데이터가 되고, 데이터가 메시지가 되어 가치를 높이게 됩니다.

3. 눈으로 보는 '데이터의 흐름'

코드로 짤 때는 어디서 에러가 났는지 찾기 힘들 때가 많습니다.
n8n은 데이터가 흘러가는 과정이 눈앞에 시각적으로(Visual) 보입니다. "아, 여기서 AI가 분석을 잘못했구나", "여기서 DB 저장이 안 됐구나"를 바로바로 확인하고 수정할 수 있습니다. 마치 레고 블록을 조립하듯 시스템을 만들고 고칠 수 있다는 것, 이것이 가장 큰 즐거움이었습니다.



5. 마치며

이번 프로젝트는 '경제 뉴스'를 소재로 했지만, 이 구조(수집-가공-저장-시각화-대화)는 마케팅 데이터 분석, 서버 로그 모니터링, 고객 VoC 분석 등 어떤 도메인에도 그대로 적용할 수 있는 강력한 템플릿입니다.

데이터 파이프라인 구축을 고민하고 계신다면, n8n을 통한 오케스트레이션을 고려해보시길 바랍니다. 생각보다 훨씬 강력하고 우아하게 시스템을 장악할 수 있습니다.

한국 기업의 프로세스를 보여주는 다이어그램
20
5개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요