2025년 9월 15일 월요일

미국 달러-원화 환율 위젯 삽입 방법의 모두 것

미국 달러-원화 환율 위젯 삽입 방법

💵 미국 달러-원화 환율 위젯 삽입 방법

블로그에 삽입할 수 있는 미국 달러-원화 환율 위젯을 구현하는 가장 간단한 방법은 외부 금융 사이트에서 제공하는 HTML 코드를 활용하는 것입니다. 별도의 개발 지식이 없어도 쉽게 적용할 수 있으며, 환율 정보는 자동으로 최신 상태로 업데이트됩니다.


1️⃣ 환율 정보 위젯 코드 찾기

가장 보편적으로는 금융 정보 사이트에서 제공하는 환율 위젯을 복사해서 활용합니다.

네이버 금융에서 찾기

  1. 네이버 금융 환율 페이지 접속
  2. 환율 메뉴 선택
  3. 하단/사이드바에서 “환율 위젯” 또는 “웹사이트에 삽입” 메뉴 확인
  4. 디자인 및 크기 선택 후 HTML 코드 복사

다음 금융에서 찾기

  1. 다음 금융 환율 페이지 접속
  2. 위젯 제공 여부 확인 후 HTML 코드 복사

2️⃣ 블로그에 위젯 코드 삽입하기

블로그 플랫폼에 따라 코드 삽입 방식이 조금씩 다릅니다.

네이버/티스토리 블로그

  • 관리자 페이지 → 위젯/사이드바 설정 → HTML 배너 추가
  • 복사한 환율 위젯 코드 붙여넣기

워드프레스 블로그

  • 관리자 페이지 → 외모 → 위젯
  • HTML 위젯 추가 → 코드 삽입

이렇게 설정하면, 방문자에게 항상 실시간 환율 정보를 보여줄 수 있습니다.


📌 직접 커스터마이징하고 싶다면?

더 개성 있는 디자인이나 기능을 원한다면 환율 API를 활용하는 방법도 있습니다. 이 경우 HTML과 JavaScript 지식이 필요하지만, 원하는 스타일로 환율 정보를 표시할 수 있습니다. 초보자라면 기본 위젯을 먼저 활용하는 것을 추천합니다.

처음으로
 

블로거에서 동작하는 미국달러-원화 환율 위젯 구현하기- 버전1

미국 달러-원화 환율 위젯 삽입 방법

💵 미국 달러-원화 환율 위젯 삽입 방법

블로그에 삽입할 수 있는 미국 달러-원화 환율 위젯을 구현하는 가장 간단한 방법은 외부 금융 사이트에서 제공하는 HTML 코드를 활용하는 것입니다. 별도의 개발 지식이 없어도 쉽게 적용할 수 있으며, 환율 정보는 자동으로 최신 상태로 업데이트됩니다.


1️⃣ 환율 정보 위젯 코드 찾기

가장 보편적으로는 금융 정보 사이트에서 제공하는 환율 위젯을 복사해서 활용합니다.

네이버 금융에서 찾기

  1. 네이버 금융 환율 페이지 접속
  2. 환율 메뉴 선택
  3. 하단/사이드바에서 “환율 위젯” 또는 “웹사이트에 삽입” 메뉴 확인
  4. 디자인 및 크기 선택 후 HTML 코드 복사

다음 금융에서 찾기

  1. 다음 금융 환율 페이지 접속
  2. 위젯 제공 여부 확인 후 HTML 코드 복사

2️⃣ 블로그에 위젯 코드 삽입하기

블로그 플랫폼에 따라 코드 삽입 방식이 조금씩 다릅니다.

네이버/티스토리 블로그

  • 관리자 페이지 → 위젯/사이드바 설정 → HTML 배너 추가
  • 복사한 환율 위젯 코드 붙여넣기

워드프레스 블로그

  • 관리자 페이지 → 외모 → 위젯
  • HTML 위젯 추가 → 코드 삽입

이렇게 설정하면, 방문자에게 항상 실시간 환율 정보를 보여줄 수 있습니다.


📌 직접 커스터마이징하고 싶다면?

더 개성 있는 디자인이나 기능을 원한다면 환율 API를 활용하는 방법도 있습니다. 이 경우 HTML과 JavaScript 지식이 필요하지만, 원하는 스타일로 환율 정보를 표시할 수 있습니다. 초보자라면 기본 위젯을 먼저 활용하는 것을 추천합니다.

 
  
처음으로
 

2025년 9월 14일 일요일

n8n용 실전 워크플로우: 서비스계정(서비스 계정 토큰)으로 Google apal(Gemini) 호출하고 Gmail/Sheets로 처리하기

n8n용 실전 워크플로우: 서비스계정(서비스 계정 토큰)으로 Google apal(Gemini) 호출하고 Gmail/Sheets로 처리하기

실전 튜토리얼 — n8n에 Import 가능한 Gemini(apal) 워크플로우 + 서비스계정 인증 가이드

