3부. 직접 만들어보기

워크플로우 자동화 AI 에이전트 만들기 (n8n·MCP·RAG)

n8n으로 업무를 자동화하고, MCP로 AI에 연결하고, RAG로 지식을 붙인다

코드를 거의 쓰지 않고도 "뉴스를 수집해 노션에 저장", "게임 리뷰를 수집해 구글 시트에 적재", "그 워크플로우를 AI가 직접 호출" 하는 자동화를 만들어 본다. 도구는 n8n(워크플로우 자동화), 연결 규격은 MCP(Model Context Protocol), 지식 보강은 RAG다.


1. n8n 워크플로우 자동화 도구

1-1. n8n이란?

한 줄 정의

n8n은 "nodemation"(node + automation)의 약자로, 프로그래밍 지식 없이도 다양한 앱과 서비스를 연결하여 업무를 자동화할 수 있는 오픈소스 기반 워크플로우 자동화 도구다.

"nodes"와 "workflows"라는 개념으로 다양한 작업을 시각적으로 연결해 자동화 흐름을 구성한다.

1-2. 주요 특징

특징

설명

자체 호스팅 (Self-Hosted)

Docker·npm·클라우드로 자신의 서버에 직접 설치 가능. 민감한 데이터가 외부로 나가지 않고 자체 인프라에서 처리되어 보안·프라이버시를 완전히 통제한다.

시각적 워크플로우 빌더

드래그 앤 드롭으로 노드를 연결. 각 노드가 특정 작업을 수행하고, 노드 간 연결을 따라 데이터가 흐른다. 실시간 시각화로 디버깅이 쉽다.

확장 가능한 아키텍처

400개 이상의 사전 구축 통합 노드를 제공하며, 커스텀 노드를 직접 개발하거나 커뮤니티 노드를 설치할 수 있다.

1-3. n8n이 지원하는 서비스

400개 이상의 통합을 카테고리별로 제공한다.

  • 생산성 도구: Google Sheets, Notion, Airtable

  • 커뮤니케이션: Slack, Discord, Telegram

  • 이메일: Gmail

  • 클라우드 스토리지: Google Drive

  • 데이터베이스: MySQL, PostgreSQL

  • 개발 도구: Webhook, HTTP Request

  • AI·기계학습: OpenAI, LangChain

1-4. 설치하기

① Node.js 설치 — https://nodejs.org/ko/download

Node.js 다운로드 페이지

② n8n 모듈 설치 및 실행 — 현재 경로에 상관없이 실행하려면 설치 경로를 path 환경변수에 등록한다.

# n8n 설치 경로 지정
> npm config set prefix "d:\dev\n8n"

# n8n 전역 설치
> npm install n8n -g

# 실행
> n8n

1-5. n8n 구성요소

구성요소

역할

Workflow (워크플로우)

n8n의 기본 단위. 여러 노드가 연결된 자동화 프로세스 전체.

Node (노드)

워크플로우의 개별 작업 단위. 특정 기능을 수행.

Connection (연결)

노드와 노드를 잇는 선. 데이터가 흐르는 경로이며, 조건부 분기가 가능. 이전 노드의 출력을 다음 노드의 입력으로 전달.

Credentials (자격 증명)

외부 서비스 인증 정보를 암호화 저장. API 키·OAuth 토큰·계정 정보 등을 여러 워크플로우에서 재사용.

Settings (설정)

워크플로우 설정(타임아웃, 에러 처리, 실행 모드)과 노드 설정(재시도 횟수·간격, Always Output Data, Continue On Fail 등).

워크플로우 에디터 — 노드를 추가·연결하여 자동화 로직을 설계하는 핵심 공간.

n8n 워크플로우 에디터

자격증명(Credentials) — 외부 서비스(API·DB 등)에 연결하기 위한 인증 정보를 관리하는 곳.

n8n 자격증명 화면

1-6. 주요 자격증명 방법

인증 방법

설명

Header Auth

API 키를 HTTP 요청 헤더에 담아 보내는 경우 사용

Query Auth

API 키를 URL 쿼리 파라미터로 전달하는 경우 사용

