일. 8월 17th, 2025

G: 안녕하세요, 데이터를 다루고 자동화에 관심이 많은 여러분! 🙋‍♀️ 혹시 수많은 데이터 속에서 의미 있는 통계를 추출하거나, 복잡한 데이터를 간결하게 요약해야 할 때마다 막막함을 느끼신 적은 없으신가요? n8n을 사용하고 계시다면, 이런 고민을 한 번에 해결해 줄 강력한 도구를 이미 손에 쥐고 계신 겁니다. 바로 Aggregation 노드죠!

이번 글에서는 n8n의 Aggregation 노드가 무엇인지, 어떻게 작동하는지 기본 개념부터 차근차근 알아보고, 실생활에서 바로 적용할 수 있는 10가지 실제 사용 사례를 통해 데이터 가공의 핵심을 완벽하게 파헤쳐 보겠습니다. 이 글을 끝까지 읽으시면, 여러분은 더 이상 데이터 앞에서 좌절하지 않고 원하는 인사이트를 손쉽게 뽑아낼 수 있는 데이터 마법사가 될 겁니다! ✨


🚀 n8n Aggregation 노드, 왜 중요할까요?

n8n은 다양한 애플리케이션과 서비스를 연결하여 워크플로우를 자동화하는 강력한 도구입니다. 이 과정에서 우리는 수많은 데이터를 주고받게 되는데요, 대부분의 경우 원본 데이터는 그대로 사용하기 어렵거나, 특정 기준으로 요약하고 집계해야 할 필요가 있습니다. 이때 Aggregation 노드가 빛을 발합니다!

Aggregation 노드는 특정 필드를 기준으로 데이터를 그룹화하고, 각 그룹에 대해 합계, 평균, 개수, 최소값, 최대값 등 다양한 계산을 수행할 수 있게 해줍니다. 마치 엑셀의 피벗 테이블처럼, 복잡한 데이터를 원하는 형태로 가공하여 의미 있는 정보로 변환해주는 것이죠.


🔍 Aggregation 노드의 기본 원리 이해하기

Aggregation 노드는 크게 두 가지 핵심 개념으로 작동합니다.

  1. 그룹화 (Group By): 어떤 필드를 기준으로 데이터를 묶을지 정의합니다. 예를 들어, ‘상품 종류’별로 매출을 집계하고 싶다면 ‘상품 종류’ 필드를 Group By 필드로 설정합니다. 이 필드를 지정하지 않으면 모든 입력 데이터를 하나의 그룹으로 간주하여 전체 데이터에 대한 집계를 수행합니다.
  2. 집계 연산 (Aggregation Operations): 그룹화된 데이터에 대해 어떤 계산을 수행할지 정의합니다. 다양한 연산이 가능하며, 각 연산은 새로운 출력 필드를 생성합니다.

주요 집계 연산자 살펴보기:

  • COUNT (개수): 그룹 내 항목의 총 개수를 계산합니다.
  • SUM (합계): 숫자 필드의 총합을 계산합니다.
  • AVERAGE (평균): 숫자 필드의 평균값을 계산합니다.
  • MIN (최소값): 숫자 또는 문자열 필드의 최소값을 찾습니다.
  • MAX (최대값): 숫자 또는 문자열 필드의 최대값을 찾습니다.
  • FIRST (첫 번째): 그룹 내 첫 번째 항목의 특정 필드 값을 가져옵니다.
  • LAST (마지막): 그룹 내 마지막 항목의 특정 필드 값을 가져옵니다.
  • JOIN (결합): 그룹 내 특정 필드 값들을 지정된 구분자로 연결하여 하나의 문자열로 만듭니다. (예: 쉼표로 이메일 주소 목록 만들기)
  • ARRAY (배열): 그룹 내 특정 필드 값들을 모아 하나의 배열로 만듭니다.
  • ARRAY_OF_OBJECTS (객체 배열): 그룹 내 모든 항목(객체)을 그대로 모아 하나의 배열로 만듭니다. 이는 가장 강력한 기능 중 하나로, 하위 항목들을 원본 형태로 유지하면서 그룹화할 때 유용합니다.

