월. 8월 18th, 2025

G: “

안녕하세요, n8n으로 자동화를 꿈꾸는 여러분! ✨ 오늘은 n8n 워크플로우 자동화의 심장이라고 할 수 있는 HTTP Node에 대해 A부터 Z까지 파헤쳐 보는 시간을 가져보겠습니다. 웹 서비스와 데이터를 주고받는 거의 모든 자동화의 핵심이 바로 이 HTTP 노드인데요, 이 글 하나로 HTTP 노드의 모든 기능을 마스터하고, 10가지 실전 예제를 통해 여러분의 워크플로우를 한 단계 업그레이드할 수 있도록 도와드리겠습니다! 🌐


1. HTTP Node란 무엇인가요? 🌐

n8n의 HTTP Node는 이름 그대로 웹의 기본 통신 규약인 HTTP(Hypertext Transfer Protocol)를 사용하여 외부 서비스와 통신할 수 있게 해주는 n8n의 핵심 노드입니다. 여러분이 사용하는 거의 모든 웹 서비스(예: Slack, Trello, Google Sheets, 각종 API)는 HTTP를 통해 데이터를 주고받습니다.

왜 HTTP Node가 중요할까요? 🤔

  • 전용 노드가 없는 서비스 연동: n8n에는 수많은 서비스의 전용 노드(Slack, Notion 등)가 있지만, 세상의 모든 서비스를 위한 노드가 존재하지는 않습니다. 이때 HTTP 노드를 사용하면 어떤 서비스라도 해당 서비스의 API 문서만 있다면 연동할 수 있습니다.
  • 복잡하거나 커스텀 API 호출: 전용 노드가 제공하지 않는 특정 API 기능이나, 커스텀 API 엔드포인트를 호출해야 할 때 HTTP 노드가 유일한 해결책이 됩니다.
  • 데이터 형식의 유연성: JSON, Form Data, Raw 등 다양한 형태의 데이터를 보내고 받을 수 있어 활용 범위가 매우 넓습니다.

한마디로, HTTP 노드는 n8n 워크플로우에 무한한 확장성을 부여하는 만능 열쇠라고 할 수 있습니다! 🔑


2. HTTP Node의 주요 설정 파헤치기 🛠️

HTTP 노드를 효과적으로 사용하기 위해 알아야 할 핵심 설정들을 자세히 살펴보겠습니다.

2.1. 메서드 (Method) 🎯

HTTP 요청의 목적을 나타냅니다. 주로 다음과 같은 메서드들이 사용됩니다.

  • GET: 서버로부터 데이터를 읽어올 때 사용합니다. (예: 블로그 글 목록 가져오기, 사용자 정보 조회)
  • POST: 서버에 새로운 데이터를 생성할 때 사용합니다. (예: 새 블로그 글 작성, 사용자 회원가입)
  • PUT: 서버의 기존 데이터를 전체 업데이트할 때 사용합니다. (예: 특정 게시글의 모든 내용을 수정)
  • DELETE: 서버의 데이터를 삭제할 때 사용합니다. (예: 특정 게시글 삭제)
  • PATCH: 서버의 기존 데이터를 부분적으로 업데이트할 때 사용합니다. (예: 게시글의 제목만 수정)
  • OPTIONS, HEAD: 기타 고급 용도로 사용됩니다.

2.2. URL 🔗

요청을 보낼 대상 주소입니다. 일반적으로 API 엔드포인트가 됩니다.

  • 예시: https://api.example.com/users 또는 https://api.openweathermap.org/data/2.5/weather

2.3. 헤더 (Headers) ✉️

요청에 대한 추가 정보를 제공합니다. 자주 사용되는 헤더는 다음과 같습니다.

  • Content-Type: 보내는 바디(Body)의 데이터 형식을 서버에 알려줍니다.
    • application/json: JSON 형식 데이터
    • application/x-www-form-urlencoded: HTML 폼 제출 시 사용되는 인코딩된 데이터
    • multipart/form-data: 파일 업로드 시 사용
  • Authorization: 인증 정보를 담습니다. API 키, 토큰 등을 이곳에 넣어 전송합니다.
  • Accept: 클라이언트가 받을 수 있는 응답 데이터의 형식을 서버에 알려줍니다. (예: application/json)

