13. n8n Webhook이란? 외부에서 데이터를 받아오는 기본 개념

랜딩페이지에서 상담 신청이 들어왔는데 구글시트에 수동으로 옮기다가 빠트린 적이 있었어요. 신청자가 다음 날 연락이 없다고 문의를 했는데, 확인해보니 입력을 빠트린 거였어요. 그때 Webhook을 처음 써봤어요.

Webhook은 외부에서 데이터가 들어오는 순간 자동화가 시작되는 트리거예요. 랜딩페이지에서 신청서가 제출되거나, 결제가 완료되거나, 외부 폼에 응답이 등록되는 순간 n8n이 그 데이터를 받아서 다음 작업을 이어가는 구조예요.

이번 글에서는 Webhook이 무엇인지, 실제로 어떻게 작동하는지, 가장 많이 헷갈리는 Test URL과 Production URL 차이를 중심으로 정리해볼게요.






Webhook이 하는 일

지금까지 살펴본 트리거는 n8n이 먼저 어딘가로 확인하러 가는 방식이었어요. Schedule Trigger는 정해진 시간에, Gmail Trigger는 주기적으로 메일함을 확인하는 식이에요.

Webhook은 반대예요. 외부 서비스가 먼저 n8n으로 데이터를 보내요.

Webhook = 외부 서비스가 n8n으로 데이터를 보내는 접수창.
신청이나 이벤트가 발생하는 순간, 그 데이터가 바로 n8n으로 들어와요.

접수함에 비유하면 이해하기 쉬워요. 사무실 입구에 접수함을 놓아두면 누군가 신청서를 넣을 때마다 담당자가 처리하는 방식이에요. n8n의 Webhook URL이 그 접수함 주소고, 외부 서비스가 데이터를 넣으면 자동화가 시작돼요.

Webhook이 어울리는 상황들

외부에서 어떤 일이 발생했을 때 n8n이 바로 반응해야 하는 경우에 Webhook이 잘 어울려요.

  • 랜딩페이지 상담 신청 → 구글시트 저장 + 담당자 알림
  • 외부 결제 완료 → 주문 정보 기록 + 후속 안내 준비
  • 고객 문의 등록 → 분류 후 담당자별 전달
  • 회원가입 완료 → 신규 회원 정보 정리
  • 외부 앱에서 특정 이벤트 발생 → 중요 알림 선별 후 메신저 전달

공통점은 "외부에서 먼저 일이 발생하고, 그 데이터를 n8n이 받아야 한다"는 거예요. 내가 n8n에서 먼저 뭔가를 확인하는 게 아니라, 외부가 먼저 n8n에 알려주는 구조예요.

Schedule Trigger와 Webhook, 무엇이 다른가?

구분Schedule TriggerWebhook
시작 기준정해진 시간외부에서 데이터가 들어오는 순간
n8n의 역할정해진 시간에 먼저 실행외부 신호를 기다렸다가 받으면 실행
예시매일 오전 9시 체크리스트 생성신청서 제출 순간 데이터 수신
비유알람 시계접수창

매일 블로그 글감을 수집한다면 Schedule Trigger가 맞아요. 누군가 상담 신청서를 제출하는 순간 즉시 알림을 받고 싶다면 Webhook이 맞아요.

n8n Webhook 노드가 만드는 것

Webhook 노드를 추가하면 두 가지 URL이 생겨요. 이게 핵심이에요.

TEST URL
테스트용 임시 주소
워크플로우 편집 화면이 열려 있을 때만 작동해요. 데이터가 어떻게 들어오는지 확인할 때 써요.
PRODUCTION URL
실제 운영용 주소
워크플로우가 Active 상태일 때 작동해요. 실제 랜딩페이지나 외부 서비스에 등록하는 주소예요.

처음에 Test URL을 랜딩페이지에 등록했는데 신청 데이터가 하나도 안 들어왔어요. 확인해보니 Test URL은 워크플로우 편집 화면을 열고 있을 때만 작동하는 거였어요. 실제 서비스엔 Production URL을 등록해야 해요.

