본문 바로가기
won2dev-log
HomeArchiveTagsCategoriesAboutProjects
HomeArchiveTagsCategoriesAboutProjects
won2dev-logwon2dev-logwon2dev-log

비전공 개발자의 로그 | won2dev-log

Navigation
  • Home
  • Archive
  • About
  • Projects
Categories
  • Docs
  • TIL
  • Automation
  • Git · GitHub
  • Project
Tags
  • TIL
  • Java
  • Spring
  • Backend
  • n8n
더보기
About

기록을 거름 삼아 공유는 성장을 만든다.

LicensePrivacy
© won2dev 2026. All rights reserved.
Home›Automation› TIL - Google Sheet × n8n 데이터 합산 문제 해결
Automation

TIL - Google Sheet × n8n 데이터 합산 문제 해결

won2dev·2025년 09월 24일
#n8n#JavaScript#TIL

TIL - Google Sheet × n8n 데이터 합산 문제 해결

📌 문제 상황

  • Google Sheet에서 데이터를 n8n으로 가져올 때 Get row(s) 액션 사용
  • 시트 전체 데이터는 들어오지만, 실제 사용 시 맨 위 첫 번째 행만 인식되는 문제 발생
  • 특정 조건에 따라 합산 계산을 해야 했는데, 구조상 불가능해 보여 여러번 로직 변경시도

🔍 시도 과정

  • 처음에는 시트 구조가 합산을 지원하지 않는다고 의심
  • SQL 같은 별도 DB 도입 고민
  • Get row(s) 출력값(JSON 배열)을 확인 → 모든 데이터는 이미 들어와 있음
  • 문제는 “모든 행”이 아니라 첫 행만 다음 단계로 전달되도록 흐름이 짜여 있었음
  • 포기하고 직접 코드에서 합산 로직 처리 후 인풋되게 했지만, 로직이 지나치게 복잡해짐

✅ 해결 방법

  • n8n에서는 $items() 함수를 사용해 전체 배열을 가져오고, map(i => i.json)으로 데이터 추출
  • 이렇게 하면 모든 행을 순회하며 합산 계산 가능
  • 별도 DB나 시트 구조 변경 없이도 배열 순회만으로 합산 처리 성공

💻 코드 예시 (자바스크립트 합산 로직)

수정전

javascript
const expenseRecords = Array.isArray($node["Expense Records"].json)
? $node["Expense Records"].json
: [$node["Expense Records"].json];
const expenseRecords = Array.isArray($node["Expense Records"].json)
? $node["Expense Records"].json
: [$node["Expense Records"].json];

수정후

javascript
// Google Sheets 노드에서 전체 데이터 가져오기
const expenseRecords = $items("Expense Records", 0).map(i => i.json);

// 이번 달 기준
const now = new Date();
const thisMonth = now.getMonth();
const thisYear = now.getFullYear();

// 누적 변수
let monthSum = 0;

expenseRecords.forEach(row => {
    const rowDate = new Date(row.날짜 || row.date);
    if (!rowDate.getTime()) return;

    // 이번 달 데이터만 합산
    if (rowDate.getFullYear() === thisYear && rowDate.getMonth() === thisMonth) {
        monthSum += parseFloat(row.금액 || row.amount) || 0;
    }
});

return [{
    json: {
        월누적합: monthSum
    }
}];
// Google Sheets 노드에서 전체 데이터 가져오기
const expenseRecords = $items("Expense Records", 0).map(i => i.json);

// 이번 달 기준
const now = new Date();
const thisMonth = now.getMonth();
const thisYear = now.getFullYear();

// 누적 변수
let monthSum = 0;

expenseRecords.forEach(row => {
    const rowDate = new Date(row.날짜 || row.date);
    if (!rowDate.getTime()) return;

    // 이번 달 데이터만 합산
    if (rowDate.getFullYear() === thisYear && rowDate.getMonth() === thisMonth) {
        monthSum += parseFloat(row.금액 || row.amount) || 0;
    }
});

return [{
    json: {
        월누적합: monthSum
    }
}];

💡 느낀 점 및 배운 점

  • n8n에서 데이터가 들어와도 흐름 연결 방식 때문에 일부만 전달될 수 있다
  • $items()처럼 전체 배열을 코드에서 순회하는 방법으로 해결 가능하다
  • 불필요하게 로직을 복잡하게 만들기보다, 데이터 구조와 배열 순회 처리를 먼저 점검하는 것이 좋은 해결방법이다.
  • 문제 원인은 시트 구조가 아니라 n8n의 데이터 처리 방식이였다.

🏷️ 필수 키워드

TIL

n8n

GoogleSheet

JavaScript

JSON

데이터처리

자동화

공유하기
이전 글TIL – n8n AI 노드 JSON 전달 문제 해결다음 글 DORANGG - 리그 오브 레전드 AI 코칭 도우미 웹앱

목차

  • 📌 문제 상황
  • 🔍 시도 과정
  • ✅ 해결 방법
  • 💻 코드 예시 (자바스크립트 합산 로직)
  • 💡 느낀 점 및 배운 점
  • 🏷️ 필수 키워드

카테고리

Automation

태그

#n8n#JavaScript#TIL

최근 글

Git 요약 (1) - Rebase, Stash, Squash MergeTIL - MSA 핵심 요소 정리TIL - (4) Spring 어노테이션 정리: Mockito를 활용한 단위 테스트TIL - (3) Spring 어노테이션 정리: Lombok Getter, Setter와 생성자TIL - (2) Spring MVC와 WebFlux의 차이: 블로킹과 논블로킹