G: 안녕하세요, 데이터를 다루고 자동화에 관심이 많은 여러분! 🙋♀️ 혹시 수많은 데이터 속에서 의미 있는 통계를 추출하거나, 복잡한 데이터를 간결하게 요약해야 할 때마다 막막함을 느끼신 적은 없으신가요? n8n을 사용하고 계시다면, 이런 고민을 한 번에 해결해 줄 강력한 도구를 이미 손에 쥐고 계신 겁니다. 바로 Aggregation 노드죠!
이번 글에서는 n8n의 Aggregation 노드가 무엇인지, 어떻게 작동하는지 기본 개념부터 차근차근 알아보고, 실생활에서 바로 적용할 수 있는 10가지 실제 사용 사례를 통해 데이터 가공의 핵심을 완벽하게 파헤쳐 보겠습니다. 이 글을 끝까지 읽으시면, 여러분은 더 이상 데이터 앞에서 좌절하지 않고 원하는 인사이트를 손쉽게 뽑아낼 수 있는 데이터 마법사가 될 겁니다! ✨
🚀 n8n Aggregation 노드, 왜 중요할까요?
n8n은 다양한 애플리케이션과 서비스를 연결하여 워크플로우를 자동화하는 강력한 도구입니다. 이 과정에서 우리는 수많은 데이터를 주고받게 되는데요, 대부분의 경우 원본 데이터는 그대로 사용하기 어렵거나, 특정 기준으로 요약하고 집계해야 할 필요가 있습니다. 이때 Aggregation 노드가 빛을 발합니다!
Aggregation 노드는 특정 필드를 기준으로 데이터를 그룹화하고, 각 그룹에 대해 합계, 평균, 개수, 최소값, 최대값 등 다양한 계산을 수행할 수 있게 해줍니다. 마치 엑셀의 피벗 테이블처럼, 복잡한 데이터를 원하는 형태로 가공하여 의미 있는 정보로 변환해주는 것이죠.
🔍 Aggregation 노드의 기본 원리 이해하기
Aggregation 노드는 크게 두 가지 핵심 개념으로 작동합니다.
- 그룹화 (Group By): 어떤 필드를 기준으로 데이터를 묶을지 정의합니다. 예를 들어, ‘상품 종류’별로 매출을 집계하고 싶다면 ‘상품 종류’ 필드를 Group By 필드로 설정합니다. 이 필드를 지정하지 않으면 모든 입력 데이터를 하나의 그룹으로 간주하여 전체 데이터에 대한 집계를 수행합니다.
- 집계 연산 (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 By
와 Sum
을 결합하여 특정 기준별로 숫자 필드의 합계를 계산합니다.
- 시나리오: 각 고객이 지금까지 총 얼마를 지출했는지 파악하여 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! 🎉🚀