Test URL → 지금 화면에서 데이터 구조 확인용
Production URL → 실제 서비스에 등록, Active 상태에서 작동

Webhook으로 들어오는 데이터 형태

Webhook으로 들어오는 데이터는 보통 필드 이름과 값이 묶인 형태예요. 상담 신청 폼이라면 이런 데이터가 들어올 수 있어요.

{
  "name": "홍길동",
  "phone": "010-0000-0000",
  "email": "test@example.com",
  "message": "자동화 상담을 받고 싶습니다.",
  "source": "랜딩페이지"
}

이 데이터가 Webhook Output으로 들어오면, Set 노드에서 필요한 값만 골라 customer_name, customer_email처럼 정리하고 → Google Sheets에 저장하거나 → Telegram으로 알림을 보낼 수 있어요.

Webhook Output을 열어봤더니 예상한 name 필드가 없고 body.name처럼 중첩된 구조로 들어온 적이 있었어요. Output을 확인하지 않고 Set 노드를 설정했다가 빈 값이 저장됐어요. 항상 Output 탭에서 실제 데이터 구조를 먼저 확인해야 해요.

처음 Webhook을 테스트하는 순서

Webhook은 외부에서 데이터를 보내야 실행되는 구조라, 테스트 방식이 다른 노드와 조금 달라요.

1
Webhook 노드 추가 캔버스에 Webhook 노드를 추가하면 Test URL과 Production URL이 생성돼요.
2
Test URL 복사 후 데이터 전송 Test URL을 복사하고, 외부 도구(curl, Postman, 또는 테스트 폼)에서 데이터를 보내요. 편집 화면이 열려 있어야 받아요.
3
Output 탭에서 데이터 구조 확인 어떤 필드 이름으로 데이터가 들어왔는지 Output에서 먼저 확인해요. 이 단계를 건너뛰면 Set 노드 설정에서 막혀요.
4
Set 노드로 필요한 값 정리 Output 필드를 확인한 뒤 Set 노드에서 customer_name, customer_email처럼 알아보기 쉬운 이름으로 정리해요.
5
저장 후 Active 켜기 테스트가 끝나면 저장하고 Active 토글을 켜요. Production URL을 실제 서비스에 등록해요.

Production URL을 랜딩페이지에 등록했는데 신청이 들어와도 아무것도 실행이 안 된 적이 있었어요. 워크플로우를 Active 상태로 안 켜놓은 거였어요. Production URL은 Active 상태에서만 작동해요.

상담 신청 자동화로 보는 전체 흐름

상황: 랜딩페이지에서 상담 신청이 들어오면 구글시트에 저장하고 담당자에게 알림을 보낸다

단계노드역할
1단계Webhook랜딩페이지 신청 데이터 수신
2단계Set 노드customer_name·email·message 등 정리
3단계IF 노드 (선택)긴급 신청 여부 확인
4단계Google Sheets신청 정보 시트 저장
5단계Telegram담당자에게 새 신청 알림

처음에는 5단계 전부를 한 번에 만들지 않아도 돼요. Webhook → Set 노드 → Output 확인까지만 해도 데이터가 어떻게 들어오는지 이해할 수 있어요. 나머지 노드는 그 다음에 붙이면 돼요.

Webhook에서 초보자가 자주 막히는 것들

Test URL을 실제 서비스에 등록한다

Test URL은 편집 화면이 열려 있을 때만 작동해요. 랜딩페이지에 Test URL을 등록하면 실제 신청이 들어와도 데이터가 들어오지 않아요. 실제 서비스에는 반드시 Production URL을 등록해야 해요.

Output 확인 없이 Set 노드부터 설정한다

Webhook으로 들어오는 데이터가 어떤 필드 이름으로 오는지 모르면 Set 노드에서 엉뚱한 값을 연결하게 돼요. 데이터를 먼저 보내서 Output을 확인한 뒤에 Set 노드를 설정하는 게 맞는 순서예요.

