Make vs n8n - 1.SOLAPI 카카오 알림톡 구현

VS N8을 만드십시오


소개

최근 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

  1. 구현

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)를 하거나, 테이블에 기록하거나 할 수 있음.

SOLARAP 및 AIRTABLE

n8n 에서는 Settings에서 Error 발생시 처리 루틴를 명시화 할 수 있음

중국 전화 설정의 스크린 샷
서버에 연결하는 방법을 보여주는 다이어그램

  • Senario와 workflow 자체의 에러 알림

Make에서는 시나리오가 실패했을 때 메일로 알려줌.

n8n에서는 workflow 차원의 error Handling을 지정할 수 있음

- workflow settings 화면

흰색 배경이있는 컴퓨터 화면의 스크린 샷

- error handler 화면

오류 핸들러 전보
  • telegram 알림 화면

WhatsApp 오류 메시지

생각한 점.

  1. Iterator 내에 Filter가 내가 원하게 아니었다.
    데이타가 홍길동1, 홍길동2, 홍길동3 이 있을 때
    나는 홍길동2만 통과하기를 바랬는데...n8n은 홍길동1이 통과 안되면 나머지도 통과가 안되었다.
    이런 경우는 IF 노드를 사용하는 것이 원하는 동작이 되었음.
    이름이 같다고 다 같은 것이 아니었음.

  2. 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)
    현재 사용 중인 코드 노드 버전을 나타냅니다. 최신 버전을 쓰는 것이 권장됩니다.

4
7개의 답글

👉 이 게시글도 읽어보세요