2.4. 쿼리 파라미터 (Query Parameters) ❓

GET 요청 시 URL 뒤에 ?key1=value1&key2=value2 형식으로 데이터를 전달하는 방식입니다. 주로 데이터를 필터링하거나 정렬할 때 사용됩니다.

  • 예시: https://api.example.com/products?category=electronics&limit=10

2.5. 바디 (Body) 📦

POST, PUT, PATCH 요청 시 서버로 전송할 실제 데이터입니다. Content-Type 헤더에 따라 여러 형식이 있습니다.

  • JSON: 가장 흔하게 사용되는 데이터 형식입니다.
    • {"name": "John Doe", "email": "john.doe@example.com"}
  • Form-Data (x-www-form-urlencoded): HTML 폼 제출과 유사하며, 키-값 쌍으로 인코딩됩니다.
    • name=John+Doe&email=john.doe%40example.com
  • Form-Data (multipart/form-data): 파일 업로드 시 사용됩니다. 텍스트 데이터와 파일을 함께 보낼 수 있습니다.
  • Raw: 특정 형식이 없는 순수한 텍스트 데이터를 보낼 때 사용합니다. (예: XML, 일반 텍스트)

2.6. 인증 (Authentication) 🔑

API 사용 시 필수적인 부분입니다. n8n에서는 Credential 기능을 통해 안전하게 인증 정보를 관리할 수 있습니다.

  • API Key: 헤더, 쿼리 파라미터, 또는 바디에 API 키를 포함합니다. n8n Credential을 사용하면 노출 위험 없이 관리할 수 있습니다.
  • Basic Authentication: 사용자 이름과 비밀번호를 Base64로 인코딩하여 Authorization 헤더에 포함합니다.
  • OAuth2: 가장 복잡하지만 안전한 인증 방식입니다. n8n은 OAuth2 Credential을 통해 쉽게 연동할 수 있습니다.

2.7. 옵션 (Options) ⚙️

  • Follow Redirects: 서버가 다른 URL로 리디렉션할 때 자동으로 따라갈지 여부를 설정합니다.
  • Timeout: 응답을 기다릴 최대 시간입니다.
  • Max Redirects: 최대 리디렉션 횟수입니다.

2.8. 에러 처리 (Error Handling) 🚨

HTTP 요청이 항상 성공하는 것은 아닙니다. 2xx(성공) 외의 상태 코드(4xx 클라이언트 에러, 5xx 서버 에러)는 기본적으로 n8n에서 에러로 간주됩니다.

  • n8n의 Try/Catch 노드를 사용하거나, If 노드를 통해 응답 상태 코드({{ $json.statusCode }})를 확인하여 에러 상황에 맞게 워크플로우를 분기할 수 있습니다.

3. 실전 예제 10가지로 HTTP Node 마스터하기! 🧑‍💻

이제 실제로 HTTP 노드를 사용하는 다양한 시나리오를 10가지 예제를 통해 살펴보겠습니다. 각 예제는 간단한 설명과 함께 n8n에서 어떻게 설정하는지 보여줍니다.

💡 예제에 사용된 API: 대부분 JSONPlaceholder 같은 공개된 테스트 API를 사용합니다. 실제 API 사용 시에는 해당 서비스의 API 문서를 반드시 참조하세요!


예제 1: 간단한 GET 요청 (날씨 정보 가져오기) ☀️

  • 목표: 특정 도시의 현재 날씨 정보를 가져옵니다.
  • 시나리오: OpenWeatherMap 같은 날씨 API에서 서울의 날씨 데이터를 조회합니다.
Start (✅)
  ⬇️