Basic Auth

사용자 이름과 비밀번호(또는 API Key)를 조합해 인증

OAuth2

가장 안전하고 표준적인 방법. 비밀번호를 직접 공유하지 않고 특정 서비스(Google, Slack, GitHub 등)의 리소스 접근 권한을 n8n에 안전하게 부여하는 산업 표준 프로토콜

OAuth2 설정 단계

  1. 서비스 제공자(Google, GitHub 등)에서 앱 등록

  2. n8n에서 Credential 설정

  3. 인증 및 연결


2. 주요 서비스 API 인증 설정

2-1. Google API 인증

Google Cloud Console에서 프로젝트를 만들고 필요한 API를 켠 뒤, OAuth 클라이언트를 생성해 n8n에 연결하는 흐름이다.

① 프로젝트 생성 — Google Cloud Console 접속 → 좌측 상단 "프로젝트 선택" → 새 프로젝트 생성

Google Cloud Console 프로젝트 생성

② 필요한 API 활성화 — "API 및 서비스" → 서비스 검색 → "사용" 클릭

③ OAuth 동의 화면 설정 — "OAuth 동의 화면" → 시작하기 → 앱 정보 입력 → 대상(외부) 선택 → 연락처 입력 → 정책 동의 후 완료

④ 테스트 사용자 추가 — 본인 이메일 주소를 테스트 사용자로 추가

⑤ OAuth 클라이언트 ID 생성

  1. 클라이언트 → 클라이언트 만들기

  2. 애플리케이션 유형 → 웹 애플리케이션

  3. 임의의 이름 입력

  4. 승인된 리디렉션 URI에 다음 입력: http://localhost:5678/rest/oauth2-credential/callback

  5. 만들기 → 클라이언트 ID와 보안 비밀번호 복사·저장

  1. 클라이언트 → 클라이언트 만들기

  2. 애플리케이션 유형 → 데스크톱 앱

  3. 임의의 이름 입력 → 만들기

  4. 인증정보(JSON) 다운로드

⑥ 데이터 액세스 — "데이터 액세스" → 범위 추가/삭제 → 필요한 범위 선택 후 업데이트 → 변경사항 저장

⑦ n8n Credential 등록 — 예: Google Sheets OAuth2 API

n8n Google Credential 등록

2-2. Anthropic (Claude AI)

Anthropic Credential 등록

2-3. Supabase (PostgreSQL)

  • Supabase 대시보드: https://supabase.com/dashboard

  • n8n Credential 등록: Supabase account

    • Host URL: Project Settings → API Keys

    • Service Role Secret 값 복사


3. n8n 실전 프로젝트 1 — 경제 뉴스 노션 자동 등록

RSS로 경제 뉴스를 가져와 → Claude로 요약 → Notion 데이터베이스와 Supabase에 저장하는 워크플로우다.

3-1. 노션 설정

  1. 데이터베이스 생성: 새 페이지("경제 뉴스") → 데이터베이스("경제 뉴스 스크랩") 생성

  2. 속성 추가: 제목(텍스트), 게시일(날짜), 수집일(날짜), 내용(텍스트), 원문 URL(URL)

  3. Notion API Key 생성: 노션 통합 대시보드 → 신규 연결 → 이름·인증방법(액세스 토큰)·워크스페이스 선택 → 연결 생성

  4. 콘텐츠 사용 권한 탭 → 편집 권한 → 사용할 데이터베이스 선택

  5. "구성" 탭의 API 통합 토큰(액세스 토큰) 값 복사

3-2. n8n 설정

노션 자격증명 등록 → 복사한 노션 API Key 입력.

3-3. 워크플로우 설계

#

노드

설정

1

Schedule Trigger

매일 오전 9시·오후 3시 실행

2

RSS Read

경제 뉴스 RSS 가져오기

3

Limit

최신 뉴스 10개로 제한

4

Anthropic (Message a model)

뉴스 내용 요약

5

Edit Fields (Set)

Notion에 전달할 데이터 변수 설정

6

Notion

노션 DB에 뉴스 등록

7

Supabase (Create a row)

