{
  "id": "e08eb558-40cc-4f41-b61b-da55f8e31c3a",
  "slug": "ref/khub/common-n8n-노드-선택-표준-supabase-노드-금지-http-request-통일",
  "doc_type": "ref",
  "title": "📐 n8n 노드 선택 표준 — Supabase 노드 금지 & HTTP Request 통일",
  "title_en": null,
  "one_liner": "# n8n 노드 선택 표준 > 등록일: 2026-02-20 | 등록 배경: bawee(2.4.8) → bizspring(2.8.3) 이식 시 Supabase 노드 typeVersion 충돌로 Publish 불가 경험 --- ## 핵심 원칙 **외부 서비스 연동은 전부 HTTP R",
  "summary_bullets": [],
  "body_md": "# n8n 노드 선택 표준\n\n> 등록일: 2026-02-20 | 등록 배경: bawee(2.4.8) → bizspring(2.8.3) 이식 시 Supabase 노드 typeVersion 충돌로 Publish 불가 경험\n\n---\n\n## 핵심 원칙\n\n**외부 서비스 연동은 전부 HTTP Request 노드로 통일한다.**\n\n---\n\n## Supabase 노드 사용 금지\n\n```\n⛔ n8n-nodes-base.supabase 사용 금지\n✅ HTTP Request 노드 + AP-01 헤더 패턴으로 대체\n```\n\n### 금지 이유\n\n| 문제 | 내용 |\n|------|------|\n| typeVersion 종속 | bawee(2.4.8)에서 만든 typeVersion 1.2가 bizspring(2.8.3)에서 \"Install this node\" 오류 |\n| Publish 불가 | parameters: {} 상태에서 2.8 validation이 더 엄격해 Activate 차단 |\n| 환경 이식성 | WF를 bawee ↔ bizspring 간 복사 시 크레덴셜 재설정 + typeVersion 재조정 필요 |\n| 버전 업 리스크 | n8n 버전 업그레이드마다 Supabase 노드 스펙 변경 가능성 |\n\n### 대체 패턴 (HTTP Request + AP-01)\n\n```json\n{\n  \"type\": \"n8n-nodes-base.httpRequest\",\n  \"typeVersion\": 4.2,\n  \"parameters\": {\n    \"method\": \"GET\",\n    \"url\": \"={{ $json.SB_URL }}/rest/v1/테이블명\",\n    \"sendHeaders\": true,\n    \"headerParameters\": {\n      \"parameters\": [\n        { \"name\": \"apikey\",        \"value\": \"={{ $json.sbKey }}\" },\n        { \"name\": \"Authorization\", \"value\": \"=Bearer {{ $json.sbKey }}\" },\n        { \"name\": \"Content-Type\",  \"value\": \"application/json\" }\n      ]\n    },\n    \"sendQuery\": true,\n    \"queryParameters\": {\n      \"parameters\": [\n        { \"name\": \"select\", \"value\": \"원하는 컬럼\" },\n        { \"name\": \"필터키\", \"value\": \"=eq.{{ $json.값 }}\" }\n      ]\n    }\n  }\n}\n```\n\n---\n\n## 노드 선택 기준표\n\n| 작업 | 금지 | 권장 |\n|------|------|------|\n| Supabase SELECT | ~~supabase 노드~~ | HTTP Request (GET) |\n| Supabase INSERT | ~~supabase 노드~~ | HTTP Request (POST) |\n| Supabase UPDATE | ~~supabase 노드~~ | HTTP Request (PATCH) |\n| Supabase UPSERT | ~~supabase 노드~~ | HTTP Request (POST + Prefer: resolution=merge-duplicates) |\n| 외부 API 호출 | ~~Code 노드 fetch()~~ | HTTP Request 노드 (AP-02) |\n| 데이터 변환/계산 | - | Code 노드 (JS, Python) |\n| 조건 분기 | - | IF 노드 |\n| 병렬 처리 | - | SplitInBatches + Merge(append) |\n\n---\n\n## Supabase HTTP Request 패턴 모음\n\n### SELECT (GET)\n```\nGET {SB_URL}/rest/v1/{table}?select=col1,col2&filter=eq.value\nHeaders: apikey / Authorization: Bearer / Content-Type\n```\n\n### INSERT (POST)\n```\nPOST {SB_URL}/rest/v1/{table}\nHeaders: + Prefer: return=representation\nBody: { \"col1\": \"val1\", \"col2\": \"val2\" }\n```\n\n### UPDATE (PATCH)\n```\nPATCH {SB_URL}/rest/v1/{table}?id=eq.{id}\nHeaders: + Prefer: return=representation\nBody: { \"col1\": \"new_val\" }\n```\n\n### UPSERT (POST)\n```\nPOST {SB_URL}/rest/v1/{table}\nHeaders: + Prefer: resolution=merge-duplicates,return=representation\nBody: { \"id\": \"...\", \"col1\": \"val1\" }\n```\n\n---\n\n## 관련 안티패턴\n\n- AP-01: Supabase HTTP → apikey + Authorization: Bearer + Content-Type 3개 헤더 필수\n- AP-02: Code 노드에서 fetch() 금지 → HTTP Request 노드\n- AP-10: bawee(인프라) vs bizspring(서비스) 인스턴스 명시\n\n---\n\n*project_code: COMMON | tags: n8n, 개발표준, Supabase, HTTP Request*",
  "related_slugs": [],
  "faq": [],
  "jsonld": null,
  "keywords": [],
  "source_id": "27a628e5-21cd-4546-88b1-dc0f0d69086c",
  "video_url": null,
  "duration_sec": null,
  "thumbnail_url": null,
  "image_url": null,
  "caption": null,
  "solution_slug": null,
  "captured_at": null,
  "width": null,
  "height": null,
  "created_at": "2026-08-24T11:53:44.5731+00:00",
  "updated_at": "2026-08-24T11:53:44.5731+00:00",
  "visibility": "public",
  "source_stage": "1",
  "anonymized": true,
  "source_key": "legacy-khub",
  "origin": "ingest",
  "locked": false,
  "locked_by": null,
  "locked_at": null,
  "gate_state": {
    "g1": {
      "hits": [],
      "pass": true
    },
    "g2": {
      "pass": true,
      "total": 40,
      "issues": [
        "숫자·규격 같은 검증 가능한 구체가 부족합니다",
        "핵심 요약 불릿이 3개 미만입니다",
        "Q&A 쌍이 3개 미만입니다"
      ],
      "applies": true
    },
    "g3": {
      "pass": true,
      "required": false
    },
    "stage": "1",
    "decided_at": "2026-08-24T11:53:44.334Z"
  },
  "raw_id": "755a01ac-846c-4fb2-aa60-a7ed042cd4e4",
  "search_text": "📐 n8n 노드 선택 표준 — Supabase 노드 금지 & HTTP Request 통일  # n8n 노드 선택 표준 > 등록일: 2026-02-20 | 등록 배경: bawee(2.4.8) → bizspring(2.8.3) 이식 시 Supabase 노드 typeVersion 충돌로 Publish 불가 경험 --- ## 핵심 원칙 **외부 서비스 연동은 전부 HTTP R  # n8n 노드 선택 표준\n\n> 등록일: 2026-02-20 | 등록 배경: bawee(2.4.8) → bizspring(2.8.3) 이식 시 Supabase 노드 typeVersion 충돌로 Publish 불가 경험\n\n---\n\n## 핵심 원칙\n\n**외부 서비스 연동은 전부 HTTP Request 노드로 통일한다.**\n\n---\n\n## Supabase 노드 사용 금지\n\n```\n⛔ n8n-nodes-base.supabase 사용 금지\n✅ HTTP Request 노드 + AP-01 헤더 패턴으로 대체\n```\n\n### 금지 이유\n\n| 문제 | 내용 |\n|------|------|\n| typeVersion 종속 | bawee(2.4.8)에서 만든 typeVersion 1.2가 bizspring(2.8.3)에서 \"Install this node\" 오류 |\n| Publish 불가 | parameters: {} 상태에서 2.8 validation이 더 엄격해 Activate 차단 |\n| 환경 이식성 | WF를 bawee ↔ bizspring 간 복사 시 크레덴셜 재설정 + typeVersion 재조정 필요 |\n| 버전 업 리스크 | n8n 버전 업그레이드마다 Supabase 노드 스펙 변경 가능성 |\n\n### 대체 패턴 (HTTP Request + AP-01)\n\n```json\n{\n  \"type\": \"n8n-nodes-base.httpRequest\",\n  \"typeVersion\": 4.2,\n  \"parameters\": {\n    \"method\": \"GET\",\n    \"url\": \"={{ $json.SB_URL }}/rest/v1/테이블명\",\n    \"sendHeaders\": true,\n    \"headerParameters\": {\n      \"parameters\": [\n        { \"name\": \"apikey\",        \"value\": \"={{ $json.sbKey }}\" },\n        { \"name\": \"Authorization\", \"value\": \"=Bearer {{ $json.sbKey }}\" },\n        { \"name\": \"Content-Type\",  \"value\": \"application/json\" }\n      ]\n    },\n    \"sendQuery\": true,\n    \"queryParameters\": {\n      \"parameters\": [\n        { \"name\": \"select\", \"value\": \"원하는 컬럼\" },\n        { \"name\": \"필터키\", \"value\": \"=eq.{{ $json.값 }}\" }\n      ]\n    }\n  }\n}\n```\n\n---\n\n## 노드 선택 기준표\n\n| 작업 | 금지 | 권장 |\n|------|------|------|\n| Supabase SELECT | ~~supabase 노드~~ | HTTP Request (GET) |\n| Supabase INSERT | ~~supabase 노드~~ | HTTP Request (POST) |\n| Supabase UPDATE | ~~supabase 노드~~ | HTTP Request (PATCH) |\n| Supabase UPSERT | ~~supabase 노드~~ | HTTP Request (POST + Prefer: resolution=merge-duplicates) |\n| 외부 API 호출 | ~~Code 노드 fetch()~~ | HTTP Request 노드 (AP-02) |\n| 데이터 변환/계산 | - | Code 노드 (JS, Python) |\n| 조건 분기 | - | IF 노드 |\n| 병렬 처리 | - | SplitInBatches + Merge(append) |\n\n---\n\n## Supabase HTTP Request 패턴 모음\n\n### SELECT (GET)\n```\nGET {SB_URL}/rest/v1/{table}?select=col1,col2&filter=eq.value\nHeaders: apikey / Authorization: Bearer / Content-Type\n```\n\n### INSERT (POST)\n```\nPOST {SB_URL}/rest/v1/{table}\nHeaders: + Prefer: return=representation\nBody: { \"col1\": \"val1\", \"col2\": \"val2\" }\n```\n\n### UPDATE (PATCH)\n```\nPATCH {SB_URL}/rest/v1/{table}?id=eq.{id}\nHeaders: + Prefer: return=representation\nBody: { \"col1\": \"new_val\" }\n```\n\n### UPSERT (POST)\n```\nPOST {SB_URL}/rest/v1/{table}\nHeaders: + Prefer: resolution=merge-duplicates,return=representation\nBody: { \"id\": \"...\", \"col1\": \"val1\" }\n```\n\n---\n\n## 관련 안티패턴\n\n- AP-01: Supabase HTTP → apikey + Authorization: Bearer + Content-Type 3개 헤더 필수\n- AP-02: Code 노드에서 fetch() 금지 → HTTP Request 노드\n- AP-10: bawee(인프라) vs bizspring(서비스) 인스턴스 명시\n\n---\n\n*project_code: COMMON | tags: n8n, 개발표준, Supabase, HTTP Request*",
  "embedding": null,
  "embedded_at": null,
  "embedding_hash": null,
  "backlinks": [],
  "html_url": "https://bizspring.ai/kb/ref/khub/common-n8n-노드-선택-표준-supabase-노드-금지-http-request-통일",
  "markdown_url": "https://bizspring.ai/kb/ref/khub/common-n8n-노드-선택-표준-supabase-노드-금지-http-request-통일.md"
}