3단계 작업에 25개 노드가 있는 캔버스는 흔히 후회하는 선택입니다. 다른 사람이 수정할 수 없는 스크립트도 마찬가지입니다. 트리를 활용하세요.
Linkzoid 편집팀 ·
상단부터 하단까지의 의사결정 트리
비기술자가 플로우를 편집하거나 실행 기록을 읽어야 한다면? n8n 또는 Make를 선택하세요.
작업이 60줄 이내로 끝나고 저장소(repo)에 저장된다면? Python을 선택하세요.
Slack 게시글과 시트 행은 필요하지만 변경 이력(diff)은 필요 없나요? HTTP 요청 노드 하나를 사용한 n8n을 선택하세요.
수십 도메인의 변경 이력을 비교하고, 기록을 유지하거나 파싱 로직을 단위 테스트해야 한다면? SQLite를 사용한 Python을 선택하세요.
팀이 이미 n8n 클라우드 실행 요금을 지불하고 있나요? 계수해 보세요: 40개 도메인의 루프는 플랜을 빠르게 소모할 수 있습니다.
위 항목 중 어느 것도 해당되지 않나요? 셸 스크립트에서 curl로 시작해 어떤 부분이 문제인지 확인하세요.
시각적 플로우가 제 역할을 할 때
일부 작업에서는 캔버러의 복잡함이 그 가치를 증명합니다. 비기술자가 각 단계와 마지막 실행 결과를 확인해야 한다면, 그들이 절대 열지 않을 저장소(repo)보다 시각적 플로우가 더 낫습니다. 간결하게 유지하세요.
대부분의 백링크 작업은 가져오기(fetch), 확인(check), 쓰기(write)의 세 단계로 구성됩니다. 네 개의 노드로 이를 잘 처리할 수 있습니다. 만약 매월 클라이언트를 위해 웹사이트 백링크를 확인하는 작업이라면, 이는 캔버스에 잘 맞습니다. 하지만 페이지네이션, 재시도, 변경 이력(diff) 기능을 추가하면 문제가 시작됩니다. 각 기능마다 가지(branch)가 생기기 때문입니다.
작성자(writer)가 아닌 읽는 사람(reader)을 위해 캔버스를 선택하세요.
누가 플로우를 읽는가
마케팅 및 영업 담당자는 플로우의 출력(output)을 통해 플로우를 이해하며, 마지막 실행 결과를 명확하게 보고 싶어 합니다. 캔버스는 티켓 없이 이를 제공합니다. 그들은 코드가 아닌 출력을 읽습니다. 스크립트는 그들이 열지 않을 로그 파일을 제공합니다.
다음 읽는 사람이 플로우를 열기 전에 그것이 무엇을 약속하는지 알 수 있도록 플로우에 명확한 이름과 한 줄 설명을 부여하세요. 모호한 라벨을 가진 노드는 누락된 기능보다 더 많은 시간을 소모합니다.
한눈에 파악할 수 있는 가지(branch)
ok 조건에 대한 IF 노드는 이해하기 쉽습니다. 한 페이지에 세 개의 IF 노드가 있더라도 각 가지에 명확한 이름이 붙어 있다면仍可 읽을 수 있습니다. 그 이상으로 가지가 겹치면, 검토자가 빈 결과에서 어떤 가지가 실행되는지 확신하기 위해 10분이 걸릴 수 있습니다.
캔버스가 부담이 되는 지점
많은 도메인에 대한 루프, 실행 간 공유 상태, 단위 테스트는 일반적인 압력 지점입니다. 캔버스는 이를 우회책(workaround)으로 처리하며, 각 우회책은 플로우가 의도한 동작에서 벗어날 수 있는 지점입니다.
플로우를 수정하기 위해 JSON을 내보내야 한다면, 그 작업은 캔버스의 한계를 넘었습니다. 로직을 코드로 이동하고 캔버스는 알림용으로만 유지하세요.
n8n 설정을 네 줄로 끝내기
HTTP Request 노드를 추가하고, 메서드는 GET, URL은 https://linkzoid.pro/api.php로 설정합니다. action, q, key 쿼리 파라미터를 추가하세요. 이 방식으로 웹사이트 백링크를 확인하고 싶은 사람은 5분 안에 이 설정을 복사할 수 있습니다.
키는 노드에 직접 입력하지 말고 자격 증명(Credentials)에 저장하세요. ok 조건에 IF 노드를 추가하고, false 분기는 나를 알림(ping)하는 오류 워크플로우로 연결하세요.
rows 배열을 Item Lists 또는 Split Out 노드로 분할한 후 Google Sheets나 Postgres에 기록하세요. 일부 플랜에서는 각 항목이 단계로 계산되어 실행 횟수에 청구될 수 있으므로 실행 횟수를 주의 깊게 모니터링하세요.
이것이 전체 작업입니다. 하지만 페이지네이션이 발생하면 작동이 중단됩니다. n8n의 루프는 작동하지만, 10개 이상의 노드를 넘어서면 읽기나 처리가 원활하지 않습니다.
n8n 플로우를 5개의 노드로 구성하기
각 노드는 하나의 작업만 수행하며, 다음 노드를 추가하기 전에 각 노드를 개별적으로 테스트할 수 있습니다.
01
HTTP Request 노드 생성하기
메서드는 GET, URL은 https://linkzoid.pro/api.php로 설정합니다. action, q, per를 쿼리 파라미터로 추가하고, 키는 다음 단계에서 처리합니다.
02
키를 자격 증명으로 연결하기
키를 n8n 자격 증명에 저장하고 쿼리에서 참조하세요. URL 필드에 키를 직접 입력하면 로그나 내보내기 파일에 노출될 수 있습니다.
03
ok 플래그로 조건 분기하기
ok 값을 읽는 IF 노드를 추가하세요. false 분기는 응답 본문을 확인할 수 있는 곳으로 보내는 오류 워크플로우로 연결하세요.
04
rows 배열 분할하기
rows 배열에 Split Out 노드를 사용하여 각 도메인을 개별 항목으로 만드세요. 전체 응답을 하나의 셀에 넣는 대신, 각 항목을 시트나 테이블에 기록하세요.
05
무료 액션으로 먼저 테스트하기
노드를 키가 필요 없는 overview로 설정하고, 유료 액션으로 전환하기 전에 응답의 구조가 올바른지 확인하세요.
문제 해결 표
증상
n8n 원인
Python 원인
10개 행만 도착함
노드에 per 파라미터가 설정되지 않음
동일함, 쿼리 문자열 확인
실행은 성공했지만 시트가 비어 있음
항목으로 분할되지 않은 행
rows 대신 dict를 작성함
일주일 후 402 오류
트리거에서 워크플로우가 무한 루프 발생
크론이 두 번 실행됨
키가 로그에 유출됨
URL 필드에 붙여넣기
전체 URL 출력
월간 격차
실행 기록 유지 관리가 이전 실행을 삭제함
이력을 저장하지 않음
실행당 비용
저희 측에서는 어떤 방식이든 비용이 동일합니다: refdomains 페이지당 2 크레딧입니다. 빌더에서 비용이 달라집니다.
셀프 호스팅 n8n은 실행 비용이 무료입니다. 클라우드 플랜은 실행 횟수를 기준으로 과금합니다. 크론에 배치한 일반 스크립트는 비용이 들지 않습니다.
어떤 방식을 선택하든, 각 실행의 날짜가 명시된 사본을 도구 외부에 보관하세요. Actions의 주간 스냅샷은 이를 정리하는 한 가지 방법이며, -suite 비교는 자체 이력이 왜 중요한지 설명합니다.
도메인당 실행 횟수 계산
40개 도메인에 대한 루프는 실행 횟수를 기준으로 과금하는 플랜에서 40번의 실행을 의미합니다. 스케줄에 등록하기 전에 플랜이 루프를 어떻게 계산하는지 확인하세요. 청구서는 크레딧이 아닌 실행 횟수를 기준으로 산정됩니다.
스케줄 옆에 예상 실행 횟수를 기록하세요. 예상치가 파일에 이미 기재되어 있다면 청구서상의 예상치 못한 비용 증가를 설명하기가 더 쉽습니다.
셀프 호스팅에도 비용이 발생합니다
셀프 호스팅 n8n에는 서버 비용, 업그레이드 비용 및 백업 비용이 발생합니다. 데이터베이스는 직접 관리해야 합니다. 작은 머신에서 실행되는 일반 스크립트는 작동 요소가 적어 고정 월간 작업에 선택하기 좋은 이유 중 하나입니다.
주로 먼저 깨지는 부분
n8n에서는 페이지네이션과 항목 수가 문제입니다. Python에서는 테스트하지 않은 부분, 즉 빈 rows, 타임아웃, 예상과 다른 이름의 필드 등이 문제입니다.
어떤 도구도 틀리지 않았습니다. 6개월 후 해당 부분을 유지보수할 사람을 기준으로 선택하세요. 만약 혼자 유지보수한다면 코드가 검색하기 더 쉽습니다. 만약 캔버스 환경에 익숙한 마케팅 팀이 유지보수한다면, 그들이 직접 확인할 수 있는 작은 플랜이 그들이 두려워하는 저장소보다 낫습니다.
혼합 환경도 잘 작동합니다. Python으로 스케줄에 따라 CSV를 작성하고, n8n이 해당 파일을 읽어서 Slack에 게시하도록 할 수 있습니다. 각 도구는 자신이 가장 잘 처리하는 부분을 담당하며, 어느 플로우도 10단계 이상으로 커지지 않습니다.
Python 버전의 가독성 유지
코드의 일반적인 상황은 6개월 후 다른 사람이 수정해야 한다는 것입니다. 이를 쉽게 만드세요. 명확한 변수명과 저장된 응답을 가진 짧은 스크립트가 아무도 손대지 못할 만큼 복잡한 원라인보다 낫습니다.
저장된 응답으로 파서 테스트
실제 응답 중 하나를 파일로 저장하고 단위 테스트에서 이를 참조하세요. 그러면 파서가 크레딧을 소모하지 않고 실행되며, 필드명이 변경되었을 경우 월요일 아침이 아닌 테스트 실행 시점에 실패합니다.
저장된 응답은 작게 유지하세요. 행이 열 개 정도면 충분합니다. 필드명이 마지막으로 변경된 시점을 알 수 있도록 획득 날짜를 기록하세요.
설정을 한 곳에 보관
도메인, 액션 및 페이지 크기는 스크립트 전반에 흩어지지 않고 작은 설정 블록에 있어야 합니다. 그러면 동료는 행을 파싱하는 로직을 건드리지 않고도 대상 목록을 변경할 수 있습니다.
시크릿도 해당 블록에 포함하지 마세요. 키를 로드하는 방식과 동일하게 환경 변수에서 로드하세요.
커밋하기 전에 2주간의 테스트 기간을 거치세요
이 문제를 문서상으로만 결정하지 마세요. 각 도구로 작업의 가장 작은 버전을 구축하고, 2주 동안 매일 실행하여 누가 자발적으로 열어보는 도구를 확인하세요.
무엇이 깨지는지 확인하세요. 수동으로 수정해야 했던 횟수와 오류 없이 출력 결과가 잘못되었던 횟수를 세세요. 수동 수정이 더 적게 필요한 도구를 선택하세요.
모든 수동 수정을 로그에 기록
플로우나 스크립트를 수동으로 수정한 매 순간을 간단한 메모로 기록하세요. 2주 후의 짧은 목록은 어떤 기능 표보다 더 많은 정보를 알려줍니다.
누가 변경을 요청했는지 기록
요청자가 코드를 읽을 수 없는 사람이라면 캔버스가 승리할 것입니다. 요청자가 당신이라면 저장소가 더 관리하기 쉬울 것입니다.
어떤 답변이든 이를 가리킬 수 있다면 괜찮습니다. 플로우나 저장소 옆에 이유를 기록하고, 작업이 확장될 때 다시 검토하세요.
빌더를 위한 짧은 답변
Make나 Zapier는 이 API와 호환되나요?
네. 쿼리 파라미터와 함께 HTTPS GET 요청을 보낼 수 있는 도구라면 모두 작동합니다. Make, Zapier, Pipedream, Apps Script가 포함됩니다. 일반 HTTP 모듈을 사용하고, 키를 저장된 연결에 넣은 다음, 다음 단계에서 JSON rows 배열을 읽으세요.
AI 에이전트가 대신 호출할 수 있나요?
기술적으로는 가능합니다. 일반 HTTP API이기 때문입니다. 고정 월간 작업의 경우 스크립트가 더 저렴하고 예측 가능하며, 에이전트는 모델 비용과 잘못된 파라미터 전달 가능성을 추가합니다. 임시 질문에만 에이전트를 사용하세요.
가장 저렴한 시작 방법은 무엇인가요?
curl과 무료 개요 액션을 사용한 셸 스크립트를 크론에서 실행하세요. 키가 필요 없고 비용도 들지 않으며, 응답 구조를 파악할 수 있습니다. 첫 번째 어색한 JSON 파싱 문제가 발생하면 Python으로 이동하세요.