요약: 이 글은 n8n에 바로 Import 가능한 JSON 워크플로우( Webhook → Gemini 호출 → 응답 추출 → Gmail 발송 → Google Sheets 기록 )와, 서비스계정 기반 인증(토큰 발급 방법: gcloud, Node 스크립트)을 단계별로 설명합니다. 워크플로우는 API 키 대신 서비스계정에서 발급한 Access Token(짧은 수명)을 사용하도록 설계되어 있습니다.

1) 준비물

  • n8n 계정(클라우드 또는 자체 호스팅)
  • Google Cloud 프로젝트
  • 서비스 계정(Service Account) JSON 키 파일 (roles: access to Generative API + Sheets + Gmail 필요)
  • gcloud CLI (테스트용 토큰 발급 시 권장) 또는 Node.js(자동화 스크립트용)
  • n8n에서 Gmail/Google Sheets 크레덴셜 설정 (OAuth 방식 또는 서비스 계정 연동)

2) 핵심 아이디어(동작 흐름)

  1. 외부에서 Webhook 호출 → n8n 워크플로우 시작
  2. 서비스 계정으로 Access Token 발급(수동 혹은 자동화 방식)
  3. HTTP Request 노드로 Gemini(apal) REST API 호출(Authorization: Bearer <ACCESS_TOKEN>)
  4. Function 노드로 응답 추출 및 포맷
  5. Gmail 노드로 발송, Google Sheets 노드로 발송 로그 저장

3) n8n Import용 워크플로우 JSON

아래 JSON을 그대로 복사 → n8n UI에서 Import from file/clipboard로 불러오세요. (노드 내에 있는 REPLACE_WITH_ACCESS_TOKEN 자리표시자를 실제 Access Token 또는 n8n 환경변수로 바꿔주세요)