news 테이블에 뉴스 입력

④ Anthropic 요약 프롬프트 예시

다음 뉴스 기사를 중요한 내용 위주로 10줄 이내의 문장으로 요약해주세요:
제목: {{ $json.title }}
내용: {{ $json.content }}
날짜: {{ $json.pubDate }}
자세한 내용 보기: {{ $json.link }}

요약 형식:
- 핵심 내용만 간결하게
- 중요 수치나 날짜 포함
- 마크다운 서식 사용 안 함

⑦ Supabase 노드 설정 — news 테이블에 필드 매핑(예: title ← {{ $json.title }})

Supabase Create a row 노드 설정

완성된 워크플로우

경제 뉴스 노션 자동 등록 워크플로우

Schedule Trigger → RSS → Limit → 뉴스 요약(Claude) → 변수 설정 → 노션 페이지 생성 + DB 입력


4. n8n 실전 프로젝트 2 — Steam 게임 리뷰 수집

공개 리뷰 API를 찾아 리뷰를 수집하고, 구글 시트에 적재한 뒤, 최종적으로 MCP로 노출해 Claude가 직접 호출하게 만드는 3단계 실습이다.

실습 대상 변경 (2026-09-29)

이전 판의 메가박스 영화 리뷰는 사이트가 크롤링을 차단해 실습이 재현되지 않아, 로그인·키 없이 쓸 수 있는 Steam 공개 리뷰 API로 바꿨다. 실습 흐름(API 찾기 → 단일 페이지 → 여러 페이지 → MCP 연동)은 같다.

실습 대상 — 게임 P의 거짓(Lies of P), Steam 앱 번호 1627720. 한국어 리뷰가 수천 건이고 추천·비추천이 섞여 있어 감성분석 결과를 비교하기 좋다.

https://store.steampowered.com/appreviews/1627720?json=1&language=koreana&filter=recent&purchase_type=all&num_per_page=20&cursor=*

응답 필드

뜻

query_summary.total_reviews

전체 리뷰 수(첫 요청에만 들어 있음)

reviews[].review

리뷰 본문

reviews[].voted_up

추천(true) / 비추천(false) — 감성분석의 정답 라벨 역할

cursor

다음 페이지 표시 — 다음 요청의 cursor= 에 넣는다

