안녕하세요, 자동화와 효율성에 목마른 여러분! 🚀 오늘은 오픈소스 자동화 플랫폼 n8n의 핵심에 대해 깊이 파고들어 볼 시간입니다. n8n은 수많은 노드를 제공하여 복잡한 워크플로우도 쉽게 구축할 수 있게 해주지만, 초보자에게는 어떤 노드부터 시작해야 할지 막막할 수 있습니다.
걱정 마세요! 이 글에서는 n8n 워크플로우를 만들 때 가장 기본적이지만 가장 강력한 힘을 발휘하는 핵심 노드들을 완벽하게 분석하고, 실제 예시와 함께 어떻게 활용할 수 있는지 자세히 알려드릴게요. 이 노드들만 제대로 이해해도 어떤 복잡한 자동화 아이디어도 현실로 만들 수 있는 탄탄한 기반을 다질 수 있을 거예요! 💪
1. 워크플로우의 시작점: 트리거 노드 (Trigger Nodes) ✨
모든 워크플로우는 특정 ‘이벤트’가 발생했을 때 시작됩니다. 이 이벤트를 감지하고 워크플로우를 실행시키는 것이 바로 트리거 노드입니다. n8n의 트리거 노드는 마치 워크플로우의 심장처럼 박동하며 데이터 흐름을 시작하죠.
-
✨ Start 노드
:- 역할: 워크플로우를 수동으로 실행하거나, 테스트 목적으로 사용할 때 가장 기본적인 트리거입니다.
- 활용 예시:
- 새로운 워크플로우를 만들고 로직을 테스트해보고 싶을 때 🛠️
- 특정 작업을 한 번만 수동으로 실행해야 할 때 (예: 긴급 데이터 정리) 🗑️
- 팁: 초기 개발 단계에서 데이터를 주입하여 다음 노드의 동작을 빠르게 확인할 수 있습니다.
-
🌐 Webhook 노드
:- 역할: 외부 서비스(웹사이트, 다른 자동화 도구, API 등)로부터 HTTP 요청을 받아 워크플로우를 시작합니다. 이는 n8n이 외부와 소통하는 가장 일반적인 방법 중 하나입니다.
- 활용 예시:
- CRM에서 새 고객 가입 알림을 받을 때: “고객이 웹사이트에 가입하면 CRM에서 n8n Webhook으로 데이터를 보내고, n8n이 환영 이메일 발송 자동화” 📧
- 결제 시스템에서 결제 완료 알림을 받을 때: “결제가 성공하면 Webhook으로 알림을 받아 주문 처리 워크플로우 시작” 💰
- 폼 제출 시 데이터 수신: “구글 폼이나 자체 제작 폼 제출 시, Webhook으로 데이터 받아 저장” ✍️
- 팁: Webhook URL은 노드가 활성화되면 자동으로 생성되며, 외부 서비스에 이 URL을 등록하여 사용합니다. GET, POST 등 다양한 HTTP 메서드를 지원합니다.
-
⏰ Cron 노드
:- 역할: 정해진 시간 간격(매일, 매주, 매시 등)으로 워크플로우를 자동으로 실행합니다.
- 활용 예시:
- 매일 아침 9시에 재고 현황 보고서 생성: “Cron 노드를 ‘매일 9시’로 설정하고, 데이터베이스에서 재고 정보를 가져와 이메일로 발송” 📊
- 매주 월요일 엑셀 파일 자동 백업: “Cron 노드로 매주 월요일에 파일 시스템에 접근하여 중요한 파일 백업” 💾
- 매시간 특정 웹사이트의 최신 뉴스 스크랩: “Cron 노드로 매시간 웹 스크래핑 워크플로우 실행” 📰
- 팁: Cron 표현식(예:
0 9 * * *
는 매일 9시)을 통해 매우 정교한 스케줄링이 가능합니다.
2. 데이터의 변환 마법사: Set 노드 🪄
Set 노드는 워크플로우 내에서 데이터를 조작하는 데 사용되는 가장 기본적인 노드입니다. 들어오는 데이터를 기반으로 새로운 데이터를 생성하거나, 기존 데이터를 수정, 삭제할 수 있습니다.
- 역할:
- 새로운 필드를 추가합니다.
- 기존 필드의 값을 변경합니다.
- 필요 없는 필드를 제거합니다.
- 정적(Static) 값 또는 동적인 표현식(Expression)을 사용하여 데이터를 설정합니다.
- 활용 예시:
- 고객 이름 포맷 변경: “이름 필드(예: ‘김철수’)를 받아 ‘김철수님’으로 변경하고 싶을 때”
- Set 노드를 추가하고
customerName
필드를{{$json.name}}님
으로 설정합니다.
- Set 노드를 추가하고
- 불필요한 민감 정보 제거: “API 응답에서 필요 없는 비밀번호나 토큰 정보를 제거하여 다음 노드로 넘어가지 않도록 할 때”
- Set 노드에서 ‘Keep Only’ 옵션을 사용하여 필요한 필드만 남기거나, ‘Remove’ 옵션으로 특정 필드를 제거합니다.
- 고정 값 추가: “모든 주문 데이터에 ‘처리 상태: 대기중’이라는 필드를 추가하고 싶을 때”
- Set 노드에서
status
필드를 추가하고 값을Pending
으로 설정합니다.
- Set 노드에서
- 데이터 타입 변환: “문자열 형태의 숫자를 실제 숫자로 변환하여 계산에 사용하고 싶을 때”
- Set 노드에서
itemCount
필드를{{parseInt($json.itemCount)}}
와 같이 변환합니다.
- Set 노드에서
- 고객 이름 포맷 변경: “이름 필드(예: ‘김철수’)를 받아 ‘김철수님’으로 변경하고 싶을 때”
- 팁:
Set
노드와 함께Expressions
를 사용하면 더욱 강력한 데이터 조작이 가능합니다.{{ }}
중괄호 안에 JavaScript 문법을 사용하여 동적으로 값을 설정할 수 있습니다.
3. 조건에 따른 흐름 제어: IF 노드 🚦
IF 노드는 워크플로우의 흐름을 조건에 따라 분기하는 데 사용됩니다. 특정 조건이 참(True)일 때와 거짓(False)일 때 다른 경로로 워크플로우를 진행시킬 수 있어 매우 중요합니다.
- 역할: 입력 데이터가 설정된 조건을 만족하는지 확인하고, 그 결과에 따라 두 개의 다른 출력 경로(True, False) 중 하나로 데이터를 보냅니다.
- 활용 예시:
- 결제 금액에 따른 VIP 처리: “결제 금액이 10만원 이상이면 VIP 고객으로 분류하여 추가 할인 쿠폰 발송, 아니면 일반 고객으로 처리”
- IF 노드에서
amount >= 100000
조건을 설정합니다. True 경로에는 ‘쿠폰 발송’ 노드를, False 경로에는 ‘일반 처리’ 노드를 연결합니다.
- IF 노드에서
- 이메일 주소 유효성 검사: “사용자가 입력한 이메일 주소에
@
기호가 포함되어 있는지 확인”- IF 노드에서
{{$json.email.includes('@')}}
와 같은 조건을 설정합니다. True는 유효한 이메일, False는 잘못된 이메일로 처리합니다.
- IF 노드에서
- 재고 부족 시 알림: “상품의 재고 수량이 5개 미만이면 담당자에게 이메일 알림”
- IF 노드에서
stockQuantity < 5
조건을 설정합니다. True 경로에 '이메일 발송' 노드를 연결합니다.
- IF 노드에서
- 결제 금액에 따른 VIP 처리: “결제 금액이 10만원 이상이면 VIP 고객으로 분류하여 추가 할인 쿠폰 발송, 아니면 일반 고객으로 처리”
- 팁: 여러 조건을 동시에 검사해야 할 때는 AND, OR 논리 연산자를 사용할 수 있습니다. 복잡한 조건은 JavaScript 표현식을 사용하여 작성할 수도 있습니다.
4. 데이터 합치기의 달인: Merge 노드 🔗
Merge 노드는 이름 그대로 여러 개의 입력 경로로부터 오는 데이터를 하나로 합치는 역할을 합니다. 서로 다른 데이터를 결합하여 하나의 통합된 정보로 만들 때 유용합니다.
- 역할: 두 개 이상의 입력 노드에서 오는 데이터를 결합합니다.
- 주요 모드:
- Append: 첫 번째 입력 데이터 뒤에 두 번째 입력 데이터를 단순히 덧붙입니다.
- Combine: 두 입력의 데이터를 각 항목별로 옆으로 합칩니다 (키가 다를 때 유용).
- Merge By Key: 특정 '키' 필드의 값이 같은 항목들을 찾아 데이터를 합칩니다. 가장 강력하고 자주 사용되는 모드입니다.
- 활용 예시:
- 고객 정보와 주문 이력 병합: “고객의 기본 정보(이름, 주소)를 가져오는 노드와, 해당 고객의 주문 이력을 가져오는 노드를 연결하여 한 사람의 모든 정보를 취합”
- Merge By Key 모드를 사용하고,
customerId
필드를 키로 설정합니다.
- Merge By Key 모드를 사용하고,
- A팀과 B팀의 보고서를 하나로 합치기: “두 부서에서 각각 생성된 보고서 데이터를 받아서 최종 통합 보고서를 만들 때”
- Append 모드를 사용하여 단순히 두 보고서 데이터를 합칩니다.
- 외부 API에서 받은 추가 정보 통합: “기존 고객 데이터에 외부 날씨 API에서 가져온 지역별 날씨 정보를 합쳐 개인화된 알림을 보낼 때”
- Merge By Key 또는 Combine 모드를 사용하여 고객 ID 또는 위치 정보를 키로 연결합니다.
- 고객 정보와 주문 이력 병합: “고객의 기본 정보(이름, 주소)를 가져오는 노드와, 해당 고객의 주문 이력을 가져오는 노드를 연결하여 한 사람의 모든 정보를 취합”
- 팁: Merge By Key 모드는 관계형 데이터베이스의 JOIN과 유사한 방식으로 작동합니다. 정확한 키 매칭이 중요합니다.
5. 대량 데이터 처리 전문가: Split In Batches / Item Lists 노드 ✂️🧩
대량의 데이터를 처리할 때, 한 번에 모든 데이터를 처리하기보다는 효율적인 방식으로 나누어 처리해야 할 경우가 많습니다. 이때 Split 노드들이 빛을 발합니다.
✂️ Split In Batches 노드
:- 역할: 대량의 데이터를 설정한 '배치(Batch)' 크기만큼 나누어 처리합니다. 예를 들어, 1000개의 이메일 발송 시 100개씩 10번에 걸쳐 보내는 식으로 활용합니다.
- 활용 예시:
- 대량 이메일 발송 제한 우회: “이메일 서비스 제공자가 한 번에 보낼 수 있는 이메일 수에 제한이 있을 때, 데이터를 나누어 보내기”
- Split In Batches 노드를 사용하여 100개씩 묶어 다음 이메일 발송 노드로 보냅니다.
- API 호출 속도 제어: “초당 호출 제한이 있는 API를 사용할 때, 호출 간격에 맞춰 데이터를 나눠서 보내기”
- Split In Batches와 함께 'Wait' 노드를 사용하여 다음 호출까지 대기 시간을 둡니다.
- 대량 이메일 발송 제한 우회: “이메일 서비스 제공자가 한 번에 보낼 수 있는 이메일 수에 제한이 있을 때, 데이터를 나누어 보내기”
🧩 Split In Item Lists 노드
:- 역할: 입력 데이터 내에 배열(Array) 형태로 포함된 항목들을 개별 항목으로 분리하여 각각을 독립적으로 처리할 수 있게 합니다.
- 활용 예시:
- 단일 주문 내 여러 상품 처리: “하나의 주문 데이터에 여러 개의 상품(items)이 배열 형태로 들어있을 때, 각 상품별로 재고를 차감하거나 배송 정보를 처리”
- Split In Item Lists 노드로
items
배열을 개별 상품 항목으로 분리합니다.
- Split In Item Lists 노드로
- 설문 응답 내 다중 선택 질문 처리: “설문조사에서 여러 개의 답변이 배열로 들어왔을 때, 각 답변을 개별적으로 분석”
- Split In Item Lists 노드로 각 답변을 분리하여 통계 처리 노드로 보냅니다.
- 단일 주문 내 여러 상품 처리: “하나의 주문 데이터에 여러 개의 상품(items)이 배열 형태로 들어있을 때, 각 상품별로 재고를 차감하거나 배송 정보를 처리”
- 팁: Split In Batches는 데이터 덩어리를 나누는 것이고, Split In Item Lists는 데이터 내부의 배열 항목을 개별 데이터로 분리하는 것입니다.
6. 만능 연결고리: HTTP Request 노드 📡
n8n이 제공하는 특정 서비스(Slack, Notion, Google Sheets 등) 노드가 없을 때, 또는 더욱 세밀한 제어가 필요할 때 HTTP Request 노드는 어떤 외부 서비스와도 연결할 수 있는 만능 도구입니다.
- 역할: 지정된 URL로 HTTP 요청(GET, POST, PUT, DELETE 등)을 보내고 응답을 받습니다. 대부분의 웹 API와 통신할 수 있습니다.
- 활용 예시:
- 외부 날씨 API에서 정보 가져오기: “특정 지역의 현재 날씨 정보를 가져와 워크플로우에 활용”
- GET 요청으로 날씨 API URL에 지역 정보를 파라미터로 보내고 응답을 받습니다.
- 사내 레거시 시스템에 데이터 전송: “구형 시스템이 REST API를 지원한다면, HTTP POST 요청으로 새로운 데이터를 전송”
- POST 요청으로 데이터를 JSON 또는 폼 데이터 형태로 보냅니다.
- 커스텀 웹훅으로 알림 보내기: “특정 이벤트 발생 시, 슬랙(Slack)이나 카카오톡 채널 등 전용 노드가 없는 서비스에 직접 메시지 전송”
- 해당 서비스의 웹훅 URL로 POST 요청을 보내고, 메시지 내용을 JSON 바디에 담아 보냅니다.
- 외부 날씨 API에서 정보 가져오기: “특정 지역의 현재 날씨 정보를 가져와 워크플로우에 활용”
- 팁:
- 인증(Authentication): API 키, Bearer 토큰 등 다양한 인증 방식을 지원합니다.
- 헤더(Headers):
Content-Type
,Authorization
등 필요한 헤더를 설정할 수 있습니다. - 바디(Body): POST/PUT 요청 시, 데이터를 JSON, XML, 폼 데이터 등으로 보낼 수 있습니다.
- 에러 처리를 위해 'Always Output Data' 옵션을 활성화하여 실패한 경우에도 데이터를 확인하는 것이 좋습니다.
7. 무한한 가능성의 열쇠: Code (Function) 노드 💻
n8n의 기본 노드들로는 복잡한 로직을 구현하기 어렵거나, 특정 라이브러리를 사용해야 할 때 Code 노드는 워크플로우에 직접 JavaScript 코드를 작성하여 기능을 확장할 수 있는 강력한 도구입니다.
- 역할: JavaScript 코드를 사용하여 입력 데이터를 변형하고, 복잡한 계산을 수행하며, 외부 라이브러리를 사용하는 등 커스텀 로직을 구현합니다.
- 활용 예시:
- 복잡한 세금 계산 로직 구현: “여러 변수에 따라 달라지는 복잡한 세금 계산을 직접 코드로 구현”
- Code 노드에서 입력 데이터를 받아 계산을 수행하고, 결과를 새로운 필드로 반환합니다.
- 데이터 정규화 및 클리닝: “이메일 주소에서 특정 패턴을 추출하거나, 텍스트 데이터에서 불필요한 공백을 제거하는 등 정규식을 이용한 데이터 처리”
- JavaScript의
RegExp
객체를 사용하여 데이터를 클리닝합니다.
- JavaScript의
- 커스텀 API 응답 처리: “특정 API 응답이 매우 복잡하여 일반 노드로 처리하기 어려울 때, 직접 파싱하여 원하는 데이터만 추출”
- JSON.parse(), forEach, map 등의 JavaScript 함수를 사용하여 데이터를 원하는 형태로 가공합니다.
- 고유 ID 생성: “특정 패턴에 따라 고유한 주문 번호를 생성해야 할 때”
Date.now()
,Math.random()
등을 조합하여 고유 ID를 생성합니다.
- 복잡한 세금 계산 로직 구현: “여러 변수에 따라 달라지는 복잡한 세금 계산을 직접 코드로 구현”
- 팁:
$json
객체를 통해 입력 데이터를 쉽게 접근할 수 있습니다. (예:return { json: { newField: $json.oldField + 1 } };
)- Node.js 환경에서 실행되므로,
console.log()
를 사용하여 디버깅할 수 있습니다. - npm 패키지를 추가하여 외부 라이브러리를 사용할 수도 있습니다 (단, 서버에 설치되어 있어야 함).
- 이 노드는 JavaScript에 대한 기본적인 이해가 필요합니다.
워크플로우를 더욱 강력하게 만드는 팁! 💡
위에 소개된 핵심 노드 외에도 n8n 워크플로우를 더욱 효율적이고 안정적으로 만들 수 있는 몇 가지 중요한 팁들이 있습니다.
-
⚠️ 에러 처리 (Try/Catch 노드 활용):
- 워크플로우 실행 중 발생할 수 있는 오류를 예상하고 처리하는 것은 매우 중요합니다.
Try/Catch
노드를 사용하여 특정 노드에서 에러가 발생했을 때 대체 경로로 워크플로우를 진행하거나, 에러 알림을 보낼 수 있습니다. - 예시: “API 호출 실패 시 슬랙으로 담당자에게 알림 보내기” 🔔
- 워크플로우 실행 중 발생할 수 있는 오류를 예상하고 처리하는 것은 매우 중요합니다.
-
🔍 디버깅 습관 (Execute Workflow & Test Data):
- 워크플로우를 개발할 때는 항상 작은 단위로 테스트하고, 각 노드의 출력 데이터를 확인하는 습관을 들이세요.
Execute Workflow
버튼을 눌러 테스트하고, 각 노드 아래의 Input/Output 탭을 통해 데이터가 어떻게 변하는지 추적하세요. Set
노드나Start
노드를 이용해 가상 데이터를 주입하여 특정 부분만 반복 테스트하는 것도 좋은 방법입니다. 🐛
- 워크플로우를 개발할 때는 항상 작은 단위로 테스트하고, 각 노드의 출력 데이터를 확인하는 습관을 들이세요.
-
💡 표현식 (Expressions) 활용:
{{ }}
중괄호를 사용하여 n8n의 강력한 표현식을 활용하세요. 이를 통해 다른 노드의 출력 데이터나 환경 변수 등을 동적으로 가져와 사용할 수 있습니다. 이는 n8n 워크플로우의 유연성을 극대화하는 핵심 요소입니다.- 예시: “이메일 제목에 고객 이름을 동적으로 삽입하기”
안녕하세요, {{$json.customerName}}님!
✍️
-
🏗️ 모듈화 및 재사용성:
- 복잡한 워크플로우는 여러 개의 작은 워크플로우로 나누어 관리하는 것이 좋습니다.
Execute Workflow
노드를 사용하여 다른 워크플로우를 호출하거나,Sub-workflow
기능을 활용하여 재사용 가능한 컴포넌트를 만들 수 있습니다. - 예시: “고객 이메일 유효성 검사”와 같은 공통 로직을 별도의 서브 워크플로우로 만들고 필요할 때마다 호출하기. 🔄
- 복잡한 워크플로우는 여러 개의 작은 워크플로우로 나누어 관리하는 것이 좋습니다.
결론 🎉
지금까지 n8n 워크플로우를 구성하는 데 있어 가장 핵심적인 노드들을 깊이 있게 살펴보았습니다. 트리거 노드로 시작점을 만들고, Set 노드로 데이터를 가공하며, IF 노드로 조건에 따른 흐름을 제어하고, Merge 노드로 데이터를 통합하며, Split 노드로 대량 데이터를 효율적으로 처리하고, HTTP Request 노드로 외부 세계와 소통하며, 마지막으로 Code 노드로 무한한 커스텀 로직을 구현하는 방법을 익혔습니다.
이 핵심 노드들에 대한 이해는 n8n을 마스터하기 위한 첫걸음이자 가장 중요한 단계입니다. 이 지식을 바탕으로 여러분은 어떤 자동화 아이디어든 구현해낼 수 있는 자신감을 얻으셨을 거예요.
이제 망설이지 말고, n8n을 열어 당신만의 자동화 여정을 시작해보세요! 처음에는 어렵게 느껴질 수 있지만, 하나씩 만들어가다 보면 어느새 복잡한 작업들을 효율적으로 처리하는 자신을 발견하게 될 것입니다. 궁금한 점이 있다면 언제든 n8n 커뮤니티나 문서를 참고하시고요!
행복한 자동화 여정 되시길 바랍니다! 🚀 D