HTTP Request (🌐)
  - Method: GET
  - URL: https://api.openweathermap.org/data/2.5/weather
  - Query Parameters:
    - q: Seoul
    - appid: {{your_openweathermap_api_key}} (실제 API 키로 대체)
  ⬇️
Set (✏️)
  - Values:
    - city: {{ $json.name }}
    - temperature: {{ ($json.main.temp - 273.15).toFixed(2) }} °C (켈빈에서 섭씨로 변환)
    - description: {{ $json.weather[0].description }}

설명: GET 메서드를 사용하여 URL에 지정된 API에서 데이터를 요청합니다. Query Parametersq (도시 이름)와 appid (API 키)를 넘겨줍니다. 응답으로 받은 JSON 데이터에서 원하는 정보를 추출하여 Set 노드로 가공합니다.


예제 2: JSON 데이터 POST (새로운 사용자 생성) ➕

  • 목표: 새로운 사용자 정보를 서버에 추가합니다.
  • 시나리오: 가상의 사용자 관리 API에 새 사용자 정보를 보냅니다.
Start (✅)
  ⬇️
HTTP Request (🌐)
  - Method: POST
  - URL: https://jsonplaceholder.typicode.com/users
  - Headers:
    - Content-Type: application/json
  - Body:
    - Body Content Type: JSON
    - JSON:
      {
        "name": "n8n 자동화 마스터",
        "username": "n8n_master",
        "email": "master@n8n.com"
      }

설명: POST 메서드를 사용하고, Content-Typeapplication/json으로 설정합니다. Body 섹션에서 Body Content TypeJSON으로 선택한 후, 전송할 JSON 데이터를 직접 입력합니다.


예제 3: 폼 데이터 POST (웹훅으로 데이터 전송) 📝

  • 목표: HTML 폼 제출과 유사한 형태로 데이터를 웹훅으로 보냅니다.
  • 시나리오: 특정 이벤트 발생 시 웹훅(RequestBin 등)으로 데이터를 전송하여 기록합니다.
Start (✅)
  ⬇️
HTTP Request (🌐)
  - Method: POST
  - URL: https://webhook.site/your-unique-webhook-id (실제 웹훅 URL로 대체)
  - Headers: (Content-Type: application/x-www-form-urlencoded는 자동으로 설정됨)
  - Body:
    - Body Content Type: Form-Data (x-www-form-urlencoded)
    - Form Data:
      - Key: event_type, Value: user_signed_up
      - Key: user_id, Value: 12345
      - Key: timestamp, Value: {{ new Date().toISOString() }}

설명: POST 메서드를 사용하고, Body Content TypeForm-Data (x-www-form-urlencoded)로 설정합니다. 키-값 쌍 형태로 데이터를 입력하면 됩니다. Content-Type 헤더는 n8n이 자동으로 설정해줍니다.


예제 4: PUT 요청 (기존 리소스 업데이트) 🔄

  • 목표: 기존에 존재하는 사용자 정보 중 일부 또는 전체를 업데이트합니다.
  • 시나리오: ID가 1인 사용자의 이메일 주소를 변경합니다.
Start (✅)
  ⬇️
HTTP Request (🌐)
  - Method: PUT
  - URL: https://jsonplaceholder.typicode.com/users/1
  - Headers:
    - Content-Type: application/json
  - Body:
    - Body Content Type: JSON
    - JSON:
      {
        "id": 1,
        "name": "Jane Doe",
        "username": "janedoe_updated",
        "email": "jane.doe.new@example.com"
      }

설명: PUT 메서드는 리소스의 모든 필드를 교체하는 데 사용됩니다. 지정된 URL의 리소스(여기서는 ID가 1인 사용자)를 Body에 담긴 JSON 데이터로 완전히 대체합니다.


예제 5: DELETE 요청 (리소스 삭제) 🗑️

  • 목표: 특정 리소스를 서버에서 삭제합니다.
  • 시나리오: ID가 1인 게시글을 삭제합니다.