4-1. 준비 — API 위치 확인

  1. 구글 드라이브에 폴더(n8n_share)와 구글 시트(게임 리뷰 DB) 생성

  2. Steam 상점의 게임 페이지(https://store.steampowered.com/app/1627720/) 접속 → 개발자모드(F12) → Network → Fetch/XHR

  3. 페이지 아래 "고객 평가" 영역에서 필터(언어·정렬)를 바꾸면 appreviews/1627720?... 요청이 보인다 → 응답에 리뷰 JSON이 있는지 확인 → 필요하면 우클릭 → Copy as cURL

주소창으로 바로 확인

위 리뷰 API 주소를 브라우저 주소창에 붙여 넣으면 JSON 응답을 바로 볼 수 있다. cURL을 쓰고 싶으면 LLM에게 "n8n의 execute command 노드에서 실행할 수 있도록 인라인(한 줄)으로 변경해줘"라고 요청한다.

4-2. Step 1 — 단일 페이지 스크래핑

Manual Trigger → HTTP Request(GET 리뷰 API, 응답 JSON) → Edit Fields(데이터 파싱) → HTTP Request(구글 시트에 append).

데이터 파싱 표현식 — 응답을 [추천 여부, 리뷰내용] 배열로 변환:

{{ $json.reviews.map(r => [ r.voted_up ? "추천" : "비추천", r.review ]) }}

(Execute Command + cURL 방식으로 가져왔다면 $json.stdout.parseJson().reviews.map(…))

HTTP Request로 구글 시트 입력 — Google Sheets API v4 사용:

POST https://sheets.googleapis.com/v4/spreadsheets/{시트ID}/values/시트1!A2:append?valueInputOption=USER_ENTERED
Authentication : Predefined Credential Type → Google Sheets OAuth2 API
Body (Raw, application/json) : {{ {"values": $json.review} }}

4-3. Step 2 — 워크시트 자동 생성 + 다중 페이지 스크래핑

Steam은 페이지 번호가 아니라 커서(cursor) 로 다음 페이지를 알려 준다. 그래서 페이지 수를 계산해 반복하는 대신 HTTP Request 노드의 Pagination 옵션으로 여러 페이지를 가져온다.

HTTP Request 노드의 Query Parameters 에 cursor = *(첫 페이지)를 넣고, Options → Add option → Pagination 을 추가해 아래처럼 설정한다.

Pagination 설정

값

Pagination Mode

Update a Parameter in Each Request

Parameters

Type Query · Name cursor · Value(Expression) {{ $response.body.cursor }}

Pagination Complete When

Other

Complete Expression

{{ $response.body.reviews.length === 0 }}

Limit Pages Fetched

켜기 → Max Pages 5 (20건 × 5 = 100건)

Interval Between Requests (ms)

1000 (요청 간 1초 대기 — 속도 조절)

  • Google Sheets / Create spreadsheet 노드로 게임 번호별 워크시트 자동 생성

  • 가져온 페이지별 응답을 Edit Fields로 파싱해 시트에 입력

4-4. Step 3 — MCP로 LLM과 연동

Step 2 워크플로우를 서브 워크플로우로 만들고, MCP Server Trigger로 노출해 Claude가 도구처럼 호출하게 한다.

  1. Execute Sub-workflow 노드로 appId(게임 번호)를 입력받게 구성 후 워크플로우 활성화(publish)

  2. 새 워크플로우에 MCP Server Trigger + Call n8n Workflow Tool 노드를 추가해 위 워크플로우를 MCP Tool로 연결

  3. MCP 클라이언트에 서버 등록 — Claude Desktop은 claude_desktop_config.json, Claude Code는 프로젝트의 .mcp.json(또는 claude mcp add):

"steam-review-scraper": {
  "command": "npx",
  "args": [
    "-y",
    "mcp-remote",
    "http://localhost:5678/mcp/{MCP Server Trigger 노드 URL}"
  ]
}
  1. 클라이언트를 다시 실행한 뒤 요청:

Steam에서 게임번호 1627720의 한국어 리뷰를 가져와서 감성분석을 해주고, 실제 추천 여부와 얼마나 맞는지 비교해줘

리뷰 원문

사용자 리뷰에는 비속어가 섞여 있을 수 있다. 수업 화면에 띄울 예시는 미리 골라 두자.


5. MCP (Model Context Protocol)

5-1. API 방식 vs MCP 방식

API를 이용한 연결 — AI 에이전트 개발자가 각 도구 제조사의 API 사용법을 일일이 알아야 도구를 제어할 수 있다.

API로 AI와 도구를 연결

도구마다 다른 API — AI 모델이 Gmail·Notion·Discord·Cloud API를 각각 직접 다뤄야 한다

MCP를 이용한 연결 — Anthropic이 2024년 11월 발표한 개방형 표준 프로토콜. AI 시스템과 다양한 컨텍스트 소스 간 상호작용을 표준화한다.

MCP로 AI와 도구를 연결

MCP Host(AI 모델 + Client)가 MCP Protocol로 여러 MCP Server에 연결된다

5-2. 주요 구성 요소

구성 요소

역할

예시

① MCP Host

사용자 요청을 AI 모델에 전달하고 결과를 보여주는 앱. 내부에 AI 모델과 Client를 포함

Claude Desktop, IDE, AI 도구

② MCP Client

Host와 Server 사이의 중개자. 서버와 1:1 연결 유지, 메시지 변환·처리

Claude Desktop 내부 통신 모듈

③ MCP Server

특정 기능·데이터 소스 접근을 제공. 도구마다 하나씩 존재

FileSystem·Notion·GitHub 서버

④ Data Sources

서버가 접근하는 실제 도구

파일 시스템, DB, API

5-3. MCP 클라이언트 & 서버

주요 MCP 클라이언트: Claude Desktop, IDE(Cursor·Copilot), Raycast, Claude Code, ChatGPT·Codex, Antigravity

MCP 서버의 핵심 기능: 리소스 접근 · 도구 실행 · 프롬프트 관리 · 샘플링

빠르게 성장하는 생태계

MCP 생태계는 매우 빠르게 성장하고 있으며, 2026년 1월 현재 7,600개 이상의 MCP 서버가 존재한다. (PulseMCP, Smithery, Anthropic 공식 레지스트리 등에서 탐색 가능)

통신 방식 — 서버의 실행 위치에 따라 두 가지:

구분

STDIO (Standard Input/Output)

Streamable HTTP

작동 원리

네트워크 포트 없이 프로세스 표준 입출력으로 통신

서버가 HTTP 엔드포인트 하나를 열고, 요청마다 응답(필요하면 스트리밍)

특징

로컬 실행이 쉽고 안전. 클라이언트가 서버 프로세스를 직접 실행·관리

원격 호스팅된 MCP 서버 호출에 사용. 웹·클라우드 통합에 적합

용도

로컬 파일 접근, 로컬 DB 연결, 간단한 스크립트

원격 API 호출, 중앙 집중형 기업 내부 데이터 서비스

SSE 방식은?

예전 자료의 SSE(Server-Sent Events) 방식은 2025년 3월 MCP 스펙에서 Streamable HTTP로 대체됐다. 이 장의 n8n MCP Server Trigger처럼 SSE를 아직 지원하는 도구도 있지만, 새로 만들 때는 HTTP 방식을 기준으로 한다.

5-4. MCP 사용하기

설정 파일 위치: Claude Desktop → 좌측 상단 햄버거 메뉴 → 파일 → 설정 → 개발자 → 구성편집 → claude_desktop_config.json

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "d:\\Dev\\mcp_share"
      ]
    }
  }
}

