소개
최근 Make 로 만든 로직을 n8n으로 그대로 이전해야 하는 이유가 생겨, 이번 기회에
동일 로직에 대해 Make와 n8n 을 각각 구현하면서 탐험을 해봐도 좋을 것 같아 정리해 봅니다.
1. 준비
1-1. SOLAPI 계정 및 알림톡 템플릿: 미리 회원가입하고, 알림톡 템플릿을 승인
Make에서는 SOLAPI 모듈을 이용해서 연결하면 금방 이용할 수 있습니다.
n8n: SOLAPI 노드가 존재하지 않아 REST API로 접속하기 함
1-2 n8n SOLAPI 인증 준비
인증을 위해 SOLAPI 사이트에서 Developer Hub 를 통해
api key와 api secret을 이용하여 signiture(HMAC 해시코드)를 만들어서 API 직접 호출해야 함.
이것을 위해 Self-hosting 하고 있는 서버에 Environment Variables 에
NODE_FUNCTION_ALLOW_BUILTIN crypto 모듈을 설정해 주어야 한다.
그리고 서버 재배포를 하면 n8n Code안에서 crypto를 이용해서 signiture를 만들 수 있다.
https://developers.solapi.com/references/authentication/api-key
구현
2-1 Make 구현
2-2 n8n 구현
스터디 시간 후 수정내용: 개발자F님이 조언해 주신, 굳이 Loop문을 쓰지 않고 구성하는 방법 정리
훨씬 쾌적해짐.
분명 item으로 들어왔는데 1개로 출력된다면 이 설정에서 각각 처리하도록 켜두면 됨
n8n에서 인증을 위한 작업
channalID와 TemplateID를 위해 airtable 에 저장해서 가져옴
SOLAPI 인증정보
// Node.js 내장 모듈 로드 const crypto = require('crypto'); // HMAC-SHA256 시그니처 생성 함수 function generateSignature(apiSecret, dateTime, salt) { const data = dateTime + salt; return crypto .createHmac('sha256', apiSecret) .update(data) .digest('hex'); } // Authorization 헤더 생성 함수 function createAuthHeader(apiKey, apiSecret) { const dateTime = new Date().toISOString(); const salt = crypto.randomBytes(16).toString('hex'); const signature = generateSignature(apiSecret, dateTime, salt); return `HMAC-SHA256 apiKey=${apiKey}, date=${dateTime}, salt=${salt}, signature=${signature}`; } // 실제 실행 (apiKey, apiSecret은 Code 노드에 변수 입력으로 받아야 함) const apiKey = $('SOLAPI 정보').first().json['API Key']; // 이전 노드에서 가져온 값 const apiSecret = $('SOLAPI 정보').first().json['API Secret']; // 이전 노드에서 가져온 값 const authHeader = createAuthHeader(apiKey, apiSecret); // 결과 리턴 return { json: { authHeader } };
3 필터 적용 차이
모듈사이에 체인 Add a filter로 적용
또는 IF 노드를 사용하는 방법도 고려해 볼 수 있다.
4. iterator 차이
Make는 회색으로 iterator 구간이 어디서 시작하고 끝나는지 명확하게 보임
n8n은 Loop Over Items를 이용해서 Loop모듈이 보임
Loop 의 시작이 명시적이지 않아 중복 loop의 경우 헷갈림
5. 에러 구현 차이 (SOLAPI 전송 실패의 경우)
개별 기능에서의 에러 처리
Make에서는 Error Handling 처리로 무시(Ignore)를 하거나, 테이블에 기록하거나 할 수 있음.
n8n 에서는 Settings에서 Error 발생시 처리 루틴를 명시화 할 수 있음
Senario와 workflow 자체의 에러 알림
Make에서는 시나리오가 실패했을 때 메일로 알려줌.
n8n에서는 workflow 차원의 error Handling을 지정할 수 있음
- workflow settings 화면
- error handler 화면
telegram 알림 화면
생각한 점.
Iterator 내에 Filter가 내가 원하게 아니었다.
데이타가 홍길동1, 홍길동2, 홍길동3 이 있을 때
나는 홍길동2만 통과하기를 바랬는데...n8n은 홍길동1이 통과 안되면 나머지도 통과가 안되었다.
이런 경우는 IF 노드를 사용하는 것이 원하는 동작이 되었음.
이름이 같다고 다 같은 것이 아니었음.No input data yet
앞에 내용이 보이지 않아요. 어떻게 해야하나스터디 시간에 댕댕이 멍멍님과 개발자 F님이 알려주신 내용 적어둠
PIN으로 데이타를 고정하는 방법: 데이타를 고정하는 용도 개발하는 도중에 유용함.
그러나 실 서비스 타임에는 사용하면 안됨Product 게시된 경우, Executions에서 Debug editor 로 들어가면 에러 발생시 데이타를 모두 가져와서 Editor 모드로 들어가므로 훨씬 쉽게 에러 수정이 가능함.
3 n8n으로는 그룹 전송이 가능해서 확장이 가능한 것이 좋았습니다.
Make의 세상과 n8n의 세상이 같은 듯 하면서도 다른 부분이 많다.
익숙한 세상을 벗어나 새로움 속으로~!
모르는 것에 부끄러움 없이 물어볼 수 있어서 얼마나 든든한가.
이들은 또 왜 이리 아낌없이 주는가
그냥 에러가 아니라 실제 운영하면서 겪은 일들을 이리 풀어주니
참으로 알 수 없는 CTO 스터디.
보내진 카카오톡 결과
⚙️ Settings 옵션 설명
Always Output Data
노드가 오류로 데이터를 생성하지 못했더라도, 빈 출력(empty output) 을 항상 내보내도록 합니다. (후속 노드가 끊기지 않도록 할 때 사용)Execute Once
입력이 여러 개여도, 한 번만 실행되도록 강제합니다. 보통 코드 실행이나 특정 API 호출 시 중복 방지를 위해 사용합니다.Retry On Fail
실패했을 때 자동으로 재시도합니다. API 타임아웃이나 일시적 오류에 유용합니다.On Error
노드가 실패했을 때 취할 행동을 지정합니다.Stop Workflow (기본값) → 전체 워크플로우 중지
Continue Workflow → 실패해도 계속 진행
기타 에러 핸들링 가능
Notes
해당 노드에 메모/주석을 작성하는 공간입니다.Display Note in Flow?
작성한 Notes를 워크플로우 화면에서 노드 옆에 표시할지 여부를 선택합니다.Code node version 2 (Latest)
현재 사용 중인 코드 노드 버전을 나타냅니다. 최신 버전을 쓰는 것이 권장됩니다.