💡 10가지 실제 사용 사례로 배우는 Aggregation 노드 활용법

자, 이제 이론을 넘어서 실제 시나리오에 Aggregation 노드를 어떻게 적용할 수 있는지 10가지 예시를 통해 자세히 알아보겠습니다! 각 예시마다 입력 데이터, 설정 방법, 그리고 예상 출력 데이터를 함께 보여드릴게요.


1. 📋 전체 주문 건수 집계하기 (Total Count)

가장 기본적인 사용 사례입니다. 특정 조건 없이 모든 데이터의 총 개수를 알고 싶을 때 사용합니다.

  • 시나리오: 오늘 들어온 모든 주문이 총 몇 건인지 빠르게 파악하고 싶어요.
  • 입력 데이터 예시:
    [
      {"orderId": "ORD001", "amount": 100},
      {"orderId": "ORD002", "amount": 150},
      {"orderId": "ORD003", "amount": 200}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: 비워둡니다 (전체 데이터를 하나의 그룹으로).
    • Aggregation Operations:
      • Key: totalOrders
      • Operation: Count
      • Value: orderId (어떤 필드든 상관없지만, 존재하는 필드를 선택)
  • 예상 출력:
    [
      {"totalOrders": 3}
    ]
  • 활용 팁: 일일/주간/월간 데이터 보고서의 첫 줄에 전체 건수를 요약할 때 유용합니다. 📊

2. 💰 전체 매출액 계산하기 (Total Sum)

숫자 필드의 총합을 계산하여 전체 매출이나 총 비용 등을 집계할 때 사용합니다.

  • 시나리오: 오늘 발생한 총 매출액이 얼마인지 알고 싶어요.
  • 입력 데이터 예시:
    [
      {"orderId": "ORD001", "amount": 10000},
      {"orderId": "ORD002", "amount": 15000},
      {"orderId": "ORD003", "amount": 20000}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: 비워둡니다.
    • Aggregation Operations:
      • Key: totalRevenue
      • Operation: Sum
      • Value: amount
  • 예상 출력:
    [
      {"totalRevenue": 45000}
    ]
  • 활용 팁: 재무 보고서, 예산 집행 현황 등 금액 관련 집계에 필수적입니다. 💸

3. 📈 평균 구매 금액 산출 (Average)

특정 그룹 또는 전체 데이터의 평균값을 계산합니다.

  • 시나리오: 고객 한 명당 평균적으로 얼마를 구매하는지 알고 싶어요.
  • 입력 데이터 예시:
    [
      {"customer": "Alice", "purchaseAmount": 50000},
      {"customer": "Bob", "purchaseAmount": 30000},
      {"customer": "Alice", "purchaseAmount": 70000}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: 비워둡니다.
    • Aggregation Operations:
      • Key: averagePurchase
      • Operation: Average
      • Value: purchaseAmount
  • 예상 출력:
    [
      {"averagePurchase": 50000}
    ]
  • 활용 팁: 서비스 만족도, 제품 평가 점수, 일일 방문자 수 등 다양한 평균 지표를 구할 때 유용합니다. 🎯

4. 🏷️ 제품별 판매량 집계 (Grouped Count)

Group By 기능을 활용하여 특정 기준별로 항목의 개수를 집계합니다.

  • 시나리오: 어떤 제품이 가장 많이 팔렸는지 파악하기 위해 제품별 판매량을 집계하고 싶어요.
  • 입력 데이터 예시:
    [
      {"item": "Laptop", "price": 1200},
      {"item": "Mouse", "price": 25},
      {"item": "Laptop", "price": 1200},
      {"item": "Keyboard", "price": 75},
      {"item": "Mouse", "price": 25}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: item
    • Aggregation Operations:
      • Key: salesCount
      • Operation: Count
      • Value: item (어떤 필드든 상관없지만, 존재하는 필드를 선택)
  • 예상 출력:
    [
      {"item": "Laptop", "salesCount": 2},
      {"item": "Mouse", "salesCount": 2},
      {"item": "Keyboard", "salesCount": 1}
    ]
  • 활용 팁: 카테고리별 재고 현황, 지역별 고객 수, 부서별 프로젝트 수 등 다양한 분류별 집계에 활용됩니다. 📦

5. 🧑‍💻 고객별 총 지출액 계산 (Grouped Sum)

Group BySum을 결합하여 특정 기준별로 숫자 필드의 합계를 계산합니다.

  • 시나리오: 각 고객이 지금까지 총 얼마를 지출했는지 파악하여 VIP 고객을 선정하고 싶어요.
  • 입력 데이터 예시:
    [
      {"customerName": "Alice", "purchaseAmount": 10000},
      {"customerName": "Bob", "purchaseAmount": 5000},
      {"customerName": "Alice", "purchaseAmount": 20000},
      {"customerName": "Charlie", "purchaseAmount": 15000}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: customerName
    • Aggregation Operations:
      • Key: totalSpent
      • Operation: Sum
      • Value: purchaseAmount
  • 예상 출력:
    [
      {"customerName": "Alice", "totalSpent": 30000},
      {"customerName": "Bob", "totalSpent": 5000},
      {"customerName": "Charlie", "totalSpent": 15000}
    ]
  • 활용 팁: 고객 등급 분류, 마케팅 캠페인 타겟 설정 등에 활용됩니다. 🌟

6. 🌡️ 일별 최고/최저 온도 기록 (Min/Max)

데이터 내에서 가장 작은 값 또는 가장 큰 값을 찾아냅니다. 날짜, 숫자, 문자열 모두 가능합니다.

  • 시나리오: 특정 도시의 일별 최고 기온과 최저 기온을 알고 싶어요.
  • 입력 데이터 예시:
    [
      {"date": "2023-10-26", "location": "Seoul", "temperature": 15},
      {"date": "2023-10-26", "location": "Seoul", "temperature": 10},
      {"date": "2023-10-27", "location": "Seoul", "temperature": 18},
      {"date": "2023-10-27", "location": "Seoul", "temperature": 12}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: date
    • Aggregation Operations:
      • Key: minTemp, Operation: Min, Value: temperature
      • Key: maxTemp, Operation: Max, Value: temperature
  • 예상 출력:
    [
      {"date": "2023-10-26", "minTemp": 10, "maxTemp": 15},
      {"date": "2023-10-27", "minTemp": 12, "maxTemp": 18}
    ]
  • 활용 팁: 주식 시장의 최고/최저가, 시험 점수의 최고/최저점, 데이터 범위 확인 등에 사용됩니다. ⬇️⬆️

7. 📧 이벤트 참가자 이메일 목록 취합 (Join)

동일한 그룹에 속한 여러 문자열 값을 특정 구분자(Delimiter)로 연결하여 하나의 문자열로 만듭니다.

  • 시나리오: 특정 웨비나에 신청한 모든 참가자의 이메일 주소를 쉼표로 구분된 하나의 문자열로 모으고 싶어요.
  • 입력 데이터 예시:
    [
      {"webinarTitle": "n8n Deep Dive", "attendeeEmail": "alice@example.com"},
      {"webinarTitle": "n8n Deep Dive", "attendeeEmail": "bob@example.com"},
      {"webinarTitle": "Marketing Automation", "attendeeEmail": "charlie@example.com"}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: webinarTitle
    • Aggregation Operations:
      • Key: attendeeEmails
      • Operation: Join
      • Value: attendeeEmail
      • Delimiter: , (쉼표와 공백)
  • 예상 출력:
    [
      {"webinarTitle": "n8n Deep Dive", "attendeeEmails": "alice@example.com, bob@example.com"},
      {"webinarTitle": "Marketing Automation", "attendeeEmails": "charlie@example.com"}
    ]
  • 활용 팁: 특정 그룹의 사용자 ID, 제품 코드 등을 목록으로 만들거나, 이메일 발송을 위한 주소록을 생성할 때 유용합니다. 📧🔗

8. 🛍️ 주문별 구매 상품 목록화 (Array)

동일한 그룹에 속한 여러 항목의 특정 필드 값들을 배열 형태로 묶습니다.

  • 시나리오: 각 주문마다 어떤 상품들이 포함되어 있는지 목록으로 보고 싶어요.
  • 입력 데이터 예시:
    [
      {"orderId": "ORD001", "productName": "Laptop"},
      {"orderId": "ORD001", "productName": "Mouse"},
      {"orderId": "ORD002", "productName": "Keyboard"},
      {"orderId": "ORD002", "productName": "Monitor"}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: orderId
    • Aggregation Operations:
      • Key: products
      • Operation: Array
      • Value: productName
  • 예상 출력:
    [
      {"orderId": "ORD001", "products": ["Laptop", "Mouse"]},
      {"orderId": "ORD002", "products": ["Keyboard", "Monitor"]}
    ]
  • 활용 팁: 보고서에서 하위 항목 목록을 만들거나, 특정 데이터를 배열 형태로 다른 시스템에 전달할 때 활용됩니다. 📝

9. 📦 재고 품목별 세부 정보 집합 (Array of Objects)

동일한 그룹에 속한 모든 항목(객체)을 그대로 배열 형태로 묶습니다. 이는 Array 연산보다 훨씬 강력하여 원본 데이터의 구조를 유지하고 싶을 때 사용됩니다.

  • 시나리오: 창고별로 어떤 품목들이 재고로 남아 있는지, 각 품목의 상세 정보(수량, 위치 등)와 함께 보고 싶어요.
  • 입력 데이터 예시:
    [
      {"warehouse": "A", "itemCode": "ITEM001", "quantity": 10, "location": "Shelf 1"},
      {"warehouse": "A", "itemCode": "ITEM002", "quantity": 5, "location": "Shelf 2"},
      {"warehouse": "B", "itemCode": "ITEM003", "quantity": 20, "location": "Rack 1"}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: warehouse
    • Aggregation Operations:
      • Key: inventoryItems
      • Operation: Array of Objects
      • Value: (비워둡니다. Array of Objects는 전체 항목을 가져옵니다.)
  • 예상 출력:
    [
      {
        "warehouse": "A",
        "inventoryItems": [
          {"warehouse": "A", "itemCode": "ITEM001", "quantity": 10, "location": "Shelf 1"},
          {"warehouse": "A", "itemCode": "ITEM002", "quantity": 5, "location": "Shelf 2"}
        ]
      },
      {
        "warehouse": "B",
        "inventoryItems": [
          {"warehouse": "B", "itemCode": "ITEM003", "quantity": 20, "location": "Rack 1"}
        ]
      }
    ]
  • 활용 팁: 중첩된 JSON 구조를 생성하거나, 각 그룹에 대한 상세 정보를 다른 시스템으로 전달할 때 매우 유용합니다. 복잡한 보고서나 대시보드 데이터를 만들 때 강력한 기능을 제공합니다. 🗃️

10. 📊 프로젝트별 진행 상황 요약 (Multiple Operations & Complex Grouping)

여러 집계 연산을 함께 사용하여 하나의 그룹에 대해 다양한 통계를 추출합니다.

  • 시나리오: 각 프로젝트의 총 태스크 수, 완료된 태스크 수, 담당자 목록을 한눈에 보고 싶어요.
  • 입력 데이터 예시:
    [
      {"project": "Alpha", "taskName": "Design DB", "status": "Completed", "assignee": "Alice"},
      {"project": "Alpha", "taskName": "Develop API", "status": "In Progress", "assignee": "Bob"},
      {"project": "Alpha", "taskName": "Test UI", "status": "Completed", "assignee": "Alice"},
      {"project": "Beta", "taskName": "Plan Marketing", "status": "In Progress", "assignee": "Charlie"},
      {"project": "Beta", "taskName": "Create Content", "status": "Not Started", "assignee": "David"}
    ]
  • Aggregation 노드 설정:
    • Group By 필드: project
    • Aggregation Operations:
      • Key: totalTasks, Operation: Count, Value: taskName
      • Key: completedTasks, Operation: Count, Value: taskName (Filtering: {{ $json.status === 'Completed' }})
      • Key: assignees, Operation: Join, Value: assignee, Delimiter: ,, Unique Values: True
  • 예상 출력:
    [
      {
        "project": "Alpha",
        "totalTasks": 3,
        "completedTasks": 2,
        "assignees": "Alice, Bob"
      },
      {
        "project": "Beta",
        "totalTasks": 2,
        "completedTasks": 0,
        "assignees": "Charlie, David"
      }
    ]
  • 활용 팁: 이처럼 여러 집계 연산을 조합하면 복잡한 비즈니스 지표나 대시보드 데이터를 한 번에 생성할 수 있습니다. Filter 옵션까지 활용하여 특정 조건에 맞는 데이터만 집계하는 것도 가능합니다. 🛠️

✅ Aggregation 노드 사용 시 유용한 팁 & 베스트 프랙티스

  • 데이터 정제 및 준비: Aggregation 노드를 사용하기 전에 Set 노드나 Function 노드를 활용하여 데이터 형식을 통일하거나 필요한 필드만 남겨두는 것이 좋습니다. 예를 들어, 숫자 필드가 문자열로 들어오는 경우 Set 노드에서 {{ parseInt($json.amount) }} 와 같이 숫자로 변환해야 Sum이나 Average 연산이 제대로 작동합니다.
  • Group By 필드의 중요성: 어떤 필드를 Group By 할 것인가에 따라 결과의 형태가 완전히 달라집니다. 원하는 결과에 맞춰 신중하게 선택하세요.
  • Array of Objects 활용: 복잡한 계층 구조의 데이터를 다룰 때 Array of Objects는 매우 유용합니다. 상위 그룹 내에 하위 그룹의 상세 데이터를 포함시켜야 할 때 적극적으로 활용해보세요.
  • Unique Values 옵션 (Join, Array): Join이나 Array 연산 시 중복되는 값을 제거하고 싶다면, 해당 옵션을 활성화하여 깔끔한 결과를 얻을 수 있습니다.
  • 성능 고려: 매우 많은 양의 데이터를 Aggregation 노드로 처리할 경우, 워크플로우 성능에 영향을 줄 수 있습니다. 필요한 경우 Merge 노드 등을 활용하여 데이터를 분할 처리하거나, 데이터베이스 레벨에서 사전 집계를 고려하는 것도 방법입니다.
  • 디버깅: 예상과 다른 결과가 나온다면, Aggregation 노드 앞뒤에 NoOp 노드를 추가하여 중간 결과를 확인하거나, Set 노드를 사용하여 각 필드의 데이터 타입을 명확히 설정하는 것이 디버깅에 도움이 됩니다.

🌟 마치며: 데이터, 이제는 놀이터!

n8n의 Aggregation 노드는 단순한 집계를 넘어, 복잡한 데이터를 원하는 형태로 재구성하고 의미 있는 인사이트를 도출하는 데 필수적인 도구입니다. 10가지 실제 사용 사례를 통해 Aggregation 노드의 무한한 가능성을 엿보셨기를 바랍니다.

이제 데이터는 더 이상 두려운 존재가 아니라, 여러분이 마음껏 뛰어놀 수 있는 놀이터가 될 것입니다. 오늘 배운 내용을 바탕으로 여러분의 워크플로우를 더욱 강력하고 효율적으로 만들어 보세요! 궁금한 점이나 더 필요한 정보가 있다면 언제든지 댓글로 남겨주세요. Happy Automating! 🎉🚀

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다