G: 데이터가 여기저기 흩어져 있어 골치 아프셨나요? 🤯 CRM 데이터는 고객 정보 시스템에, 마케팅 캠페인 결과는 스프레드시트에, 주문 내역은 또 다른 ERP 시스템에… 이렇게 파편화된 데이터는 분석과 활용을 어렵게 만듭니다. 하지만 n8n의 Merge 노드를 활용하면 이 모든 것을 깔끔하게 하나로 합칠 수 있습니다! ✨
오늘은 n8n의 강력한 Merge 노드를 심층적으로 분석하고, 다양한 활용 사례와 함께 여러분의 워크플로우를 한 단계 업그레이드할 수 있는 방법을 알려드릴게요. 이제 흩어진 데이터 때문에 골치 아플 일은 없을 거예요! 🚀
💡 n8n Merge 노드, 왜 필요할까요?
n8n Merge 노드는 여러 개의 개별 데이터 항목(item)을 하나의 통합된 데이터 항목으로 결합하거나, 특정 조건에 따라 데이터를 합치는 기능을 수행합니다. 마치 레고 블록을 조립하듯, 서로 다른 형태의 데이터를 논리적으로 연결하여 새로운 가치를 만들어내는 거죠.
주요 활용 시나리오:
- 데이터 통합: 여러 API에서 가져온 데이터를 하나로 합쳐 풍부한 데이터셋 만들기. 📊
- 데이터 보강: 고객 기본 정보에 구매 이력, 문의 내역 등 추가 정보를 붙여 고객 프로필 완성하기. 🤝
- 데이터 정제: 중복된 데이터를 제거하여 깔끔한 목록 만들기. 🧹
- 보고서 자동화: 여러 출처의 데이터를 모아 자동으로 보고서용 데이터 생성하기. 📈
🛠️ n8n Merge 노드의 핵심 모드 파헤치기
Merge 노드는 다양한 “모드(Mode)”를 제공하여 사용자가 원하는 방식으로 데이터를 합칠 수 있도록 합니다. 각 모드의 특징과 활용법을 자세히 알아볼까요?
1. Append (추가) ➕
- 설명: 가장 기본적인 모드로, 단순히 두 개 이상의 입력 데이터를 순서대로 이어 붙입니다. 별도의 조건 없이 모든 데이터를 한 줄로 나열한다고 생각하면 됩니다.
- 언제 사용할까요?
- 여러 파일에서 읽어온 데이터를 하나의 목록으로 합칠 때.
- 간단한 데이터 취합이 필요할 때.
- 예시:
- Input 1:
[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
- Input 2:
[{"id": 3, "name": "Charlie"}, {"id": 4, "name": "David"}]
- Output (Append 모드):
[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}, {"id": 3, "name": "Charlie"}, {"id": 4, "name": "David"}]
- Input 1:
2. Merge by Field (필드 기준으로 병합) 🔑
- 설명: 이 모드는 특정 필드(Key) 값을 기준으로 두 데이터셋을 연결하여 병합합니다. SQL의
JOIN
작업과 매우 유사하며, 가장 강력하고 자주 사용되는 모드입니다.- Join Field (병합 필드): 두 데이터셋에서 공통으로 존재하는 고유한 식별자 역할을 하는 필드입니다. (예:
customer_id
,order_number
) - Join On (병합 시 동작): 병합 필드 값이 일치할 때 어떻게 데이터를 처리할지 결정합니다.
Add Property
: 기존 데이터에 새로운 속성을 추가합니다. (가장 일반적)Replace
: 기존 속성 값을 새 값으로 교체합니다.Keep Old/New
: 일치하는 경우, 기존 값 또는 새로운 값 중 하나만 유지합니다.
- Result Mode (결과 모드): 병합된 결과를 어떻게 출력할지 설정합니다.
All matched (모두 일치)
: 병합 필드가 양쪽 데이터셋에 모두 존재하는 경우만 출력합니다. (SQL의 Inner Join)Only new (새로운 항목만)
: 두 번째 입력(Input 2)에서 병합 필드가 일치하는 항목만 출력합니다.Only old (기존 항목만)
: 첫 번째 입력(Input 1)에서 병합 필드가 일치하는 항목만 출력합니다.All unmatched (모두 불일치)
: 병합 필드가 양쪽에 모두 없는 항목만 출력합니다.All (모든 항목)
: 양쪽 데이터셋의 모든 항목을 시도하고, 일치하는 경우 병합하여 출력합니다. (SQL의 Full Outer Join과 유사)
- Join Field (병합 필드): 두 데이터셋에서 공통으로 존재하는 고유한 식별자 역할을 하는 필드입니다. (예:
- 언제 사용할까요?
- 고객 ID를 기준으로 고객 정보와 주문 정보를 합칠 때.
- 제품 ID를 기준으로 제품 상세 정보와 재고 정보를 합칠 때.
- 두 개의 다른 API 응답에서 특정 ID를 가진 데이터를 합쳐야 할 때.
- 예시 (Add Property + All matched):
- Input 1 (고객 정보):
[ {"customer_id": "C001", "name": "김철수", "city": "서울"}, {"customer_id": "C002", "name": "이영희", "city": "부산"} ]
- Input 2 (주문 정보):
[ {"order_id": "O001", "customer_id": "C001", "item": "노트북"}, {"order_id": "O002", "customer_id": "C003", "item": "마우스"}, // C003은 Input 1에 없음 {"order_id": "O003", "customer_id": "C002", "item": "키보드"} ]
- Output (Merge by Field, Join Field:
customer_id
, Join On:Add Property
, Result Mode:All matched
):[ { "customer_id": "C001", "name": "김철수", "city": "서울", "merged_data": { // `Output Item Name` 설정에 따라 이름 변경 가능 "order_id": "O001", "customer_id": "C001", "item": "노트북" } }, { "customer_id": "C002", "name": "이영희", "city": "부산", "merged_data": { "order_id": "O003", "customer_id": "C002", "item": "키보드" } } ]
- 팁:
Output Item Name
을 설정하면 병합된 데이터가 들어갈 속성 이름을 지정할 수 있어 가독성을 높일 수 있습니다. (예:order_info
)
- Input 1 (고객 정보):
3. Unique (고유 항목 추출) 💎
- 설명: 여러 입력에서 중복되는 항목을 제거하고 고유한 항목만 남깁니다. 특정 필드를 기준으로 중복을 제거할 수도 있고, 전체 항목의 동일성을 기준으로 제거할 수도 있습니다.
- 언제 사용할까요?
- 이메일 마케팅을 위한 중복 이메일 주소 제거. 🚫
- 여러 소스에서 수집된 고객 목록에서 고유한 고객만 추출.
- 로그 데이터에서 고유한 오류 코드만 확인할 때.
- 예시:
- Input 1:
[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}, {"id": 1, "name": "Alice"}]
- Input 2:
[{"id": 3, "name": "Charlie"}, {"id": 2, "name": "Bob"}]
- Output (Unique 모드,
id
필드 기준):[ {"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}, {"id": 3, "name": "Charlie"} ]
- Input 1:
4. Union (합집합) 🔗
- 설명:
Append
와Unique
모드를 합쳐놓은 것과 같습니다. 여러 입력 데이터를 모두 합친 다음, 그 안에서 중복되는 항목을 제거하고 최종적으로 고유한 항목들만 출력합니다. - 언제 사용할까요?
- 여러 부서에서 취합된 명단에서 중복을 제거하고 최종 참석자 목록을 만들 때.
- 서로 다른 이벤트 로그에서 발생한 고유한 이벤트 타입만 모으고 싶을 때.
- 예시:
- Input 1:
[{"fruit": "apple"}, {"fruit": "banana"}]
- Input 2:
[{"fruit": "banana"}, {"fruit": "orange"}]
- Output (Union 모드,
fruit
필드 기준):[ {"fruit": "apple"}, {"fruit": "banana"}, {"fruit": "orange"} ]
- Input 1:
📝 실전 워크플로우 예시: 고객 주문 데이터와 배송 정보 합치기
실제로 어떻게 Merge 노드를 활용하는지 단계별로 살펴볼까요? 고객의 주문 데이터와 배송 상태 데이터를 합쳐 하나의 통합된 주문 목록을 만드는 시나리오입니다.
시나리오:
쇼핑몰 시스템에서 가져온 주문 목록
과 배송 시스템에서 가져온 배송 상태
데이터를 주문 번호
를 기준으로 합쳐서, 고객에게 보낼 알림에 사용할 통합 데이터를 생성합니다.
워크플로우 구성:
- Start 노드: 워크플로우 시작.
- Set 노드 (Order Data): 가상의 주문 목록 데이터를 생성합니다.
- Set 노드 (Shipping Data): 가상의 배송 상태 데이터를 생성합니다.
- Merge 노드:
Order Data
와Shipping Data
를order_id
기준으로 병합합니다.
단계별 상세 설정:
1. Start 노드 🏁
- 기본 설정 그대로 둡니다.
2. Set 노드 (Order Data) 📦
- Add Value 를 클릭하여 아래와 같이 JSON 데이터를 입력합니다.
[ { "order_id": "ORD001", "customer_name": "김민준", "product": "무선 이어폰", "amount": 120000 }, { "order_id": "ORD002", "customer_name": "박서연", "product": "스마트 워치", "amount": 250000 }, { "order_id": "ORD003", "customer_name": "이도윤", "product": "블루투스 스피커", "amount": 80000 } ]
3. Set 노드 (Shipping Data) 🚚
- Add Value 를 클릭하여 아래와 같이 JSON 데이터를 입력합니다.
ORD001
은 배송 중,ORD002
는 배송 완료,ORD004
는 아직 배송 정보가 없는 주문입니다.[ { "order_id": "ORD001", "shipping_status": "배송 중", "tracking_number": "TRK12345" }, { "order_id": "ORD002", "shipping_status": "배송 완료", "tracking_number": "TRK67890" }, { "order_id": "ORD004", "shipping_status": "배송 준비 중", "tracking_number": null } ]
4. Merge 노드 🤝
- Mode:
Merge by Field
를 선택합니다. - Join Field:
order_id
입력 (양쪽 데이터셋의 공통 키). - Join On:
Add Property
선택 (기존 주문 데이터에 배송 정보를 새 속성으로 추가). - Output Item Name:
shipping_info
입력 (병합된 배송 정보가shipping_info
라는 이름으로 추가됩니다). - Result Mode:
All
선택 (양쪽 데이터에 존재하는 모든 주문을 대상으로 병합을 시도합니다. 매칭되지 않는 경우에도 해당 주문 정보는 유지됩니다.) -
실행 (Execute Workflow) 후 결과 확인:
[ { "order_id": "ORD001", "customer_name": "김민준", "product": "무선 이어폰", "amount": 120000, "shipping_info": { "order_id": "ORD001", "shipping_status": "배송 중", "tracking_number": "TRK12345" } }, { "order_id": "ORD002", "customer_name": "박서연", "product": "스마트 워치", "amount": 250000, "shipping_info": { "order_id": "ORD002", "shipping_status": "배송 완료", "tracking_number": "TRK67890" } }, { "order_id": "ORD003", "customer_name": "이도윤", "product": "블루투스 스피커", "amount": 80000, "shipping_info": {} // ORD003에 대한 배송 정보는 없으므로 비어있는 객체로 병합됨 } ]
이 결과에서
ORD003
은 배송 정보가 없지만,All
모드를 사용했기 때문에 주문 데이터는 유지되고shipping_info
는 빈 객체로 들어갑니다. 만약All matched
모드를 사용했다면ORD003
은 결과에서 제외되었을 것입니다. 이처럼Result Mode
설정이 최종 결과에 큰 영향을 미칩니다.
💡 Merge 노드 활용 팁 & 베스트 프랙티스
- 데이터 일관성 유지: 병합 필드(Join Field)의 데이터 타입과 형식이 양쪽 데이터에서 완전히 일치해야 정확하게 병합됩니다. (예:
order_id
가 한쪽은 숫자, 다른 쪽은 문자열이면 안 됨) 🔄 - 오류 처리: 병합 실패에 대비하여 오류 처리(Error Handling) 노드를 추가하는 것을 고려하세요. 특정 조건에서 병합이 되지 않는 경우, 별도로 처리해야 할 수 있습니다. 🚨
- 대용량 데이터 처리: 매우 큰 데이터셋을 병합할 때는 메모리 사용량에 주의해야 합니다. 가능하다면 데이터를 미리 필터링하거나 필요한 필드만 가져와서 병합 노드에 전달하는 것이 좋습니다. 🚀
Item Lists
노드와의 조합: Merge 노드만으로 부족할 경우,Item Lists
노드를 활용하여 특정 조건에 맞는 항목을 분리하거나, 매핑하는 등 더 복잡한 데이터 조작을 할 수 있습니다.Item Lists
는 주로 “데이터를 특정 기준으로 그룹화”하거나 “리스트 내부의 아이템을 조작”할 때 유용합니다.Code
노드의 활용: Merge 노드의 기능으로 커버할 수 없는 복잡한 병합 로직이나 데이터 변환이 필요한 경우,Code
노드(JavaScript)를 활용하여 직접 코드를 작성할 수 있습니다. 🧑💻
맺음말 🌈
n8n의 Merge 노드는 흩어진 데이터를 하나로 모으고, 의미 있는 인사이트를 도출하며, 효율적인 자동화 워크플로우를 구축하는 데 있어 필수적인 도구입니다. 단순히 데이터를 합치는 것을 넘어, 여러분의 비즈니스 데이터를 더욱 풍부하고 활용도 높게 만들어 줄 것입니다.
오늘 배운 Merge 노드의 다양한 모드와 활용 예시를 바탕으로 여러분의 워크플로우에 적용해보세요! 처음에는 복잡하게 느껴질 수 있지만, 몇 번의 시도와 함께 n8n의 진정한 힘을 경험하게 될 것입니다. 궁금한 점이 있다면 n8n 커뮤니티나 공식 문서를 참고하며 끊임없이 탐구해보세요! 행복한 자동화 생활 되세요! 🎉