자동화 기초 02 로컬 첫 워크플로우: Webhook 테스트로 데이터 흐름 감 잡기

지난편에서 n8n을 로컬(http://localhost:5678)로 띄웠다면, 이제는 “자동화의 기본 구조(트리거 → 처리 → 실행)”를 몸으로 익히는 단계입니다. 가장 빠른 방법은 Webhook 트리거로 직접 데이터를 던져보고, n8n이 받은 데이터를 가공해서 응답까지 돌려주는 작은 API를 만들어보는 것입니다. :contentReference[oaicite:0]{index=0}

이 글을 끝내면
  • Webhook 노드의 Test URLProduction URL 차이를 이해하고 :contentReference[oaicite:1]{index=1}
  • 로컬에서 curl로 Webhook 호출해 테스트할 수 있고
  • “받은 데이터 → 정리 → 응답 반환”까지 한 번에 흐름을 확인할 수 있습니다.

0) Test URL vs Production URL: 여기서부터 헷갈리면 계속 막힙니다

Webhook 노드는 상단에 두 개의 URL을 보여줍니다: TestProduction. :contentReference[oaicite:2]{index=2}

  • Test URL: 개발/테스트용. 일반적으로 워크플로우를 실행(Execute)해야 요청을 받을 준비가 됩니다. 테스트 중에는 데이터가 에디터에 보이고 디버깅이 쉽습니다. :contentReference[oaicite:3]{index=3}
  • Production URL: 운영용. 워크플로우가 저장/활성화(Active)되어야 외부 호출로 자동 실행됩니다. 또한 “프로덕션 웹훅”으로 흐르는 데이터는 에디터 UI에 바로 보이지 않을 수 있어, 테스트 단계에선 Test URL이 편합니다. :contentReference[oaicite:4]{index=4}

1) 오늘 만들 워크플로우(구성)

아주 작게 시작합니다. 목표는 “성공 경험 + 디버깅 루틴”입니다.

워크플로우 구조
  1. Webhook (Trigger) — POST로 JSON 받기 :contentReference[oaicite:5]{index=5}
  2. Set — 필요한 필드만 정리(예: name/email/message) (선택)
  3. Respond to Webhook — 응답을 내가 원하는 형태로 반환 :contentReference[oaicite:6]{index=6}

2) n8n 에디터에서 워크플로우 만들기

Step 1) Webhook 노드 추가

  1. 새 워크플로우 생성
  2. Webhook 노드 추가 :contentReference[oaicite:7]{index=7}
  3. HTTP MethodPOST로 설정
  4. Webhook 노드 상단에서 Test URL을 선택해 URL을 확인 :contentReference[oaicite:8]{index=8}

Step 2) (선택) Set 노드로 데이터 정리

처음부터 복잡한 “가공”을 하려다 망합니다. 오늘은 받은 JSON에서 필요한 키만 꺼내는 정도로 충분합니다. (Set 노드에서 name, email, message 같은 필드만 정리)

Step 3) Respond to Webhook 노드 추가

Webhook 노드는 응답 모드를 여러 가지로 설정할 수 있는데, “내가 원하는 응답 JSON”을 확실히 만들려면 Respond to Webhook 노드를 붙이는 방식이 가장 직관적입니다. :contentReference[oaicite:9]{index=9}

예시 응답(원하는 형태로 바꿔도 됩니다):

{
  "ok": true,
  "received": {
    "name": "={{$json.name}}",
    "email": "={{$json.email}}",
    "message": "={{$json.message}}"
  },
  "ts": "={{$now}}"
}

Respond to Webhook는 “웹훅이 있을 때만 의미가 있고”, 워크플로우가 오류로 끝나면 500 응답으로 처리될 수 있습니다. :contentReference[oaicite:10]{index=10}

3) Test URL로 실행해보기 (curl 테스트)