실습 프롬프트 — 스크린샷 폴더의 이미지를 분석해 순번_이미지내용_생성년월일.확장자 형식으로 이름을 바꿔 "파일명 변경" 폴더에 저장(원본은 유지).

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["-y", "@playwright/mcp@latest"]
    }
  }
}

실습 프롬프트 — "네이버 뉴스에서 오늘의 주요 뉴스 제목 5개를 가져와줘" / "11번가에서 '무선마우스'를 검색하고 3만원 이하 상품 중 평점 높은 것을 장바구니에 담아줘"

왜 스크린샷을 찍을까?

LLM은 텍스트(HTML/DOM)만으로는 복잡한 레이아웃을 완벽히 파악하기 어렵다. 멀티모달 능력으로 캡처 이미지를 보고 제어할 요소를 판단해 정확한 좌표로 상호작용하기 위함이다.

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp@latest"]
    }
  }
}

동작 — 프롬프트에 use context7 키워드 감지 → 언급된 라이브러리(FastAPI, Next.js 등) 자동 인식 → 최신 공식 문서 파싱 → LLM 컨텍스트에 주입 → 버전별 정확한 코드 생성.

실습 프롬프트 — "Next.js 14에서 쿠키의 JWT를 검증하고 인증되지 않은 사용자를 /login으로 리다이렉트하는 미들웨어를 만들어줘. use context7"


6. 앱 노드 vs MCP

6-1. 개념 비교

구분

앱 노드 (App Node)

MCP (Model Context Protocol)

목적

특정 서비스의 API를 호출해 워크플로우 내에서 데이터 교환·자동화 실행

AI 모델(LLM)에게 도구를 제공해 외부 세계와 지능적으로 상호작용

대상

워크플로우가 직접 처리하는 데이터·앱 (Slack, Google Sheets 등)

AI 에이전트·LLM 클라이언트 (Claude Desktop, Cursor 등)

작동 방식

워크플로우의 한 단계로 순차 실행. 고정된 작업("행 추가", "메시지 전송") 수행

AI가 자연어 지침을 처리하며 필요한 도구를 동적으로 발견·선택

n8n에서의 역할

워크플로우의 핵심 구성요소 (Trigger·Action)

MCP Server Trigger로 워크플로우 자체를 AI가 쓸 수 있는 '도구'로 노출

6-2. 직접 연결 방식 vs MCP 방식