Start (✅)
  ⬇️
HTTP Request (🌐)
  - Method: DELETE
  - URL: https://jsonplaceholder.typicode.com/posts/1

설명: DELETE 메서드는 삭제할 리소스의 URL만 지정하면 됩니다. 보통 별도의 Body는 필요 없습니다. 성공하면 200 OK 또는 204 No Content 응답을 받습니다.


예제 6: API 키 인증 (헤더에 포함) 🔑

  • 목표: API 키를 헤더에 포함하여 인증이 필요한 API를 호출합니다.
  • 시나리오: 가상의 서비스 API 호출 시 X-API-Key 헤더를 통해 인증합니다.
Start (✅)
  ⬇️
HTTP Request (🌐)
  - Method: GET
  - URL: https://api.example.com/secured_data
  - Headers:
    - Key: X-API-Key, Value: {{ $node["Start"].parameters.apiKey }}
    (또는 n8n Credentials에서 API Key 타입을 사용하여 Credential을 연결하는 것이 더 안전하고 권장됩니다.)
    - Credential: Add New -> API Key (Header) -> Credential Name: My_API_Key
      -> Header Name: X-API-Key, API Key: your_actual_api_key

설명: API 키는 매우 민감한 정보이므로, 위 예시처럼 직접 입력하는 것보다는 n8n의 Credentials 기능을 사용하는 것을 강력히 권장합니다. Credential을 설정하면 HTTP 노드에서 해당 Credential을 선택하는 것만으로 자동으로 인증 정보를 처리해줍니다.


예제 7: 파일 업로드 (Multipart/Form-Data) 📂

  • 목표: 로컬에 있는 파일을 외부 서비스로 업로드합니다.
  • 시나리오: 이미지 파일을 서버로 전송합니다.
Start (✅)
  ⬇️
Read Binary File (📁)
  - File Path: /path/to/your/image.jpg (예: /tmp/my_image.png)
  - Output Data Type: Binary
  ⬇️
HTTP Request (🌐)
  - Method: POST
  - URL: https://api.example.com/upload
  - Body:
    - Body Content Type: Form-Data (multipart/form-data)
    - Form Data:
      - Key: file, Value: {{ $binary.data }} (앞서 Read Binary File 노드에서 읽어온 바이너리 데이터)
      - Key: filename, Value: my_image.png (업로드될 파일의 이름)
      - Key: description, Value: This is an image for n8n guide.

설명: 파일 업로드는 multipart/form-data 바디 타입으로 처리합니다. 먼저 Read Binary File 노드(또는 다른 노드에서 바이너리 데이터를 생성)를 사용하여 파일을 읽어옵니다. 그 다음 HTTP 노드의 Form Data에서 Key를 파일 필드 이름(예: file)으로, Value{{ $binary.data }} (이전 노드에서 읽어온 바이너리 데이터 참조)로 설정합니다. 필요에 따라 filename 같은 추가 필드를 포함할 수 있습니다.


예제 8: 에러 처리 및 응답 상태 코드 확인 🚨

  • 목표: HTTP 요청 실패 시 이를 감지하고 적절히 처리합니다.
  • 시나리오: 존재하지 않는 URL에 요청하여 404 에러를 발생시키고 이를 처리합니다.
Start (✅)
  ⬇️
Try (🛡️)
  ⬇️ (On Success)
  HTTP Request (🌐)
    - Method: GET
    - URL: https://httpstat.us/404 (일부러 404 에러를 발생시키는 서비스)
  ⬇️
  Respond to Webhook (✅)
    - Response: "성공적으로 데이터를 가져왔습니다!"
  ⬇️ (On Error)
Catch (❌)
  ⬇️
  Respond to Webhook (⚠️)
    - Response: "에러 발생: {{ $json.message }} (상태 코드: {{ $json.statusCode }})"
    - Status Code: 500