Test URL을 사용할 때는 워크플로우를 먼저 실행(Execute Workflow)해 웹훅이 요청을 받을 준비가 되게 해야 합니다. :contentReference[oaicite:11]{index=11}

  1. n8n 상단에서 Execute Workflow를 눌러 실행 대기 상태로 둡니다. :contentReference[oaicite:12]{index=12}
  2. Webhook 노드에서 Test URL을 복사합니다. :contentReference[oaicite:13]{index=13}
  3. 터미널에서 아래처럼 호출합니다(URL만 본인 Test URL로 교체).
curl -X POST "여기에-Webhook-Test-URL" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "홍길동",
    "email": "[email protected]",
    "message": "로컬에서 웹훅 테스트 중입니다",
    "createdAt": "2026-03-10T09:00:00+09:00"
  }'

정상이라면 n8n 에디터에서 실행 흐름이 보이고, 터미널에는 Respond to Webhook에서 만든 JSON 응답이 반환됩니다.

4) 가장 흔한 문제 해결(로컬에서 특히 자주 발생)

문제 1) “Test URL로 호출했는데 아무 반응이 없어요”

  • 워크플로우를 Execute Workflow로 실행해 둔 상태인지 확인하세요. (Test URL은 테스트 실행 흐름과 연결되어야 합니다.) :contentReference[oaicite:14]{index=14}
  • Method가 맞는지 확인하세요(Webhook이 POST면 curl도 POST). :contentReference[oaicite:15]{index=15}

문제 2) “Production URL은 되는데 에디터에 데이터가 안 보여요”

프로덕션 웹훅은 운영 흐름이라, 에디터에서 데이터가 바로 보이지 않을 수 있습니다. 개발/디버깅은 Test URL로 먼저 끝내고, 준비가 되면 Production으로 전환하는 게 편합니다. :contentReference[oaicite:16]{index=16}

문제 3) “나중에 서버로 옮기면 Webhook URL이 이상해져요”

리버스 프록시 뒤에서 돌리면 n8n 내부 포트(5678)와 외부 노출 포트(443)가 달라 URL 생성이 꼬일 수 있습니다. 이때는 WEBHOOK_URL 같은 환경변수를 설정해 올바른 공개 URL을 n8n에 알려줘야 합니다. (이건 5~6편에서 운영형으로 자세히 다룹니다.) :contentReference[oaicite:17]{index=17}

5) 안티그래비티 프롬프트 예시: “2편 수준”에서 가장 잘 먹히는 말투

프롬프트 1) 워크플로우 구성 제안 + 테스트 절차까지

n8n 로컬에서 Webhook 테스트용 첫 워크플로우를 만들고 싶어.
공식 문서 기준으로만 안내해줘.

요구:
- Webhook(POST)로 JSON을 받는다
- 받은 값 중 name/email/message만 정리한다
- Respond to Webhook으로 JSON 응답을 반환한다

추가:
- Test URL로 실행하는 정확한 순서(Execute Workflow 포함)를 단계로 써줘
- curl 예시도 같이 만들어줘(내가 URL만 바꿔서 실행하게)

주의:
- 복잡한 노드 추가하지 말고, 최소 노드로 성공 경험부터 만들자.

프롬프트 2) “안 되는 상황” 디버깅용

지금 Webhook Test URL을 curl로 호출했는데 워크플로우가 안 움직여.
공식 문서 기준으로, 가장 흔한 원인부터 체크리스트로 정리해줘.

조건:
- 로컬 n8n (http://localhost:5678)
- Webhook 노드 Method는 POST
- curl은 JSON을 보내는 형태

원하는 출력:
1) 체크리스트(우선순위 높은 순)
2) 각각 확인하는 방법(예: Execute Workflow가 필요한지 등)
3) 해결되면 다음 단계(Production URL로 전환 조건)까지

다음 편 예고

3편에서는 “셀프호스팅에서 꼭 알아야 하는 최소 환경변수”를 정리합니다. 특히 로컬→서버로 넘어갈 때 가장 많이 터지는 포인트가 URL/웹훅/타임존/실행 데이터(로그)라, 운영으로 확장하기 전에 안전한 기본값을 먼저 잡아둘 예정입니다. :contentReference[oaicite:18]{index=18}

댓글 남기기