n8n의 AI 모델 노드(OpenAI, Gemini)와 앱 노드(Google Drive, Slack)를 직접 연결.

장점 — 단순성(빠른 구성), 쉬운 사용(드래그 앤 드롭 + API 키), 성능(중간 서버 없음)

단점

  • 정형화된 입력/출력에 맞춰야 함 → 비정형 데이터는 변환 노드 필요

  • 미지원 AI 모델은 HTTP Request로 직접 호출해야 함

  • 도구 간 데이터 형식 불일치로 LLM이 종합 이해하기 어려움

  • 장기 컨텍스트 관리 부재, 도구별 인증 정보를 개별 관리해야 함

n8n과 AI 모델 사이에 MCP Server라는 중간 계층을 두어 모든 도구-모델 간 데이터 교환을 표준 프로토콜로 처리.

장점

  • 표준화된 컨텍스트 관리: 여러 도구의 정보를 표준 컨텍스트 객체로 통합, 장기 기억/대화 지원

  • 유연성·확장성: AI 모델 교체가 쉽고(추상화), 새 도구는 MCP Server만 구현하면 연결

  • 중앙화: 전처리·후처리, 인증 정보를 MCP Server에서 중앙 관리

단점 — 구현 복잡성(초기 설정·유지보수), 추가 인프라(호스팅) 필요, 약간의 네트워크 지연


7. RAG 시스템

7-1. LLM의 약점

약점

내용

환각 (Hallucination)

LLM은 본질적으로 "다음 단어를 확률적으로 예측"하는 모델이지 사실을 DB에서 찾는 시스템이 아니다. 존재하지 않는 논문·가짜 인용·틀린 통계를 자신감 있게 만들어낸다.

지식의 최신성 부족

학습 시점까지의 데이터로 만들어져 이후 사건을 알지 못한다. 내부 지식은 특정 시점에 고정.

컨텍스트 윈도우 제한

입력 텍스트 길이에 상한이 있다. 입력이 길수록 행렬 연산 비용이 커지기 때문.

7-2. RAG의 등장

RAG란?

RAG (Retrieval-Augmented Generation, 검색 증강 생성) 는 LLM의 약점, 특히 환각과 지식 최신성 부족을 보완하기 위한 기술이다. 자체 지식에만 의존하지 않고 외부 지식과 결합해 답변을 생성해 환각을 크게 낮춘다.

RAG의 세 단계

찾고(검색) → 정리하고(증강) → 근거에 맞게 답한다(생성)

flowchart LR
    Q[사용자 질문] --> R[① 검색<br/>벡터 DB에서<br/>유사 문서 조회]
    R --> A[② 증강<br/>질문 + 검색된 문서<br/>프롬프트 결합]
    A --> G[③ 생성<br/>LLM이 근거 기반<br/>답변 작성]
    G --> F[최종 답변]

7-3. ① 검색 (Retrieval) 단계

사용자 질문을 벡터로 바꾼 뒤, 벡터 DB에서 의미적으로 가장 가까운 문서 조각을 찾아온다. 임베딩 유사도를 이용하므로 단순 키워드 매칭이 아니라 "의미"가 비슷한 것을 찾아, 표현이 달라도 관련 내용을 잡아낸다.

임베딩(Embedding)이란? — 단어·문장·이미지를 "의미를 담은 숫자들의 목록(벡터)"으로 바꾼 것. 다차원 공간의 좌표가 되어, 의미가 비슷한 대상은 가까이, 다른 대상은 멀리 놓인다.

임베딩 벡터 공간

점이 가까울수록 의미가 비슷하고, 화살표 방향은 의미 관계(예: 성별)를 나타낸다

임베딩 모델의 선택 — 모델마다 학습한 언어·내용이 달라 좌표 기준이 다르다. "내 데이터의 의미 관계를 가장 정확하게 그려주는 모델"을 고르는 일이며, 검색 품질이 곧 RAG 답변 품질을 좌우한다.

벡터 DB vs RDB

구분

RDB

벡터 DB

찾는 기준

정확히 일치

의미적으로 유사

저장 형태

