G: 안녕하세요, 데이터 처리 자동화에 관심 있는 모든 분들! 🚀
복잡한 데이터를 깔끔하게 요약하고 싶으신가요? 수많은 이벤트 로그에서 의미 있는 통계를 뽑아내고 싶으신가요? n8n을 사용하고 계신다면, ‘Aggregation’ 노드가 바로 여러분의 고민을 해결해 줄 열쇠입니다! 🔑
n8n의 Aggregation 노드는 방대한 데이터를 그룹화하고, 합계, 평균, 개수 등 다양한 방식으로 집계하여 필요한 정보만 추출할 수 있게 해주는 강력한 도구입니다. 이 글에서는 Aggregation 노드를 100% 활용하여 데이터 처리 전문가로 거듭날 수 있는 10가지 실전 가이드를 상세한 예시와 함께 알려드릴게요. 자, 그럼 시작해볼까요? 💪
1. Aggregation 노드, 왜 중요할까요? (개념 이해) 💡
데이터는 많지만, 그 안에서 진짜 의미를 찾아내기란 쉽지 않습니다. 예를 들어, 하루에 수천 건의 고객 주문 데이터가 들어온다고 생각해 보세요. “오늘 총 판매액은 얼마지?”, “가장 많이 팔린 상품 카테고리는 뭐지?”, “평균 주문 금액은?” 같은 질문에 답하려면 데이터를 요약해야 합니다.
Aggregation 노드는 바로 이 ‘요약’ 작업을 자동화해 줍니다. 스프레드시트의 ‘피벗 테이블’ 기능과 비슷하다고 생각하시면 돼요. 특정 기준으로 데이터를 묶고(Group By), 그 묶음 안에서 원하는 계산(Operation)을 수행하여 새로운 의미를 가진 데이터를 만들어냅니다.
주요 기능:
- Group By: 데이터를 묶을 기준을 설정합니다. (예:
productCategory
,customerID
) - Operation: 어떤 집계 연산을 할지 선택합니다. (예: SUM, AVG, COUNT)
- Value: 어떤 필드의 값을 집계할지 선택합니다. (예:
price
,quantity
)
2. ‘그룹화 기준 (Group By)’ 마스터하기 🧑🤝🧑
Aggregation 노드의 핵심은 바로 ‘Group By’입니다. 어떤 기준으로 데이터를 묶느냐에 따라 결과가 완전히 달라지죠.
실전 예시: 여러분의 워크플로우에 다음과 같은 주문 데이터가 들어온다고 가정해 봅시다.
[
{ "orderId": "A001", "productCategory": "Electronics", "price": 50000, "quantity": 1 },
{ "orderId": "A002", "productCategory": "Books", "price": 15000, "quantity": 2 },
{ "orderId": "A003", "productCategory": "Electronics", "price": 20000, "quantity": 3 },
{ "orderId": "A004", "productCategory": "Books", "price": 30000, "quantity": 1 },
{ "orderId": "A005", "productCategory": "Home Goods", "price": 10000, "quantity": 5 }
]
여기서 productCategory
별로 총 판매액을 알고 싶다면, ‘Group By’ 필드에 productCategory
를 추가하면 됩니다.
- n8n 설정:
Group By
:productCategory
Value
:price
(또는price * quantity
와 같은 표현식)Operation
:Sum
이렇게 설정하면 ‘Electronics’, ‘Books’, ‘Home Goods’ 각각의 총 판매액을 쉽게 얻을 수 있습니다. 🔍
3. 핵심 집계 연산자 활용법 (SUM, AVG, COUNT, MIN, MAX) 📊
Aggregation 노드는 다양한 기본적인 집계 연산을 제공합니다. 각 연산자의 사용법과 그 쓰임을 정확히 이해하는 것이 중요합니다.
- SUM (합계): 숫자 필드의 모든 값을 더합니다.
- 예시:
productCategory
별price
의Sum
(총 판매액) ➕
- 예시:
- AVG (평균): 숫자 필드의 값들의 평균을 계산합니다.
- 예시:
productCategory
별price
의Average
(평균 주문 가격) ➗
- 예시:
- COUNT (개수): 그룹 내 항목의 총 개수를 셉니다. (중복 포함)
- 예시:
productCategory
별orderId
의Count
(카테고리별 주문 건수) #️⃣
- 예시:
- MIN (최소값): 숫자 필드에서 가장 작은 값을 찾습니다.
- 예시:
productCategory
별price
의Min
(가장 저렴한 상품 가격) 📉
- 예시:
- MAX (최대값): 숫자 필드에서 가장 큰 값을 찾습니다.
- 예시:
productCategory
별price
의Max
(가장 비싼 상품 가격) 📈
- 예시:
팁: Value
필드에는 간단한 수식도 넣을 수 있습니다. 예를 들어 {{ $json.price * $json.quantity }}
와 같이 입력하여 총액을 계산한 후 Sum
할 수 있습니다.
4. 텍스트 및 배열 데이터 집계 (Concatenate, Unique) 📝
Aggregation 노드는 숫자 데이터뿐만 아니라 텍스트나 배열 데이터에도 유용하게 사용될 수 있습니다.
- Concatenate (문자열 연결): 그룹 내의 모든 문자열 값을 하나로 연결합니다.
- 예시:
customerID
별로 주문한productName
들을 콤마로 연결하여 한 문자열로 보고 싶을 때.Group By
:customerID
Value
:productName
Operation
:Concatenate
Separator
:,
(콤마와 공백)- ➡️ 결과: “상품A, 상품B, 상품C” 🔗
- 예시:
- Unique (고유값 추출): 그룹 내에서 중복을 제외한 고유한 값들만 배열로 반환합니다.
- 예시: 특정
campaignID
에 참여한 모든customerEmail
중 중복되지 않는 이메일 주소 목록을 뽑고 싶을 때.Group By
:campaignID
Value
:customerEmail
Operation
:Unique
- ➡️ 결과:
["user1@email.com", "user2@email.com"]
✅
- 예시: 특정
5. 출력 형식 (Output Format) 이해하기: 리스트 vs. 단일 객체 📦
Aggregation 노드의 Output Format
설정은 다음 노드로 전달되는 데이터의 구조를 결정하므로 매우 중요합니다.
- List of Objects (기본값): 각 그룹별로 하나의 객체를 생성하고, 이 객체들을 배열 형태로 반환합니다.
- 예시:
productCategory
별 총 판매액을 집계했을 때,[ { "productCategory": "Electronics", "totalSales": 70000 }, { "productCategory": "Books", "totalSales": 45000 }, { "productCategory": "Home Goods", "totalSales": 50000 } ]
- 다음 노드에서 각 카테고리별 데이터를 개별적으로 처리하거나 반복(Iterate)해야 할 때 유용합니다. ➡️
- 예시:
- Single Object (단일 객체): 모든 그룹의 집계 결과를 하나의 단일 객체 안에 포함시킵니다. (주로 Group By를 사용하지 않고 전체 데이터에 대한 단일 집계를 할 때 유용)
- 예시: 전체 주문의 총 판매액만 알고 싶을 때 (Group By 없이).
{ "totalSalesOverall": 165000 }
- 워크플로우의 특정 지점에서 단 하나의 요약된 값만 필요할 때 사용합니다. 🎯
- 예시: 전체 주문의 총 판매액만 알고 싶을 때 (Group By 없이).
6. 다중 필드 동시 집계하기 (Advanced Aggregation) ✨
하나의 Aggregation 노드에서 여러 개의 집계 연산을 동시에 수행할 수 있습니다. 이는 워크플로우를 간결하고 효율적으로 만드는 데 큰 도움이 됩니다.
실전 예시:
productCategory
별로 총 판매액
, 평균 주문 수량
, 그리고 주문 건수
를 한 번에 알고 싶다면?
- n8n 설정:
Group By
:productCategory
Add Operation
클릭 후 반복:Output Name
:totalSales
,Value
:{{ $json.price * $json.quantity }}
,Operation
:Sum
Output Name
:avgQuantity
,Value
:quantity
,Operation
:Average
Output Name
:orderCount
,Value
:orderId
,Operation
:Count
결과 예시:
[
{ "productCategory": "Electronics", "totalSales": 70000, "avgQuantity": 2, "orderCount": 2 },
{ "productCategory": "Books", "totalSales": 45000, "avgQuantity": 1.5, "orderCount": 2 }
// ...
]
이렇게 하면 여러 개의 Aggregation 노드를 사용하지 않고도 복합적인 분석을 한 번에 처리할 수 있습니다. 🚀
7. 데이터 필터링과 함께 사용하기 (사전 준비) 🧹
Aggregation 노드는 입력된 모든 데이터를 처리합니다. 따라서 특정 조건에 맞는 데이터만 집계하고 싶다면, Aggregation 노드 이전에 IF
노드나 Filter
노드를 사용하여 데이터를 필터링하는 것이 매우 중요합니다.
실전 예시: “vip” 등급 고객의 구매 내역만 집계하고 싶을 때.
- 워크플로우 순서:
- 데이터 소스 노드 (예: Read Google Sheet, HTTP Request)
- IF 노드 또는 Filter 노드:
customerTier
필드가"vip"
인 경우만 다음으로 전달 - Aggregation 노드: 필터링된 “vip” 고객의 데이터에 대해 집계 수행
이렇게 사전 필터링을 하면 불필요한 데이터를 처리하지 않아도 되어 워크플로우의 효율성을 높이고, 원하는 결과만을 정확히 얻을 수 있습니다. ✂️
8. 누락된 데이터 및 오류 처리 🚫
현실의 데이터는 완벽하지 않습니다. 값이 누락되거나 예상치 못한 형식으로 들어올 수 있죠. Aggregation 노드는 이러한 데이터를 어떻게 처리하는지 이해하는 것이 중요합니다.
- 숫자 연산 (SUM, AVG 등):
null
이나undefined
값은 일반적으로 무시하고 계산합니다. (즉, 0으로 간주하거나 계산에 포함하지 않음) - COUNT: 값이
null
이거나undefined
인 필드는 일반적으로 세지 않습니다. 즉, 값이 존재하는 항목의 개수를 셉니다. - Concatenate:
null
이나undefined
는 빈 문자열로 처리되거나 아예 무시될 수 있습니다.
팁: Aggregation 노드 이전에 Set
노드나 Code
노드를 사용하여 데이터를 클렌징하는 습관을 들이세요. 예를 들어, null
값을 0으로 채우거나, 문자열 필드의 빈 값을 특정 기본값으로 설정하는 등의 작업이 필요할 수 있습니다.
// 예시: price 필드가 null이면 0으로 설정
if ($json.price === null || $json.price === undefined) {
$json.price = 0;
}
데이터 클렌징은 정확한 집계 결과를 위한 필수 과정입니다. ⚠️
9. 대량 데이터 처리 성능 최적화 ⚡
수십만, 수백만 건의 데이터를 처리해야 할 때 Aggregation 노드의 성능이 중요해집니다.
- 필터링 선행: 위에서 언급했듯이, Aggregation 노드에 전달되는 데이터의 양을 최소화하는 것이 가장 중요합니다. 불필요한 데이터는 사전에 필터링하세요.
- 필요한 필드만 전달: 만약 데이터 소스에서 가져오는 데이터에 수십 개의 필드가 포함되어 있지만, Aggregation에 필요한 필드는 몇 개에 불과하다면,
Set
노드를 사용하여 필요한 필드만 남기고 나머지는 삭제하여 데이터 크기를 줄일 수 있습니다. - Code 노드와의 조합 고려 (고급): 매우 대량의 데이터를 매우 복잡한 방식으로 집계해야 하고 Aggregation 노드만으로 한계가 느껴진다면,
Code
노드에서 직접 JavaScript를 사용하여 집계 로직을 구현하는 것도 하나의 방법입니다. 하지만 일반적으로는 Aggregation 노드가 대부분의 경우에 충분히 효율적입니다.
10. 실전 활용 사례 💡
Aggregation 노드는 다양한 시나리오에서 빛을 발합니다. 몇 가지 실제 활용 사례를 통해 영감을 얻어보세요.
- CRM (고객 관계 관리):
customerID
별로 고객의총 구매 횟수 (Count)
,총 구매 금액 (Sum)
,마지막 구매 일자 (Max)
를 집계하여 고객별 활동 요약 보고서 생성. 🧑💻
- 이커머스 (전자상거래):
productCategory
별총 판매액 (Sum)
,평균 상품 가격 (Avg)
,가장 많이 팔린 상품 (Count of productID)
을 집계하여 상품 트렌드 분석. 🛍️shippingRegion
별주문 건수 (Count)
및평균 배송 시간 (Avg)
분석. 🚚
- IoT (사물 인터넷):
sensorID
별로평균 온도 (Avg)
,최고 습도 (Max)
,하루 데이터 전송 횟수 (Count)
를 집계하여 장비 상태 모니터링. 🌡️
- 마케팅 자동화:
campaignID
별클릭 수 (Sum)
,오픈율 (Avg)
,고유 이메일 주소 (Unique)
를 집계하여 마케팅 캠페인 성과 분석. 📈
- 로그 분석:
errorCode
별발생 횟수 (Count)
,최근 발생 시간 (Max)
을 집계하여 시스템 오류 보고서 생성. 🚨
마무리하며 🎉
n8n의 Aggregation 노드는 단순해 보이지만, 데이터를 요약하고 분석하는 데 있어 핵심적인 역할을 하는 강력한 도구입니다. 이 10가지 가이드를 통해 Aggregation 노드의 잠재력을 최대한 발휘하고, 복잡한 데이터도 손쉽게 다루는 데이터 처리 전문가로 거듭나시길 바랍니다!
직접 n8n 워크플로우를 만들면서 다양한 예시를 적용해 보고, 여러분의 비즈니스나 개인 프로젝트에 Aggregation 노드를 적극적으로 활용해 보세요. 궁금한 점이 있다면 언제든지 n8n 커뮤니티나 공식 문서를 참고하시길 권장합니다.
데이터 자동화의 여정을 응원합니다! Happy n8n’ing! ✨