Production URL 등록 후 Active를 안 켠다

저장만 하고 Active를 켜지 않으면 외부에서 데이터를 보내도 워크플로우가 실행되지 않아요. Production URL은 Active 상태에서만 작동해요.

외부 서비스의 전송 방식과 Webhook 설정이 안 맞는다

외부 서비스는 GET 또는 POST 방식으로 데이터를 보내요. Webhook 노드의 HTTP Method 설정이 외부 서비스와 맞지 않으면 데이터가 정상적으로 들어오지 않아요. 외부 서비스 문서에서 어떤 방식으로 보내는지 확인해야 해요.

데이터가 안 들어올 때 확인 순서

  • 외부 서비스에 등록한 URL이 Test URL인지 Production URL인지 확인하기
  • Production URL이라면 워크플로우가 Active 상태인지 확인하기
  • 외부 서비스의 HTTP Method(GET/POST)가 Webhook 설정과 일치하는지 확인하기
  • Executions에서 실행 기록이 있는지 확인하기
  • Output 탭에서 실제 데이터 구조 확인하기

Webhook은 외부와 연결되는 입구 — 보안 주의사항

Webhook URL이 공개 블로그 글에 노출된 적이 있었어요. 나중에 Executions를 열어보니 불필요한 테스트 요청이 여러 번 들어와 있었어요. Webhook URL은 주소 자체가 접수 통로이기 때문에 공개하면 안 돼요.

Webhook으로 고객 이름·연락처·이메일 같은 개인정보가 들어올 수 있어요. 실습 단계에서는 반드시 샘플 데이터로 테스트해야 해요. 실제 고객 정보를 테스트에 쓰지 않아야 해요.
  • Webhook URL을 블로그 글·캡처 이미지에 노출하지 않기
  • 실습 중엔 실제 고객 정보 대신 샘플 데이터 사용하기
  • Production URL 등록 전 테스트 데이터로 충분히 확인하기
  • Execution 기록에 개인정보가 남을 수 있다는 점 인식하기
  • 불필요한 외부 요청을 막으려면 인증 방식 추가 검토하기

마무리: Webhook은 외부 이벤트로 자동화를 시작하는 입구

Webhook을 한 줄로 정리하면 이렇게 돼요.

외부 서비스에서 이벤트가 발생하는 순간, 그 데이터를 n8n으로 보내 자동화를 시작하는 트리거.

세 가지만 기억하면 돼요.

  • Test URL — 편집 화면이 열려 있을 때 데이터 구조 확인용
  • Production URL — Active 상태에서 실제 서비스에 등록하는 주소
  • Output 먼저 확인 — 어떤 필드 이름으로 데이터가 들어오는지 확인한 뒤 Set 노드 설정

Webhook을 이해하면 n8n 자동화 범위가 넓어져요. 정해진 시간에 실행하는 것을 넘어, 외부에서 실제 일이 발생하는 순간 자동화가 시작되는 구조를 만들 수 있어요.

다음 글에서는 n8n으로 구글시트에 데이터를 자동 저장하는 방법을 살펴볼게요. Webhook이나 Set 노드로 정리한 데이터를 Google Sheets에 연결하면 실제 업무 관리 자동화로 한 단계 확장돼요.


※ 이 글은 n8n 비개발자 자동화 시리즈 13화입니다. n8n의 기능과 화면은 버전에 따라 달라질 수 있으며, 실제 사용 전에 공식 문서를 함께 확인해주세요.

참고자료

  • n8n Docs, Webhook node
  • n8n Docs, Webhook node workflow development
  • n8n Docs, Webhook node common issues
  • n8n Docs, How n8n structures data
  • n8n Docs, Edit Fields (Set) node
  • n8n Docs, Expressions for data transformation
  • n8n Docs, Respond to Webhook node
  • n8n Docs, Executions
  • n8n Docs, Execution data redaction
  • n8n Docs, Workflow settings
  • n8n Docs, Securing n8n
  • n8n Docs, Configure webhook URLs with reverse proxy