표(행·열, 고정 스키마)

벡터(숫자 배열)

질의 방식

SQL 조건문

최근접 이웃 탐색

결과

맞다/아니다 (정확)

가까운 후보들 (근사)

강점

정확한 조회·집계·트랜잭션

의미 검색, 추천, 유사도

청킹(Chunking)이란? — 긴 문서를 임베딩하기 전 적당한 크기의 조각으로 나누는 작업. 임베딩 모델·LLM은 최대 입력 길이가 정해져 있고, 너무 큰 문장을 하나의 벡터로 압축하면 의미가 흐릿해지기 때문이다.

청킹 방식

설명

글자 수 분할

주어진 글자 수만큼 자름. 경계에서 의미가 끊기는 것을 막기 위해 이웃 청크의 일부를 겹치는 오버랩(보통 10~20%) 을 둔다.

구조 기반 분할

문장 끝·문단·헤더 같은 사람이 만든 의미 경계로 자름. 대표적으로 재귀적 분할(큰 경계 → 작은 경계 순으로 목표 크기까지 쪼갬).

의미 기반 분할

문장별 임베딩 유사도를 계산해 유사도가 급락하는 지점을 맥락 변화로 보고 분할. 경계가 글자 수가 아니라 의미 흐름으로 결정된다.

오버랩은 필수가 아니다

오버랩은 청크 중복으로 토큰 예산을 낭비하는 작업이므로, 특정 분할 방식의 약점을 보완하는 선택적 완화책이다.

7-4. ② 증강 (Augmentation) 단계

검색된 외부 지식 + 사용자 질의 + 모델의 행동 지침을, 하나의 잘 구조화된 프롬프트로 합성한다.

증강 프롬프트의 구성요소

  • 컨텍스트(Context): 검색된 청크들. 구분자와 출처 메타데이터(파일명·페이지·URL 등)를 포함

  • 시스템 지침(Instruction): "주어진 컨텍스트만 근거로 답하라", "답이 없으면 모른다고 답하라", "출처를 명시하라"

  • 사용자 질의(Query): 보통 프롬프트의 마지막에 배치

증강 단계에서는 컨텍스트를 선별·압축(토큰 예산 관리), 중복 제거·재순위화(정보 편향 관리)한 뒤 프롬프트를 조립한다.

7-5. ③ 생성 (Generation) 단계

증강 단계가 넘긴 "완성된 프롬프트"로 실제 답변 텍스트를 만든다. 핵심은 모델이 자기 가중치의 지식(parametric) 대신 출처가 분명한 컨텍스트(non-parametric) 를 근거로 답하게 만드는 것.

생성 단계의 실패 양상

  • 컨텍스트 무시: 정답 청크를 가져왔는데 모델이 자기 파라미터 지식을 더 신뢰 → 그라운딩 지침 강화, Temperature 하향으로 완화

  • 컨텍스트 충돌: 검색된 청크들이 서로 모순 → 최신 문서 우선 배치, 메타데이터로 우선순위 명시

  • Lost in the Middle: 정답이 긴 컨텍스트 한가운데 묻히면 놓침(앞·뒤는 잘 활용) → 재순위화로 해결

Temperature 이해하기 — LLM은 다음 단어를 확률로 계산한다. 온도가 높으면 확률 분포가 평탄해져 낮은 확률 단어도 선택될 가능성이 커지고(무작위성↑), 온도가 낮으면 가장 확률 높은 단어를 골라(일관성↑) 답한다. 보통 0~1 사이 값을 설정한다.


정리

  • n8n: 노드를 연결해 업무를 시각적으로 자동화하는 오픈소스 도구

  • n8n 실전 프로젝트: ① 뉴스 → 노션/Supabase 적재, ② Steam 게임 리뷰 수집(공개 API) → 구글 시트 → MCP 노출

  • MCP: AI와 도구를 잇는 표준 프로토콜. 워크플로우를 AI의 '도구'로 만든다

  • RAG: 검색 → 증강 → 생성으로 LLM에 최신·외부 지식을 붙여 환각을 줄인다

마지막 수정 2026년 10월 23일