설명: Try/Catch 블록을 사용하여 HTTP 요청을 감싸줍니다. HTTP 요청이 2xx 이외의 상태 코드를 받으면 에러로 간주되어 Catch 블록으로 흐름이 넘어갑니다. Catch 블록에서는 에러 메시지나 상태 코드를 참조하여 적절한 응답을 보내거나 다른 처리를 할 수 있습니다.


예제 9: 이전 노드 데이터 활용 (동적 URL/바디 생성) ➡️

  • 목표: 이전 노드에서 생성된 데이터를 기반으로 동적으로 HTTP 요청을 구성합니다.
  • 시나리오: Set 노드에서 생성된 사용자 ID를 사용하여 특정 사용자 정보를 조회합니다.
Start (✅)
  ⬇️
Set (✏️)
  - Values:
    - user_id: 5
    - post_title: "n8n 노드 활용법"
    - post_body: "n8n의 다양한 노드를 활용하여 워크플로우를 자동화하는 방법."
  ⬇️
HTTP Request (🌐)
  - Method: GET
  - URL: https://jsonplaceholder.typicode.com/users/{{ $json.user_id }}
  - Body (POST 요청 시):
    - Body Content Type: JSON
    - JSON:
      {
        "title": "{{ $json.post_title }}",
        "body": "{{ $json.post_body }}",
        "userId": "{{ $json.user_id }}"
      }

설명: n8n의 가장 강력한 기능 중 하나인 표현식(Expressions)을 활용하는 예시입니다. {{ $json.key }} 또는 {{ $node["노드이름"].json.key }} 형식을 사용하여 이전 노드의 데이터를 동적으로 URL, 쿼리 파라미터, 헤더, 또는 바디에 삽입할 수 있습니다.


예제 10: API 페이징 처리 (Next Page URL 따라가기) ➡️🔄

  • 목표: 여러 페이지로 나뉘어 제공되는 API 데이터를 모두 가져옵니다.
  • 시나리오: next_page_url을 응답에 포함하는 가상의 API에서 모든 데이터를 순회하며 가져옵니다.
Start (✅)
  ⬇️
Function (⚙️)
  - JS Code:
    return [{ json: { next_page_url: "https://api.example.com/items?page=1" } }];
  ⬇️
Loop Over Items (🔄)
  - Mode: Until True
  - Value to Check: {{ $json.next_page_url }}
  - Max Iterations: 10 (무한 루프 방지)
  ⬇️ (Inside Loop)
  HTTP Request (🌐)
    - Method: GET
    - URL: {{ $json.next_page_url }}
  ⬇️
  Collect Items (📦)
    - Always Output Data: true
  ⬇️
  Function (⚙️)
    - JS Code: (다음 페이지 URL을 업데이트하는 로직)
      // 예시: API 응답에서 next_page_url 필드를 찾아서 반환
      const response = $node["HTTP Request"].json;
      if (response && response.pagination && response.pagination.next_page_url) {
        return [{ json: { next_page_url: response.pagination.next_page_url } }];
      }
      return [{ json: { next_page_url: null } }]; // 다음 페이지 없으면 null 반환
  ⬇️ (Loop continues or exits)

설명: 이 예제는 하나의 HTTP 노드만으로는 구현하기 어렵고, Loop Over ItemsFunction 노드와의 조합이 필요합니다.

  1. 초기 next_page_url을 설정합니다.
  2. Loop Over Items 노드가 next_page_url이 존재하는 동안 반복합니다.
  3. HTTP 노드로 해당 next_page_url을 호출하여 데이터를 가져옵니다.
  4. Function 노드에서 HTTP 응답을 파싱하여 다음 페이지의 next_page_url을 찾아 업데이트합니다. 다음 페이지가 없으면 next_page_urlnull로 설정하여 루프를 종료합니다.
  5. Collect Items 노드는 루프를 돌면서 가져온 모든 데이터를 취합합니다.

팁: 실제 API는 next_page_url 대신 page 파라미터를 증가시키거나, offsetlimit을 사용하는 등 다양한 페이징 방식을 사용합니다. 해당 API의 문서를 반드시 확인하여 동적으로 URL을 구성해야 합니다.