{
  "name": "Gemini ServiceAccount Workflow (Webhook → Gemini → Gmail → Sheets)",
  "nodes": [
    {
      "parameters": {
        "path": "gemini-serviceagent",
        "responseMode": "lastNode",
        "options": {}
      },
      "id": "1",
      "name": "Webhook Trigger",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [240, 260]
    },
    {
      "parameters": {
        "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent",
        "method": "POST",
        "authentication": "headerAuth",
        "headerAuth": {
          "name": "Authorization",
          "value": "Bearer REPLACE_WITH_ACCESS_TOKEN"
        },
        "jsonParameters": true,
        "options": {},
        "body": {
          "contents": [
            {
              "parts": [
                {
                  "text": "You are an assistant. Given the user request, produce a concise reply in markdown. Input: {{$json.body.inputText || $json.inputText || $json.query || 'No input provided.'}}"
                }
              ]
            }
          ],
          "generation_config": {
            "max_output_tokens": 400
          }
        }
      },
      "id": "2",
      "name": "Gemini (HTTP Request)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [560, 260]
    },
    {
      "parameters": {
        "functionCode": "const body = items[0].json;\n// 안전하게 구조를 확인하고 텍스트 추출\nlet text = '';\ntry {\n  text = body.candidates?.[0]?.content?.parts?.[0]?.text || JSON.stringify(body);\n} catch (e) {\n  text = JSON.stringify(body);\n}\nreturn [{ json: { reply: text, raw: body } }];"
      },
      "id": "3",
      "name": "Extract Reply",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [820, 260]
    },
    {
      "parameters": {
        "fromEmail": "me",
        "toEmail": "{{$json.body?.email || $json.email || 'recipient@example.com'}}",
        "subject": "自动发出: Gemini 에이전트 응답",
        "text": "{{$json.reply}}",
        "additionalFields": {}
      },
      "id": "4",
      "name": "Gmail Send",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 1,
      "position": [1080, 180]
    },
    {
      "parameters": {
        "operation": "append",
        "sheetId": "REPLACE_WITH_SHEET_ID",
        "sheetRange": "Sheet1!A:C",
        "options": {},
        "columns": [
          {
            "column": "A",
            "value": "={{$now}}"
          },
          {
            "column": "B",
            "value": "={{$json.reply}}"
          },
          {
            "column": "C",
            "value": "={{$json.raw && JSON.stringify($json.raw).slice(0,200)}}"
          }
        ]
      },
      "id": "5",
      "name": "Google Sheets Append",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 1,
      "position": [1080, 340]
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Gemini (HTTP Request)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini (HTTP Request)": {
      "main": [
        [
          {
            "node": "Extract Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Reply": {
      "main": [
        [
          {
            "node": "Gmail Send",
            "type": "main",
            "index": 0
          },
          {
            "node": "Google Sheets Append",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

설명(중요):

  • Gemini (HTTP Request) 노드는 Authorization 헤더에 `Bearer REPLACE_WITH_ACCESS_TOKEN`가 들어가 있습니다. 이 자리에 실제 Access Token(예: ya29.<...>)을 넣거나, n8n의 환경변수/credentials로 대체하세요.
  • Google Sheets AppendsheetId를 실제 스프레드시트 ID로 바꿔야 합니다.
  • Gmail Send 노드는 n8n에서 미리 Gmail credentials를 설정해두어야 정상 작동합니다.

4) 서비스계정으로 Access Token 얻는 방법 (권장: gcloud CLI — 빠르고 안전)

가장 간단한 방법(테스트용)은 gcloud CLI를 사용하는 것입니다. 아래는 로컬에서 토큰을 얻는 방법입니다.

# 1) 서비스 계정 키 파일로 gcloud에 인증 (한 번만)
gcloud auth activate-service-account --key-file="/path/to/service-account.json"

# 2) Access Token 발급 (짧은 유효기간 토큰)
gcloud auth print-access-token

# 출력 예시:
# ya29.a0AfH6SMB... (이를 n8n HTTP Request의 Authorization 헤더에 넣으세요)
    

토큰은 일반적으로 ~1시간 정도 유효합니다. 운영 환경에서는 토큰을 주기적으로 재발급하거나 자동 갱신 로직을 구현해야 합니다.

5) 서비스계정 토큰 자동화 (Node.js 스크립트 예제)

운영에서 매번 수동으로 토큰을 붙여넣기보다, 다음과 같은 작은 서비스(또는 n8n 내부의 FunctionHTTP Request 조합)를 사용해 토큰을 자동으로 갱신하고 워크플로우 실행 시 최신 토큰을 주입하는 방법이 좋습니다. 아래는 Node.js에서 google-auth-library를 사용해 액세스 토큰을 얻는 예제입니다.

// getAccessToken.js
const { GoogleAuth } = require('google-auth-library');

async function getToken() {
  const auth = new GoogleAuth({
    keyFile: '/path/to/service-account.json',
    scopes: ['https://www.googleapis.com/auth/cloud-platform','https://www.googleapis.com/auth/userinfo.email']
  });
  const client = await auth.getClient();
  const accessToken = await client.getAccessToken();
  console.log(accessToken.token);
}

getToken().catch(console.error);
    

이 스크립트를 서버에서 실행하거나, CI/pipeline에서 주기적으로 돌려 n8n의 환경변수 또는 별도 비밀 저장소(예: Vault)에 갱신하면 안전하게 운영할 수 있습니다.

6) n8n에서 토큰을 안전하게 사용하는 방법 (권장 패턴)

  1. 환경 변수 사용: n8n을 실행하는 환경의 환경변수에 GEMINI_ACCESS_TOKEN을 저장하고 HTTP Request 노드에서 `Authorization: Bearer {{$env.GEMINI_ACCESS_TOKEN}}`로 참조.
  2. 외부 시크릿 스토어: HashiCorp Vault, AWS Secrets Manager 등에서 토큰을 관리하고 n8n에서 주기적으로 가져옴.
  3. 자동 갱신 워크플로우: 별도 n8n 워크플로우로 토큰 발급(예: Node 스크립트 호출 → token 변수에 저장) 후 주 워크플로우에서 참조.

7) Gmail/Sheets 크레덴셜 구성 팁

  • Gmail 노드: n8n의 OAuth2 연결을 사용하세요(개인 Gmail 테스트 시 'me'로 사용 가능). 프로덕션에서는 G Suite(Workspace) 서비스 계정을 통한 도메인 권한 위임(delegation) 구성 권장.
  • Google Sheets: 서비스 계정으로 편집 권한을 준 시트를 사용하면 서비스 계정 기반 접근이 가능합니다. 서비스 계정 이메일을 시트 공유 대상에 추가하세요.

8) 테스트 & 운영 체크리스트

  • Webhook을 호출하여 전체 플로우가 동작하는지 확인
  • Gemini 응답 구조( candidates → content → parts → text )가 예상대로인지 확인
  • 토큰 만료 시 자동 갱신 로직 작동 여부 확인
  • Sheets에 로그가 정상 기록되는지(중복/포맷) 확인
  • Gmail 발송 성공 여부와 스팸 처리를 모니터링
보안 경고: 서비스 계정 키 파일(.json)은 절대 공개 저장소에 올리지 마세요. 블로그, 스크린샷, 코드 예제에는 실제 키를 노출하지 마시고 마스킹된 예시만 사용하세요.

9) 다음 단계 제안

원하시면 제가 아래 작업을 바로 해드릴게요:

  • ① 위 JSON에서 REPLACE_WITH_ACCESS_TOKEN을 자동으로 갱신해 넣는 n8n 워크플로우(토큰 발급 워크플로우) 생성
  • ② Gmail 발송 템플릿(HTML) 자동화 및 이메일 구독자 필드 연동
  • ③ 서비스 계정 범위(roles) 최소화와 IAM 설정 가이드 문서 작성

n8n + Google Gemini로 AI 에이전트 구현하기 — 초보자용 상세 가이드

n8n + Google Gemini로 AI 에이전트 구현하기 — 초보자용 상세 가이드

n8n + Google Gemini로 AI 에이전트 구현하기 — 초보자용 상세 가이드

작성자: 지식인 질문답변 생성기 • 카테고리: AI 자동화 • 퍼머링크: /n8n-gemini-agent-guide

개괄(서론) — 왜 Google Gemini와 n8n인가? 🤖✨

요약: Google의 Gemini는 텍스트·멀티모달 생성, 함수 호출(function calling), 장기 컨텍스트 등 실무형 기능을 갖춘 LLM이며, n8n은 시각적 워크플로우로 다양한 서비스(메일, 시트, HTTP 등)를 연결해 에이전트를 손쉽게 만들 수 있습니다. 따라서 Gemini의 강력한 '두뇌'와 n8n의 '도구 연결력'을 합치면 코드 적은(또는 없는) 상태로도 실전형 자동화 에이전트를 빠르게 프로토타입하고 운영할 수 있습니다. :contentReference[oaicite:1]{index=1}

이 글은 (1) 핵심 개념 요약(표), (2) 단계별 구현 체크리스트·흐름도, (3) n8n에서의 구체 세팅(예: HTTP Request / Gemini 통합 노드 예제), (4) 사례 두 건, (5) 보안·운영 팁, (6) 요약·피드백 그래프로 구성됩니다. 필요하시면 즉시 n8n 워크플로우 JSON도 만들어 드립니다.

기·승 (도입 & 전개)

핵심 개념 표 (한눈에 보기) 🧭

구성요소역할n8n에서의 구현
두뇌 (Brain)추론·요약·함수 호출Google Gemini 노드 또는 HTTP Request → Gemini REST/SDK 호출(GenerateContent).
감각 (Sensors)외부 데이터 수집(뉴스, API, 이메일)HTTP Request / RSS / Gmail / SERP API 노드
기억 (Memory)보낸 기록·대화 컨텍스트 저장Google Sheets / PostgreSQL / Airtable 등 데이터베이스 노드
도구 (Actuators)행동(메일발송, CRM 업데이트)Gmail, Slack, HTTP Request, Google Sheets 노드

참고: Gemini API는 REST 및 여러 공식 SDK(파이썬, JS 등)를 제공하며, n8n은 공식 통합 또는 HTTP Request를 통해 Gemini와 연동할 수 있습니다. :contentReference[oaicite:2]{index=2}

단계별 체크리스트 (기 → 승) ✅

  • 🔹 목표 정의: 에이전트의 1가지 핵심 목적을 정한다(예: 매일 요약 전송).
  • 🔹 계정/키 준비: Google AI Studio(또는 Vertex AI)에서 Gemini API 키 발급. :contentReference[oaicite:3]{index=3}
  • 🔹 n8n 환경 준비: n8n 계정 또는 자체 호스팅, 필요한 크레덴셜 추가.
  • 🔹 간단 프로토타입: 수동 트리거로 Gemini 호출 테스트.
  • 🔹 메모리 설계: 중복 방지·전송 로그 저장 위치 결정.

간단 흐름도 — 초기 워크플로우 (기 → 승)

Trigger (Cron / Webhook) Fetch Data (News / API) Gemini (LLM) — Prompt / Function Calling Action Nodes (Gmail / Sheets)

참고 템플릿: n8n은 Gemini용 미리 만들어진 워크플로우 템플릿을 제공합니다(불러와서 키만 넣고 실행 가능). :contentReference[oaicite:4]{index=4}

둘째 글 — 기·승·전·결 (완전 구현 가이드)

기 — 문제 정의와 핵심 요구사항

예제 목표: 매일 아침 07:30특정 도시의 날씨 요약 + 긍정적 뉴스 2건을 자동으로 생성해 구독자에게 이메일로 보내는 에이전트를 만든다.

핵심 성공 지표: 전송 성공률, 중복율(중복 기사 재전송 방지), LLM 응답 적합도(사용자 클릭률) 등.

승 — 자세한 워크플로우 설계 및 n8n 세팅

  1. 트리거: Cron Trigger — 매일 07:30 (n8n Cron 노드)
  2. 데이터 수집: OpenWeatherMap(API)로 기상 데이터 수집 → News API(또는 SERP API)로 최근 뉴스 검색
  3. 중복 필터: Google Sheets에서 최근 전송 URL 검사 → 신규 기사만 선택
  4. LLM 호출 (Gemini): n8n의 Google Gemini 통합 노드 사용 또는 HTTP Request 노드로 Gemini REST 호출. (예: generateContent). :contentReference[oaicite:5]{index=5}
  5. 함수 호출(Function Calling): 복잡한 작업(예: 기사 메타데이터 추출)을 Gemini의 함수 호출 기능으로 구조화된 JSON으로 받아 처리. (참고: Google의 function calling 가이드). :contentReference[oaicite:6]{index=6}
  6. 포맷·후처리: AI 응답을 마크다운/HTML로 포맷 → 사용자 이메일 템플릿 생성
  7. 전송 & 기록: Gmail 노드로 발송 → Google Sheets에 전송 로그(타임스탬프·기사 URL) 기록

n8n에서 Gemini 호출 예시 (HTTP Request 노드 설정)

아래 예시는 n8n의 HTTP Request 노드에서 직접 Gemini REST를 호출하는 최소 예시(cURL 기반 REST와 동일한 요청)를 보여줍니다. (문서의 REST 예시 참조) :contentReference[oaicite:7]{index=7}

POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
Headers:
  Content-Type: application/json
  x-goog-api-key: {{GEMINI_API_KEY}}   // 또는 쿼리 ?key=API_KEY 로도 가능

Body (raw JSON):
{
  "contents": [
    {
      "parts": [
        { "text": "San Francisco의 오늘 날씨 한 줄 요약과 최근 24시간의 긍정적 뉴스 2건을 1문장 요약과 원문 링크 포함해 마크다운으로 작성해줘." }
      ]
    }
  ],
  "generation_config": {
    "max_output_tokens": 400
  }
}
      

팁: n8n의 Google Gemini 전용 노드를 사용하면 인증·키 관리를 더 편리하게 할 수 있습니다. n8n 공식 통합 문서를 참고하세요. :contentReference[oaicite:8]{index=8}

전 — 가드레일(안전)과 비용·성능 고려

  • 안전·콘텐츠 정책: Gemini의 사용 정책과 안전 설정(safetySettings)을 요청에 포함해 불허 콘텐츠 생성을 방지하세요. :contentReference[oaicite:9]{index=9}
  • 토큰·비용 최적화: 응답 길이 제한, thinking budget 조정(느린 'thinking' 기능 끄기)으로 비용·지연 최소화. :contentReference[oaicite:10]{index=10}
  • 재시도·Rate Limit: 외부 API 호출 실패 시 백오프(retry) 로직을 설계.
  • 보안: API 키는 n8n Credentials(환경 변수)로 저장하고, 로그에 민감정보가 남지 않도록 필터링.

결 — 배포·모니터링·학습 루프

배포 후에는 매일 실행 로그를 수집해(성공·실패·응답시간) 모니터링 대시보드를 운영하세요. 또한 Google Sheets에 '보낸 기사'를 저장해 중복을 방지하고, 주간 성능(열람·클릭률)을 보고해 프롬프트·필터·데이터 소스 개선에 반영합니다.

프롬프트(시스템/유저) & 프롬프트 엔지니어링 예시

System Prompt:
You are a concise morning newsletter assistant.
- Goal: Provide a one-line weather summary for {{city}} and 2 positive news items (headline + 1-sentence summary + source URL).
- Format: Markdown mini-email. Use neutral tone, avoid speculation.
- Constraint: Check 'sent_log' sheet; skip URLs already sent.

User Prompt:
"오늘 날짜 기준으로 {{city}}의 날씨 요약과 지난 24시간 내 긍정적 뉴스 2건을 마크다운으로 작성해줘."
      

프롬프트에 '체크리스트'나 '출력 JSON 스키마'를 명시하면 Function Calling으로 구조화된 응답(예: [{"title":"", "summary":"", "url":""}, ...])을 받을 수 있어 후처리가 쉬워집니다. :contentReference[oaicite:11]{index=11}

테스트 & 디버깅 체크리스트

  • ✅ 수동 실행으로 각 노드 출력(특히 Gemini 응답) 확인
  • ✅ 중복 필터(시트 조회) 작동 확인
  • ✅ 실패 시 Slack/메일 알림 수신 테스트
  • ✅ 비용: 하루/주 단위 요청량 기반 시뮬레이션

사례 연구 (Case Studies) — 구체 예시 2개 📚

사례 1: 콘텐츠 큐레이터 에이전트

목표: 지정 키워드 기반으로 유익한 블로그·뉴스를 매일 자동 큐레이션해 편집자에게 전달.

구현: n8n Cron → SERP API로 키워드 검색 → Gemini에 요약·카테고리 요청(Function Calling으로 JSON 반환) → Google Sheets에 저장 → 편집자에게 이메일.

성과: 편집자 조사시간 70% 감소, 콘텐츠 아이디어 발굴 가속화.

사례 2: 고객지원 AI 에이전트 (Inbound 자동화)

목표: 이메일로 들어온 FAQ성 문의를 분류하고, 자주 묻는 질문은 자동응답, 복잡한 케이스는 티켓 생성.

구현: Gmail 트리거 → Gemini로 분류(감정·우선순위) → 단순 문의는 템플릿 응답(자동 발송), 복잡한 케이스는 CRM에 티켓 생성 → 로그 기록.

성과: 1차 처리 자동화로 평균 응답시간 단축, 고객 만족도 개선.

운영 팁 요약

  • 작게 시작(한 가지 목적), 로그 기록을 필수로
  • Function Calling을 활용해 구조화된 응답을 받아 후처리 자동화
  • 비용-성능 밸런스: 모델·토큰 수 조절

핵심 요약 & 피드백 그래프 ✅

핵심 요약

  • Gemini는 함수 호출, 멀티모달, REST/SDK 모두 지원하는 강력한 LLM입니다. :contentReference[oaicite:12]{index=12}
  • n8n은 Gemini 통합 또는 HTTP Request로 연결해 에이전트를 시각적 워크플로우로 구성할 수 있습니다. :contentReference[oaicite:13]{index=13}
  • 작게 시작하고(핵심 목적 1개), 메모리/중복필터/가드레일을 설계하세요.

피드백 그래프 (초기 준비도)

Readiness 80%Prototype 60%Security 55%Monitoring 45%Cost Efficiency

Google apal(Gemini)로 AI 에이전트 만들기 — n8n 워크플로우 구현 가이드

```html Google apal(Gemini)로 AI 에이전트 만들기 — n8n 워크플로우 구현 가이드
실전 튜토리얼

Google apal(Gemini)로 AI 에이전트 만들기 — n8n 워크플로우 구현 가이드

작성자: 지식인 질문답변 생성기 • 카테고리: AI 자동화 • 퍼머링크: /google-apal-agent-workflow

1. 들어가며 — 무엇을 만들 것인가?

이 글은 Google의 Generative AI(Gemini/PaLM, 이하 'apal') API를 사용해 n8n 기반 AI 에이전트를 만드는 실전 워크플로우 가이드입니다. 목표는 인증 설정 → n8n 트리거 → apal 호출 → 응답 후처리 → 도구 연동 → 배포까지 초보자도 따라 할 수 있도록 단계별로 설명하는 것입니다.

핵심 사용 사례 예: 매일 아침 날씨 + 긍정 뉴스 요약 발송, 이메일 자동 분류 및 티켓 생성, 캘린더 자동 일정 등록 등.

2. 전체 워크플로우 개요

에이전트의 구성은 다음 4가지 핵심 요소로 정리됩니다.

구성요소역할n8n에서의 구현
Brain추론·생성 (apal / Gemini)HTTP Request 또는 n8n의 Gemini 통합 노드
Sensors입력 수집 (Webhook, Gmail, RSS)Webhook / Gmail / HTTP Request
Memory대화·이력 저장Google Sheets / PostgreSQL / Airtable
Tools행동 실행 (메일 전송, 캘린더)Gmail / Google Calendar / Slack 노드

3. 단계별 구현 가이드

Step 1. Google API 키(또는 서비스 계정) 발급

  1. Google Cloud Console 또는 AI Studio 접속 → 프로젝트 생성
  2. API 사용 설정: Generative Language API (또는 Gemini 관련 API) 활성화
  3. 인증 방식 선택:
    • 개발/테스트: API Key (간단하지만 권한 제어 제한)
    • 프로덕션: 서비스 계정(권장) — JSON 키 파일을 발급받아 사용

환경변수 예시: export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"

Step 2. n8n 기본 워크플로우 만들기 (구성 요소)

  1. Webhook Trigger: 외부 요청(또는 테스트 호출)으로 워크플로우 시작
  2. HTTP Request (apal 호출): Gemini/PaLM REST 엔드포인트에 POST
  3. Function / Set 노드: LLM 응답에서 필요한 텍스트 추출·정리
  4. 도구 노드: Gmail(발송), Google Sheets(로그/메모리), Calendar(일정 생성)
  5. Cron 노드 (선택): 스케줄러를 이용한 자율 실행 설정

apal(Gemini) 호출 — HTTP Request 노드 예시

{
  "method": "POST",
  "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=AIzaSyD-FAKEKEYEXAMPLE1234567",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "contents": [
      {
        "parts": [
          {"text": "오늘의 샌프란시스코 날씨 한 줄 요약과 긍정 뉴스 2건을 마크다운 형식으로 작성해줘."}
        ]
      }
    ],
    "generation_config": {
      "max_output_tokens": 400
    }
  }
}

※ 실제 환경에서는 위 URL의 API Key를 환경변수로 관리하세요. 서비스계정 사용 시 OAuth/서비스 계정 토큰 방식으로 인증합니다.

Step 3. 응답 후처리 (Function 노드 예시)

// n8n Function node
return [{
  json: {
    reply: items[0].json.candidates?.[0]?.content?.parts?.[0]?.text || "No reply"
  }
}];

Step 4. 메모리(로그) 저장 — Google Sheets 예시

전송한 기사 URL, 전송일시, 사용자 ID 등을 Google Sheets에 기록해 중복 전송을 방지하고 분석에 활용합니다.

Step 5. 도구 연동 — Gmail 발송 예시

Function 노드에서 생성한 마크다운/HTML을 Gmail 노드의 본문으로 넣어 자동 발송합니다. 발송 성공 여부는 동일 시트에 기록하세요.

Step 6. 스케줄 및 자율성

n8n의 Cron 노드를 활용해 매일 정해진 시간에 워크플로우를 실행하면 사용자 입력 없이 자동으로 동작하는 에이전트가 됩니다.

4. 테스트 & 디버깅 체크리스트

  • Webhook을 직접 호출해 전체 플로우 수동 테스트
  • HTTP Request의 응답 구조(candidates → content → parts)를 콘솔/로그로 확인
  • 중복 필터(시트 조회)가 예상대로 동작하는지 점검
  • API Key 및 서비스 계정 권한(범위, IAM)이 올바른지 검증
  • 실패 시 재시도 로직과 알림(Slack/Gmail) 설정

5. 실전 활용 시나리오(예시)

사례 A — 매일 아침 뉴스·날씨 요약 발송

Flow: Cron → Weather API → News API → apal로 요약 → 중복 필터 → Gmail 발송 → Sheets 기록

사례 B — 이메일 분류 및 자동응답

Flow: Gmail Trigger → apal로 분류/요약 → 단순 문의 자동응답(Gmail) / 복잡 케이스는 티켓 생성 → Sheets 기록

6. 운영 팁 & 보안 고려사항

  • API 키 관리: 절대 코드나 공개 리포지토리에 키를 직접 넣지 마세요. n8n Credentials나 환경변수로 관리.
  • 비용 관리: 모델 선택, 토큰 제한, 응답 길이 조절로 비용을 최적화하세요.
  • 가드레일: system prompt에 제약을 명확히 넣어 불필요한 행동을 제한합니다.
  • 로그·모니터링: 실패율, 응답시간, 중복율을 모니터링해 프롬프트·필터를 조정하세요.

7. 요약 및 다음 단계

요약: Google apal(Gemini)을 n8n에 연결하면 코드 적은(또는 없는) 상태로도 강력한 에이전트를 설계·운영할 수 있습니다. 핵심은 작게 시작 → 로그 저장 → 가드레일 적용 → 점진적 확장입니다.

다음 글에서는 이 워크플로우를 실제로 import 가능한 n8n JSON(예: Webhook → Gemini → Function → Gmail → Sheets)을 제공하고, 서비스계정 기반 인증 예제를 상세히 다뤄드리겠습니다.

```

n8n으로 AI 에이전트 구현하기 — 초보자용 상세 가이드

n8n으로 AI 에이전트 구현하기 — 초보자용 상세 가이드

n8n으로 AI 에이전트 구현하기: 초보자용 상세 가이드

작성자: 지식인 질문답변 생성기 • 카테고리: AI 자동화 • 퍼머링크: /n8n-ai-agent-guide

개괄 (서론) — 왜 n8n으로 AI 에이전트인가? 🤖✨

**요약:** AI 에이전트는 단순 챗봇을 넘어서 스스로 판단하고 행동하는 자율 시스템입니다. n8n은 코드 없이 시각적 워크플로우로 이러한 에이전트를 구성할 수 있어, 개발 경험이 없는 사람도 비즈니스 자동화를 구현할 수 있습니다.

이 글은 (1) 핵심 개념 요약, (2) 단계별 구현 가이드, (3) 실전 체크리스트와 사례, (4) 요약 및 피드백 그래프까지 포함합니다. ⭐

첫째 글 — 기·승 (도입 & 전개): 문제 정의와 초기 워크플로우 설계


핵심 개념 표 (한눈에 보기) 🧭

구성요소기능n8n에서의 구현 방법
두뇌 (Brain)추론·결정·프롬프트 실행AI → OpenAI/LLM 노드 연결 (API Key 사용)
감각 (Sensors)외부 입력(이메일, 캘린더, Webhook)Webhook/Gmail/Google Calendar 노드
기억 (Memory)대화·상태 기록Google Sheets / DB 노드 또는 n8n 로컬 파일
도구 (Tools)행동(발송, 수집, 업데이트)Gmail, HTTP Request, Google Sheets, Slack 노드 등

단계별 체크리스트 (기 → 승) ✅

  • 🔹 목표 정의: 에이전트의 목적(예: 매일 뉴스 요약 발송)을 명확히 한다.
  • 🔹 트리거 선정: 수동(Webhook) 또는 스케줄 트리거 선택.
  • 🔹 LLM 연결 테스트: OpenAI API Key를 발급해 n8n에 연결한다.
  • 🔹 메모리 구조 설계: 어떤 데이터(대화, 전송 이력)를 어디에 저장할지 결정.
  • 🔹 도구 우선순위 결정: 최소한의 도구만 우선 연결(예: Gmail + Google Sheets).

간단 흐름도 — 초기 워크플로우 (기 → 승)

Trigger (Webhook / Schedule) Input Preprocessing / Validator AI Agent (LLM) Action Nodes (Gmail / Sheets / HTTP)

중요 팁 (초기 단계)

  • 작게 시작: 핵심 한 가지 목적에 집중하세요. ✅
  • 로그 남기기: 실패 원인 추적을 위해 각 노드의 출력 기록을 남기세요.

둘째 글 — 기·승·전·결 (완전 구현 가이드)

기 — 문제 설정과 목표 정의

에이전트의 목적을 "매일 아침 특정 지역 날씨 + 긍정 뉴스 2개 요약 발송"으로 가정합니다. 핵심 KPI는 정시 전송률, 중복 방지, 사용자 클릭률입니다.

승 — 상세 워크플로우 설계 및 구성

  1. 트리거: Cron Trigger — 매일 07:30 실행.
  2. 센서: OpenWeatherMap API 호출 → 최신 기상 데이터 수집.
  3. 검색 도구: Google Search API(또는 뉴스 API)로 긍정 뉴스 2건 검색.
  4. 두뇌: n8n AI Agent 노드에 시스템 프롬프트와 함께 기사 요약 요청.
  5. 메모리: Google Sheets에 '보낸 기사 URL' 저장 → 중복 필터링.
  6. 후처리: AI 포매팅 노드로 마크다운 이메일 템플릿 생성.
  7. 출력: Gmail 노드로 사용자에게 발송 / Google Sheets에 기록.

전 — 가드레일과 안전장치

에이전트가 잘못된 행동을 하지 않도록 시스템 프롬프트에 제한을 둡니다. 예:

System Prompt:
You are an assistant whose only job is to prepare a short morning newsletter.
- Goal: Provide weather summary for San Francisco and 2 positive news headlines with 1-sentence summaries.
- Format: Markdown mini-email. No speculative claims. Include source URLs.
- Constraint: Do not send any content already present in the 'sent_log' sheet.
      

결 — 배포, 로깅, 모니터링

  • 배포: n8n Cloud 또는 자체 호스팅에서 워크플로우 활성화.
  • 로깅: 각 실행의 결과를 Sheets/DB에 기록. 실패 시 Slack 알림.
  • 모니터링: 주간 성능 대시보드 (성공률, 평균 처리 시간, 중복율).

실제 n8n 노드 구성 예시 (요약 코드/세팅)

1. Trigger: Cron (0 30 7 * * *)  // 매일 07:30
2. HTTP Request: OpenWeatherMap API (city=San Francisco)
3. HTTP Request: News API / Google Custom Search
4. AI Agent Node: system prompt + user prompt (기사 요약)
5. Function Node: 중복 필터 (Sheets 체크)
6. Gmail Node: 이메일 발송
7. Google Sheets Node: 전송 로그 기록
      

도구 목록 (우선순위별)

  1. OpenAI / 다른 LLM (두뇌)
  2. Google Sheets (메모리/로그)
  3. Gmail / Slack (통신/알림)
  4. News API / Google Search (감각/정보 수집)
  5. OpenWeatherMap (감각/날씨)

테스트 & 디버깅 체크리스트

  • ✅ 트리거 수동 실행으로 각 노드의 출력 확인
  • ✅ LLM 응답 길이 및 포맷 검증
  • ✅ 중복 기사 필터 동작 확인
  • ✅ 실패 시 알림 (Slack/Gmail) 수신 테스트

사례 연구 (Case Studies) — 구체 예시 2개 📚

사례 1: 내부 리드 자동화 에이전트

목표: 웹 폼 제출을 감지하여 리드 정보를 CRM에 적재하고, 영업팀에 요약 이메일 전송.

구현요약: Webhook 트리거 → 데이터 검증(Function) → LLM로 리드 성격 분류 → Google Sheets/CRM API로 저장 → Slack/Gmail로 알림.

성과: 리드 응답 속도 단축 60%, 수동 입력 작업 80% 감소.

사례 2: 소셜 미디어 모니터링 에이전트

목표: 브랜드 관련 긍정 트윗을 매일 모아 마케팅팀에 전달.

구현요약: Twitter API로 멘션 수집 → LLM으로 감성 분류(긍정/부정) → 긍정 포스트 선정 → Google Sheets에 저장 및 이메일 전송.

성과: 브랜드 긍정 컨텐츠 수집 자동화로 캠페인 인사이트 발굴 시간 단축.

운영 팁 & 문제 해결

  • LLM 토큰 비용 관리: 요약 길이 제한과 temperature 조절로 비용 최적화.
  • Rate Limit 주의: API 호출 빈도와 오류 재시도 로직을 설계하세요.
  • 보안: API 키는 환경 변수로 관리하고 실행 로그에 민감정보가 남지 않도록 필터링.

핵심 요약 & 피드백 그래프 ✅

핵심 요약

  • 에이전트는 두뇌, 감각, 기억, 도구의 조합으로 구성됩니다.
  • n8n은 노코드 워크플로우로 LLM 기반 에이전트를 빠르게 프로토타입화하기에 적합합니다.
  • 작게 시작하고(핵심 목적 1개), 로그·가드레일을 반드시 설계하세요.

다음 단계 제안: 실제 API 키로 샘플 워크플로우를 만들어 보세요. 필요하면 저는 바로 예제 JSON/노드 스택을 드릴게요.

피드백 그래프

Readiness 80% Prototype 60% Security 55% Monitoring 45% Cost Efficiency

추가 리소스 & 자주 쓰는 프롬프트 템플릿

프롬프트 템플릿(간단):

User Prompt:
"오늘 날짜 기준으로 샌프란시스코의 간단한 날씨 한 줄 요약과, 지난 24시간 내 긍정적 뉴스 2개를 1문장 요약+원문 링크 포함해 마크다운으로 작성해주세요."
      

노드 템플릿(요약): Cron → HTTP(OpenWeather) → HTTP(News API) → AI Agent → Function(필터) → Gmail → Sheets

더 깊은 구현 예제(노드별 JSON, 실제 n8n 워크플로우 파일)를 원하시면 요청해주세요. 이 글은 초보자가 따라할 수 있도록 단계별로 구성되었습니다. ✅