4. n8n HTTP Node 활용 팁 & 베스트 프랙티스 ✨

HTTP 노드를 더욱 효율적으로 활용하기 위한 몇 가지 팁입니다.

  • 표현식 (Expressions) 적극 활용하기:

    • {{ $json.dataField }}: 현재 노드의 입력 데이터에서 필드를 가져올 때.
    • {{ $node["NodeName"].json.dataField }}: 특정 이전 노드의 출력 데이터에서 필드를 가져올 때.
    • {{ $env.YOUR_VARIABLE }}: n8n 환경 변수나 Credential에서 값을 가져올 때.
    • {{ $input.item.index }}: Split In BatchesLoop Over Items 등에서 현재 아이템의 인덱스를 가져올 때.
    • {{ $today.toISOString() }}: 날짜/시간 관련 내장 함수 활용. 표현식은 HTTP 노드뿐만 아니라 n8n 전체 워크플로우의 유연성을 극대화합니다.
  • 보안에 신경 쓰기 (Credential 사용):

    • API 키, 비밀번호, 토큰 등 민감한 정보는 Credentials 기능을 사용하여 n8n에 안전하게 저장하고 관리해야 합니다. 워크플로우 내에 직접 하드코딩하지 마세요!
  • 에러 처리 루틴 마련:

    • Try/Catch 노드를 사용하여 API 호출 실패 시 워크플로우가 멈추지 않고 적절히 대응하도록 합니다.
    • If 노드를 사용하여 HTTP 응답의 statusCode를 확인하고, 특정 상태 코드에 따라 다른 로직을 실행할 수 있습니다. (예: {{ $json.statusCode >= 400 }}이면 에러 처리)
  • 응답 데이터 구조 이해하기:

    • API 응답은 대부분 JSON 형식입니다. n8n의 결과 창에서 JSON 구조를 잘 확인하고, Set 노드나 Function 노드를 활용하여 필요한 데이터를 추출하고 가공하는 연습을 많이 하세요.
  • 디버깅 활용:

    • Execute Workflow 버튼을 눌러 단계별로 실행하면서 각 노드의 입출력 데이터를 확인합니다.
    • Debug 노드를 사용하여 특정 시점의 데이터 상태를 확인하고, 예상과 다른 경우 원인을 파악합니다.
    • 로그를 기록하는 노드(예: Log)를 활용하여 흐름을 추적합니다.
  • 전용 노드 vs. HTTP 노드:

    • n8n에 해당 서비스의 전용 노드가 있다면 가능한 한 전용 노드를 먼저 사용하는 것이 좋습니다. 전용 노드는 인증, 파라미터 등이 미리 설정되어 있어 사용하기 훨씬 편리합니다.
    • 하지만 전용 노드가 없거나, 전용 노드가 제공하지 않는 복잡한 API 호출이 필요할 때는 망설이지 말고 HTTP 노드를 사용하세요.

결론 🌈

n8n의 HTTP Node는 여러분의 자동화 워크플로우에 무한한 가능성을 열어주는 강력한 도구입니다. 웹의 기본 통신 원리를 이해하고, HTTP 메서드, 헤더, 바디 등의 개념을 숙지하며, 다양한 실전 예제를 통해 직접 워크플로우를 구성해보는 것이 중요합니다.

이 가이드가 여러분이 HTTP 노드를 완벽하게 이해하고, 복잡한 API 연동도 두려워하지 않는 n8n 마스터로 성장하는 데 큰 도움이 되기를 바랍니다! 🚀 이제 직접 n8n 워크플로우를 열고, HTTP 노드를 활용하여 세상의 모든 API와 소통해보세요! 궁금한 점이 있다면 언제든 해당 API 문서를 찾아보거나 커뮤니티의 도움을 받는 것을 잊지 마세요. Happy Automating! 🎉

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다